← all adapters

dynamodb-style

simulates Amazon DynamoDB API 2012-08-10

restadapter v0.1.01 routes

verification

SDK + VMverified with aws-sdk-go-v2 v1.43.7· surface 1 · not implemented 8 · differs 5

use it

# add to stunt.yaml
services:
  dynamodb:
    adapter: embedded:dynamodb-style

# then
$ stunt up

The embedded: source extracts this adapter from the binary — no git clone, fully offline.

how to mock the Amazon DynamoDB API locally

Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of Amazon DynamoDB API. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real Amazon DynamoDB API 2012-08-10 surface — the data is fake, the behavior is real.

backing stores

tablesitems

api surface (1)

generated from the adapter manifest — exactly what boots, nothing more

1 routes
POST/

SDK-verified behaviors (8)

  • CreateTable via real SigV4
  • typed item Put/Get round-trip (S/N/BOOL/SS)
  • UpdateItem SET/ADD with exact decimal arithmetic
  • ConditionExpression → ConditionalCheckFailedException
  • Query numeric sort-key ordering (1,2,10)
  • Query BETWEEN + ScanIndexForward=false
  • Scan with FilterExpression
  • typed ResourceNotFoundException surface

VM-verified behaviors (22)

  • an unsigned request is 403; a real SigV4 signature passes
  • tampered signatures, wrong secrets, and clock skew are all 403
  • CreateTable returns ACTIVE; duplicate and bad-schema creates throw the real exceptions
  • Describe/List/Delete round out the lifecycle with table paging
  • typed values round-trip verbatim through PutItem/GetItem
  • projection, misses, and malformed keys take the documented paths
  • SET upserts, ADD does exact-decimal math, REMOVE drops with UPDATED_OLD
  • non-numeric ADD and bogus ReturnValues are ValidationExceptions
  • numeric sort keys order numerically (10 after 9)
  • BETWEEN, >=, descending, and begins_with shape the key range
  • Limit + ExclusiveStartKey pages queries; bad conditions are rejected
  • Scan returns the whole table and filters by expression
  • Select COUNT, pagination, and error paths round out Scan
  • attribute_not_exists guards writes; failed checks return the old item
  • conditional deletes enforce the condition; consumed capacity echoes
  • batch writes and gets round-trip with empty Unprocessed maps
  • oversized, unknown-table, and invalid batches are rejected atomically
  • unsupported constructs fail with named ValidationExceptions
  • a leading "." answers ValidationException instead of wedging the tokenizer
  • "|" in key values cannot collide two composite keys
  • set members dedupe by string and numeric value
  • "-0" and "0" name the same stored item

Not implemented (8)

  • No secondary indexes: GSI/LSI creation and index-targeted queries
  • No transactions: TransactGetItems, TransactWriteItems
  • No PartiQL: ExecuteStatement, BatchExecuteStatement
  • No TTL: DescribeTimeToLive, UpdateTimeToLive
  • No backup or restore: CreateBackup, RestoreTableFromBackup
  • No UpdateTable, TagResource/UntagResource/ListTags, or DescribeLimits
  • No PITR or import/export: ExportTableToPointInTime, ImportTable
  • No global tables (CreateGlobalTable, ListGlobalTables)

Differs from the real API (5)

  • expression subset: OR/NOT/parens/IN/size()/doc paths rejected as ValidationException
  • tables are ACTIVE immediately and DeleteTable is synchronous; no CREATING/DELETING
  • UnprocessedKeys/UnprocessedItems always empty; no throttling, ConsumedCapacity fixed at 1
  • Query/Scan Limit caps returned post-filter items; real caps items evaluated
  • UpdateItem REMOVE on a key attribute silently no-ops instead of erroring
want more of the Amazon DynamoDB API surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.