---
title: "Parity Suite - Martin Hicks"
description: "An independent DynamoDB conformance suite that scores every DynamoDB emulator against live AWS DynamoDB."
canonical: https://martinhicks.dev/projects/dynamodb-conformance
last-updated: 2026-05-26
---

![Parity Suite](https://martinhicks.dev/images/dynamodb-conformance-logo.svg)

2026 · Author

# Parity Suite

An independent DynamoDB conformance suite that scores every DynamoDB emulator against live AWS DynamoDB.

[https://paritysuite.org ↗](https://paritysuite.org)

---

## About the conformance suite

AWS doesn't publish a conformance suite for DynamoDB. So every emulator author ends up guessing at how the real thing behaves and testing against their own assumptions. That's how subtle differences slip through and surface later as production bugs you can't reproduce locally.

The suite at [paritysuite.org](https://paritysuite.org) closes that gap. It runs every test against real DynamoDB on AWS first, records what passes, and treats that as the baseline. An emulator only passes a test if it gives the same answer DynamoDB does. Real DynamoDB sits at the top of every table at a flat 100%, because it's the thing everything else is measured against.

### Behaviour, not "works with the SDK"

Plenty of emulators will take your requests and hand something back. The question that matters is whether they hand back the _same_ something. A subtly different error, a validation check that fires in the wrong order, a filter that returns one extra item: none of it breaks the happy path, all of it bites you in production.

So the suite tests observable behaviour and nothing else. It drives the standard AWS SDK against an HTTP endpoint and asserts on what comes back: the response shape, the exact error, the order things are validated in. No internal hooks, no privileged access. If your application talks to the target through the SDK, that's exactly what gets checked.

### Three tiers, because one number hides too much

A single "92%" tells you almost nothing. Ninety-two percent of what? So the suite splits its tests into three tiers. **Core** covers the CRUD, queries, scans and batch operations most people rely on. **Complete** adds the documented but less common features: transactions, PartiQL, TTL, streams. **Strict** checks validation ordering, exact error wording, limits and legacy API shapes. A gap in Core bites everyday code; a gap in Strict mostly bites your CI when it asserts on error messages.

### Why a whole site for it

A README can show a single snapshot. The site shows everything else: how each emulator's score has shifted over time, why it moved, and which run-over-run changes were noise versus signal.

Every figure on the site is built from the suite's own results at build time, never typed in by hand. The moment you copy a number into a second place the two start drifting apart.

### Built alongside Dynoxide

I built the suite while building [Dynoxide](https://martinhicks.dev/projects/dynoxide), my own DynamoDB emulator, because I needed a way to prove it behaves like the real thing rather than just hoping it did. It runs against every emulator, not only mine, so the comparison stays honest.

### Repository

[

### paritysuite/dynamodb-conformance

A TypeScript conformance suite that scores DynamoDB-compatible implementations against real DynamoDB behaviour, across three tiers, with real DynamoDB as the ground truth.

](https://github.com/paritysuite/dynamodb-conformance)

The suite is Apache-2.0 licensed and every test is in the repo. Read them, run them against your own target, or send a PR. That's how the comparison stays honest.

## From the journal

-    [![The Parity Suite logo, a teal rounded square with three descending bars, on a near-black background above the paritysuite.org wordmark](https://martinhicks.dev/images/articles/parity-suite-card.png)
    
    Parity Suite 3.0.0: measuring the wrong thing
    
    Parity Suite 3.0.0 splits the old conformance percentage into divergence and coverage, grades every DynamoDB emulator from A to F, and takes the suite to 1,054 tests with the first coverage of DynamoDB's new vector search.](https://martinhicks.dev/articles/parity-suite-300-release-notes)
-    [![A scattered cloud of glowing amber points on a near-black background, with one bright point at the centre joined to its three closest neighbours by thin lines](https://martinhicks.dev/images/articles/dynamodb-vector-search-docs-get-wrong.png)
    
    When a DynamoDB vector index is actually ready
    
    AWS said to wait for IndexStatus ACTIVE and Backfilling false. I measured it, and that state never happens. AWS have since rewritten the docs.](https://martinhicks.dev/articles/dynamodb-vector-search-docs-get-wrong)
-    [![The Parity Suite logo, a teal rounded square with three descending bars, on a near-black background above the paritysuite.org wordmark](https://martinhicks.dev/images/articles/parity-suite-card.png)
    
    What a write to an indexed DynamoDB table costs
    
    What a write to a DynamoDB table carrying GSIs and LSIs actually costs, measured against real DynamoDB in eu-west-2 rather than lifted from the docs.](https://martinhicks.dev/articles/what-a-write-to-an-indexed-dynamodb-table-costs)
-    [![The teal Parity Suite logo centred on a near-black background, with the paritysuite.org wordmark in white beneath it](https://martinhicks.dev/images/articles/parity-suite-card.png)
    
    You can't pin DynamoDB to one region
    
    A conformance suite is only as good as its ground truth. Mine used one AWS region, until DynamoDB changed its behaviour there, then reverted it, and I had to rethink what correct meant.](https://martinhicks.dev/articles/you-cant-pin-dynamodb-to-one-region)
-    [![The teal Parity Suite logo centred on a near-black background, with the paritysuite.org wordmark in white beneath it](https://martinhicks.dev/images/articles/parity-suite-card.png)
    
    What a conditional DynamoDB transaction actually costs
    
    The AWS docs aren't clear on what a conditional TransactWriteItems costs in capacity units, so I ran it against real DynamoDB and pinned the numbers.](https://martinhicks.dev/articles/what-a-conditional-dynamodb-transaction-costs)
-    [![A thin horizontal line of amber light on a near-black background, running level then stepping up to a slightly higher position partway across, as if a baseline has shifted underneath](https://martinhicks.dev/images/articles/dynamodb-changed-its-validation-errors.png)
    
    I watched DynamoDB change under my conformance suite
    
    My DynamoDB conformance suite went red and the test that failed was real AWS. It had reworded its validation errors, and the change hasn't reached every region yet.](https://martinhicks.dev/articles/dynamodb-changed-its-validation-errors)
-    [![Social card for Parity Suite (paritysuite.org), the DynamoDB conformance suite that scores emulators against live AWS DynamoDB](https://martinhicks.dev/images/dynamodb-conformance-og.png)
    
    How close is your DynamoDB emulator to AWS?
    
    The DynamoDB conformance suite now has a home: eight emulators and 684 tests scored against live AWS DynamoDB, with results published on every run.](https://martinhicks.dev/articles/dynamodb-conformance-org)
-    [![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)

## 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/dynamodb-conformance
