DynamoDB conformance
Dynoxide is tested against Parity Suite, the DynamoDB conformance suite - hundreds of behavioural tests run against real DynamoDB on AWS to fix the expected answer, then run against every emulator the same way.
Parity Suite is maintained by the same person who maintains Dynoxide. Every engine, Dynoxide included, runs the same automated tests against live AWS DynamoDB, and the results and test code are public. The suite is a TypeScript project covering real DynamoDB, DynamoDB Local, LocalStack, dynalite, ministack, floci, ExtendDB, and Dynoxide, with every test validated against AWS first to establish ground truth.
How a target is scored
Two figures come out of a run, and the suite never adds them together:
- Divergence is
fail / total- the share of the whole suite a target answers differently from real DynamoDB. - Coverage is
(pass + fail) / total- the share it implements at all.
They stay apart because a skip and a fail are not the same kind of problem. An operation a target declines is something you find in minutes and plan around. One it gets quietly wrong is something you find in production.
The grade is a reading aid over the pair rather than a third number. Divergence sets the letter - A under 5%, B under 15%, C under 25%, D under 35%, F beyond - and coverage can only lower it, never raise it: a third of whatever a target leaves unimplemented is added to its divergence before the bands are read. A target that implements the whole suite is graded on divergence alone. A+ means zero divergence at full coverage.
Both figures print beside every letter, so any grade on this page can be worked back out from the two numbers next to it. The thresholds above are criteria version 1, in effect since 2026-08-12; they render from the same constants the site grades with, so this sentence cannot drift from the letters in the table.
Results
The latest run, pulled straight from the suite. DynamoDB is the ground truth - it defines the expected answer, so it diverges nowhere and covers everything by construction. It carries no letter, because grading the yardstick against itself would put it in a band an engine had to earn its way into. The live results for every target, tracked over time, are on the Parity Suite conformance board.
| Target | Grade | Divergence | Coverage | Tier 1 | Tier 2 | Tier 3 |
|---|---|---|---|---|---|---|
| DynamoDB | baseline | 0.0% | 100.0% | 0.0% | 0.0% | 0.0% |
| Dynoxide | A | 0.2% | 98.9% | 0.0% | 0.0% | 0.5% |
| ExtendDB | B | 1.8% | 78.7% | 0.0% | 0.0% | 5.6% |
| extenddb sqlite | B | 2.1% | 82.8% | 0.0% | 1.2% | 5.4% |
| LocalStack | B | 8.1% | 95.3% | 2.8% | 12.5% | 10.7% |
| Dynalite | C | 11.5% | 69.1% | 10.7% | 8.1% | 15.4% |
| DynamoDB Local | C | 15.7% | 94.2% | 7.5% | 15.4% | 25.9% |
| Ministack | C | 17.6% | 95.8% | 5.6% | 25.5% | 25.4% |
| Floci | D | 26.9% | 95.1% | 10.1% | 44.6% | 32.4% |
Every column there is divergence except Coverage, tiers included, so lower is better everywhere but the last. Rows are ordered by divergence, which ranks how much each target gets wrong rather than declaring a winner - a target with no divergences over a narrow surface sits high, and its coverage figure says how narrow.
Numbers come from 1251 tests across three tiers, scored on the latest published run. They update on their own as the suite grows and emulators change - nothing here is typed by hand.
The suite also scores Dynoxide's WebAssembly build as a target of its own, so the browser engine can regress on its own and be caught. It's the same engine rather than an alternative to it, so it doesn't get a row above. The browser guide covers what that build supports and what it leaves out.
What the tiers cover
The suite is organised into three tiers of increasing strictness:
Tier 1 - Core. CRUD operations, Query, Scan, batch operations, table management, GSI and LSI support. The things every emulator needs to get right.
Tier 2 - Complete. Transactions, PartiQL, TTL, DynamoDB Streams, resource tags, GSI lifecycle, backups, the control-plane operations. Features that matter for real applications but that some emulators skip.
Tier 3 - Strict. Exact error message formatting, validation ordering, number precision, empty value handling, legacy API compatibility. The edge cases that only surface when you run a real workload against the emulator.
What the suite tests, and what it doesn't
A conformance grade is a useful signal with real limits. A few things worth keeping in mind:
- It only tests what it tests. A behaviour with no test is a blind spot, not a pass. "0.0% Tier 1 divergence" would mean none of the Tier 1 tests that exist caught anything, not that every Core behaviour DynamoDB has is right. The suite is growing, and it isn't everything.
- A grade is an observation, not a certification. It says where a target sat against this suite's tests on one date. The criteria are versioned, so a retuned threshold can move a published letter on a target that changed nothing.
- The two figures are harder to game than the letter. Withdrawing a failing test lowers divergence and coverage by exactly the same amount, so the pair doesn't move in your favour. The letter doesn't fully inherit that: a third of the withdrawal comes back, so the effective figure still falls by the rest. Rank on the two figures rather than the letter if that matters to you.
- It's behaviour only. The suite says nothing about performance, durability, cost, or whether an emulator is the right tool for your job. It checks what your app would see through the AWS SDK, and nothing else.
- Every result is a point in time. A result is tied to the version tested on that date, against DynamoDB's behaviour on that date. Both move.
The full methodology and the live results for every target are on the Parity Suite conformance board. The suite itself - every test - is in the paritysuite/dynamodb-conformance repository.
Coverage measures scope in the suite's own terms, but it can only count operations the suite has tests for. What Dynoxide implements and what it leaves out is on the compatibility page, along with the handful of places it knowingly behaves differently.
Why it matters
Most emulators get the happy path right. The gaps show up in error handling, edge cases, and strict validation ordering. If your tests pass locally but fail against real DynamoDB, the emulator's conformance is the likely culprit.
Dynoxide has been built with the conformance suite running alongside it since day one. The suite has surfaced dozens of correctness issues over its development, and it keeps finding more as it grows. The table above is pulled from the latest published run, so it moves when the results move.
Amazon DynamoDB, DynamoDB, and AWS are trademarks of Amazon.com, Inc. or its affiliates. Dynoxide is an independent project and is not affiliated with, endorsed by, or sponsored by Amazon. DynamoDB Local, LocalStack, dynalite, ministack, floci, and ExtendDB are the trademarks or property of their respective owners.