---
title: "Dynoxide - Martin Hicks"
description: "A DynamoDB emulator backed by SQLite. No Docker, no JVM - runs as an HTTP server, MCP server, or embedded library."
canonical: https://martinhicks.dev/projects/dynoxide
last-updated: 2026-04-03
---

![Dynoxide](https://martinhicks.dev/images/dynoxide-logos/dynoxide-logo-oxide.svg)

2026 · Creator

# Dynoxide

A DynamoDB emulator backed by SQLite. No Docker, no JVM - runs as an HTTP server, MCP server, or embedded library.

[https://github.com/nubo-db/dynoxide ↗](https://github.com/nubo-db/dynoxide)

---

## About Dynoxide

I [wrote about why I built Dynoxide](https://martinhicks.dev/articles/introducing-dynoxide) and how it evolved from an embedded library into a standalone tool. Here's the short version.

I built Dynoxide because DynamoDB Local was driving me mad. It needs Docker or a JVM, takes seconds to start, and eats memory just sitting there. I wanted something I could spin up instantly for local development and testing without all that overhead. I also needed something we could embed directly into a native app we're building - which ruled out anything that runs as a separate process.

Dynoxide is a single ~3MB Rust binary backed by SQLite. It covers pretty much everything DynamoDB can do - table management, item CRUD, batch processing, transactions, PartiQL queries, TTL, and DynamoDB Streams. It passes the full conformance suite that verifies its behaviour against real DynamoDB.

### Three ways to run it

-   **HTTP server** - drop-in replacement for DynamoDB Local, works with any AWS SDK
-   **Embedded library** - link directly into Rust applications for zero-overhead testing
-   **MCP server** - built for AI coding agents that need to work with DynamoDB

### Performance

Cold startup in about 15ms as an HTTP server, or ~0.2ms in embedded mode (vs ~2,287ms for DynamoDB Local). Idle memory footprint of ~4.9MB. No JVM warmup, no Docker overhead.

### Install

Available via [Homebrew](https://github.com/nubo-db/homebrew-tap), [npm](https://www.npmjs.com/package/dynoxide), [crates.io](https://crates.io/crates/dynoxide-rs), or as a standalone binary from [GitHub releases](https://github.com/nubo-db/dynoxide/releases).

### Conformance testing

I built a standalone [DynamoDB conformance suite](https://martinhicks.dev/projects/dynamodb-conformance) to make sure Dynoxide actually behaves like real DynamoDB - the suite runs against both and checks for identical behaviour, with real DynamoDB as the ground truth.

### Repositories

[

### nubo-db/dynoxide

A lightweight DynamoDB emulator backed by SQLite. No Docker. No JVM. Sub-millisecond startup.

](https://github.com/nubo-db/dynoxide)

[

### nubo-db/homebrew-tap

Homebrew formulae for nubo-db projects. Install Dynoxide with `brew install nubo-db/tap/dynoxide`.

](https://github.com/nubo-db/homebrew-tap)

## From the journal

-    [![The Dynoxide hexagonal logo centred on a near-black background](https://martinhicks.dev/images/articles/dynoxide-0120-release-notes.png)
    
    Dynoxide 0.12.0: PartiQL RETURNING, wasm conformance
    
    Dynoxide 0.12.0 makes PartiQL honour the RETURNING clause it used to parse and throw away, and puts the browser build through the conformance suite for the first time as its own scored target. Plus a stack of fixes, and one breaking change for Rust crate consumers.](https://martinhicks.dev/articles/dynoxide-0120-release-notes)
-    [![The Dynoxide hexagonal logo centred on a near-black background](https://martinhicks.dev/images/articles/dynoxide-0113-windows-listener-hardening.png)
    
    Dynoxide 0.11.3: closing a Windows port hijack
    
    Dynoxide 0.11.3 sets SO\_EXCLUSIVEADDRUSE on the DynamoDB and MCP listeners on Windows, closing a same-user port hijack that an investigation into TIME\_WAIT parity wasn't looking for, and runs the unit tests on Windows in CI for the first time.](https://martinhicks.dev/articles/dynoxide-0113-windows-listener-hardening)
-    [![The Dynoxide hexagonal logo centred on a near-black background](https://martinhicks.dev/images/articles/dynoxide-0112-conformance-fixes.png)
    
    Dynoxide 0.11.2: a stack of conformance fixes
    
    Dynoxide 0.11.2 makes the engine report the transaction capacity numbers I pinned against real DynamoDB last week - the read/write split, a ConditionCheck billed as a write, an idempotent replay that recomputes a real read - plus an UpdateTable bug that dropped table keys, and a batch of projection and validation fixes.](https://martinhicks.dev/articles/dynoxide-0112-conformance-fixes)
-    [![The Dynoxide hexagonal logo centred on a near-black background](https://martinhicks.dev/images/articles/dynoxide-0111-conformance-fixes.png)
    
    Dynoxide 0.11.1: four conformance fixes
    
    Dynoxide 0.11.1 is a small patch: four fixes where the engine evaluated a condition expression or validated a number differently from real DynamoDB - map and list equality, the 32-level nesting limit, number-set precision, and a leading-plus on numbers.](https://martinhicks.dev/articles/dynoxide-0111-conformance-fixes)
-    [![The Dynoxide hexagonal logo centred on a near-black background](https://martinhicks.dev/images/articles/dynoxide-0110-wasm-on-npm.png)
    
    Dynoxide 0.11.0: wasm on npm, plus a stack of fixes
    
    Dynoxide 0.11.0 ships the browser engine as an npm package, @dynoxide/wasm-engine, and lands a stack of correctness fixes: secondary-index validation on write, sparse-index behaviour, and error messages brought back in line with real DynamoDB.](https://martinhicks.dev/articles/dynoxide-0110-wasm-on-npm)
-    [![Illustration of the Dynoxide logo with DynamoDB table icons on a dark background](https://martinhicks.dev/images/articles/dynoxide-0100-browser-and-docker.png)
    
    Dynoxide 0.10.0: it runs in the browser now
    
    Dynoxide 0.10.0 compiles to WebAssembly and runs in the browser on OPFS, ships an official ~5 MB Docker image, and adds a storage-backend trait. Plus what breaks.](https://martinhicks.dev/articles/dynoxide-0100-browser-and-docker)
-    [![Minimal illustration of an Apple M-series-style silicon chip on a dark background, with amber circuit traces around a central core-grid die](https://martinhicks.dev/images/articles/iai-callgrind-apple-silicon.png)
    
    Running iai-callgrind on Apple Silicon
    
    iai-callgrind needs Valgrind, and Valgrind doesn't run on Apple Silicon. Here's how to run aarch64 Callgrind benchmarks in a native arm64 Docker container.](https://martinhicks.dev/articles/running-iai-callgrind-on-apple-silicon)
-    [![The Dynoxide hexagonal logo centred on a black background](https://martinhicks.dev/images/articles/dynoxide-patch-notes-0910-0912.png)
    
    Dynoxide patch notes: 0.9.10 to 0.9.12
    
    Three patches to dynoxide. 16 error-string fixes, an MCP server that wouldn't die on Ctrl+C, a stale port, and a code comment that lied all along.](https://martinhicks.dev/articles/dynoxide-patch-notes-0910-0912)
-    [![DynamoDB Conformance Suite social card showing 526 tests validated against real DynamoDB with pass rates for each emulator](https://martinhicks.dev/images/articles/dynoxide-conformance-suite.png)
    
    Building a DynamoDB conformance suite
    
    How I built a 526-test DynamoDB conformance suite, and what it found in DynamoDB Local, LocalStack, Dynalite, and Dynoxide.](https://martinhicks.dev/articles/dynoxide-conformance-suite)
-    [![The Dynoxide hexagon logo alongside the npm logo on a dark background](https://martinhicks.dev/images/articles/dynoxide-098-npm.png)
    
    Dynoxide 0.9.8: fixing the orphan problem
    
    Dynoxide's npm wrapper was leaving orphaned processes when backgrounded in npm scripts. Three fixes in 0.9.8 sort it out - SIGTERM handling in Rust, async spawn with signal forwarding, and PPID polling for the backgrounded case.](https://martinhicks.dev/articles/dynoxide-098-npm-process-lifecycle)

## PROJECTS

[Access Patterns 2026–present](https://martinhicks.dev/projects/accesspatterns) [Dynoxide 2025–present](https://martinhicks.dev/projects/dynoxide) [Parity Suite 2026–present](https://martinhicks.dev/projects/dynamodb-conformance) [Si Novi 2018–present](https://martinhicks.dev/projects/si-novi) [Plugins & Tools 2018–present](https://martinhicks.dev/projects/open-source) [Tariff St. / Human 2011–2018](https://martinhicks.dev/projects/tariff-street) [Iconic Mobile 2010–2012](https://martinhicks.dev/projects/iconic-mobile) [Freelance 2008–2011](https://martinhicks.dev/projects/freelance) [Via Studios 2005–2008](https://martinhicks.dev/projects/via-studios)

## Get in touch

[

hello@martinhicks.dev



](mailto:hello@martinhicks.dev)

Looking for someone to work with on your next project? Head over to [sinovi.uk/contact](https://sinovi.uk/contact) and we'll arrange a call to discuss your plans.

## Follow me

-   [
    
    GitHub 
    
    
    
    ](https://github.com/hicksy)
-   [
    
    Bluesky 
    
    
    
    ](https://bsky.app/profile/martinhicks.dev)
-   [
    
    Mastodon 
    
    
    
    ](https://hachyderm.io/@martinhicks)
-   [
    
    LinkedIn 
    
    
    
    ](https://www.linkedin.com/in/martin-hicks-8061748/)

## Work history

1.   ![sinovi logo](https://martinhicks.dev/images/sinovi-logo.png)
    
    Company
    
    [Si Novi](https://sinovi.uk)
    
    Date
    
    2018  Present
    
    Role
    
    Founder / Principal Consultant
    
2.   ![human software logo](https://martinhicks.dev/images/human-logo.jpeg)
    
    Company
    
    Tariff St. / Human
    
    Date
    
    2011  2018
    
    Role
    
    Director. Software development
    
3.   ![](https://martinhicks.dev/images/iconic-mobile-logo.png)
    
    Company
    
    Iconic Mobile
    
    Date
    
    2010  2012
    
    Role
    
    Director. Mobile app development
    
4.   ![mjh logo - basic, the letters mjs](https://martinhicks.dev/images/mjh-logo.png)
    
    Company
    
    Freelance
    
    Date
    
    2008  2011
    
    Role
    
    Web & mobile developer
    
5.   ![via studios logo](https://martinhicks.dev/images/via-logo.ico)
    
    Company
    
    Via Studios
    
    Date
    
    2005  2008
    
    Role
    
    Web developer
    

## Recently played

[

![13 (Special Edition)](https://lastfm-img.freetls.fastly.net/i/u/174s/ce5f6c82da40669f57bb4ee122957238.png)

No Distance Left to Run

Blur — 13 (Special Edition)



](https://www.last.fm/music/Blur/_/No+Distance+Left+to+Run)[

![First Time I Ever Saw Your Face - Single](https://is1-ssl.mzstatic.com/image/thumb/Music/de/4c/12/mzi.rqjfzfsh.jpg/300x300bb.jpg)

First Time I Ever Saw Your Face

Easther Bennett — First Time I Ever Saw Your Face - Single



](https://music.apple.com/us/album/first-time-i-ever-saw-your-face-single/432012321?uo=4)[

![Takk... (20th Anniversary Deluxe Edition)](https://lastfm-img.freetls.fastly.net/i/u/174s/d8b2635b8c2a4154fc23e95218909a04.jpg)

Hoppípolla (2025 Remaster)

Sigur Rós — Takk... (20th Anniversary Deluxe Edition)



](https://www.last.fm/music/Sigur+R%C3%B3s/_/Hopp%C3%ADpolla+\(2025+Remaster\))[

![I'm New Here](https://lastfm-img.freetls.fastly.net/i/u/174s/81b3b6bb024b413596c104c7a0d2c637.png)

New York Is Killing Me

Gil Scott-Heron — I'm New Here



](https://www.last.fm/music/Gil+Scott-Heron/_/New+York+Is+Killing+Me)[

![American IV: The Man Comes Around](https://lastfm-img.freetls.fastly.net/i/u/174s/df687b9f01e138ac58ec071eef3663a0.jpg)

Hurt

Johnny Cash — American IV: The Man Comes Around



](https://www.last.fm/music/Johnny+Cash/_/Hurt)

[View on Last.fm →](https://www.last.fm/user/martinhicks)

---

Source: https://martinhicks.dev/projects/dynoxide
