DynamoDB feature coverage
Served by default on 127.0.0.1:8000; opt out with --no-dynamodb;
per-tenant signed access keys. Anything not listed as supported should be
assumed unsupported.
The Nimbus DynamoDB endpoint implements the full operation set below,
grouped into tiers T0–T7. Requests are dispatched on the standard
X-Amz-Target header (DynamoDB_20120810.* and
DynamoDBStreams_20120810.*); an unrecognized target is rejected with an
explicit error.
Status values:
- Implemented — supported end to end.
- Implemented, with divergence — supported, with a recorded behavioral
difference from AWS DynamoDB. Each
DDB-DIV-*code is documented on the divergences page.
T0 — Control plane
Section titled “T0 — Control plane”| Operation | Request surface | Response surface | Errors | Status |
|---|---|---|---|---|
CreateTable | TableName, KeySchema, AttributeDefinitions, BillingMode, StreamSpecification, LocalSecondaryIndexes, GlobalSecondaryIndexes | TableDescription with TableStatus, TableArn, TableId | ResourceInUseException, ValidationException | Implemented, with divergence (DDB-DIV-004: tables are ACTIVE immediately; DDB-DIV-003: the _ddb_ name prefix is reserved) |
DescribeTable | TableName | Table | ResourceNotFoundException | Implemented |
ListTables | ExclusiveStartTableName, Limit | TableNames, LastEvaluatedTableName; paginated | — | Implemented |
UpdateTable | TableName, BillingMode, StreamSpecification, GSI updates, deletion protection | TableDescription | ResourceNotFoundException, ValidationException | Implemented |
DeleteTable | TableName | TableDescription (DELETING) | ResourceNotFoundException | Implemented |
DescribeEndpoints | — | Endpoints | — | Implemented |
DescribeLimits | — | account and table capacity maxima | — | Implemented |
T1 — Single-item
Section titled “T1 — Single-item”| Operation | Request surface | Response surface | Errors | Status |
|---|---|---|---|---|
PutItem | TableName, Item, ConditionExpression, ExpressionAttributeNames/Values, ReturnValues | Attributes | ConditionalCheckFailedException, ResourceNotFoundException, ValidationException | Implemented, with divergence (DDB-DIV-005: storage format; DDB-DIV-001: smaller composite key-size limit) |
GetItem | TableName, Key, ProjectionExpression, ConsistentRead | Item | ResourceNotFoundException, ValidationException | Implemented |
UpdateItem | TableName, Key, UpdateExpression, ConditionExpression, ReturnValues | Attributes | ConditionalCheckFailedException, ResourceNotFoundException, ValidationException | Implemented |
DeleteItem | TableName, Key, ConditionExpression, ReturnValues | Attributes | ConditionalCheckFailedException, ResourceNotFoundException, ValidationException | Implemented |
Conditional writes are checked and committed in one storage transaction, so a condition cannot be raced between its check and its commit.
T2 — Query and scan
Section titled “T2 — Query and scan”| Operation | Request surface | Response surface | Errors | Status |
|---|---|---|---|---|
Query | TableName, KeyConditionExpression, FilterExpression, ProjectionExpression, IndexName, Limit, ExclusiveStartKey, ScanIndexForward, Select | Items, Count, ScannedCount, LastEvaluatedKey; paginated | ResourceNotFoundException, ValidationException | Implemented, with divergence (DDB-DIV-002: sort-key encoding) |
Scan | TableName, FilterExpression, ProjectionExpression, IndexName, Limit, ExclusiveStartKey, Segment, TotalSegments, Select | Items, Count, ScannedCount, LastEvaluatedKey; paginated, parallel scan supported | ResourceNotFoundException, ValidationException | Implemented |
T3 — Batch and transactions
Section titled “T3 — Batch and transactions”| Operation | Request surface | Response surface | Errors | Status |
|---|---|---|---|---|
BatchGetItem | RequestItems with Keys, ProjectionExpression, ConsistentRead | Responses, UnprocessedKeys | ResourceNotFoundException, ValidationException | Implemented |
BatchWriteItem | RequestItems with PutRequest/DeleteRequest | UnprocessedItems | ResourceNotFoundException, ValidationException | Implemented |
TransactGetItems | TransactItems (Get) | Responses (snapshot read) | ResourceNotFoundException, ValidationException, TransactionCanceledException | Implemented |
TransactWriteItems | TransactItems (Put/Update/Delete/ConditionCheck), ClientRequestToken | empty on success; CancellationReasons on cancellation | TransactionCanceledException, ValidationException | Implemented |
TransactWriteItems is atomic: either every item commits or none does, and
a cancellation reports per-item CancellationReasons.
T4 — Secondary indexes
Section titled “T4 — Secondary indexes”| Capability | Coverage | Errors | Status |
|---|---|---|---|
| Local secondary indexes | Declared at CreateTable, with projections | ValidationException | Implemented |
| Global secondary indexes | Created, updated, and deleted through UpdateTable (GlobalSecondaryIndexUpdates) | ValidationException, ResourceInUseException | Implemented |
Query with IndexName | LSI and GSI queries honoring the projected attribute set | ResourceNotFoundException, ValidationException | Implemented, with divergence (DDB-DIV-010: ConsistentRead on a GSI is served, not rejected) |
Index entries are maintained in the same storage transaction as the base write, so index reads are never stale.
T5 — Streams
Section titled “T5 — Streams”| Operation | Request surface | Response surface | Errors | Status |
|---|---|---|---|---|
StreamSpecification on CreateTable/UpdateTable | StreamEnabled, StreamViewType | LatestStreamArn, LatestStreamLabel | ValidationException | Implemented |
DescribeStream | StreamArn, Limit, ExclusiveStartShardId | StreamDescription | ResourceNotFoundException | Implemented, with divergence (DDB-DIV-006: single shard) |
GetShardIterator | StreamArn, ShardId, ShardIteratorType, SequenceNumber | ShardIterator | ResourceNotFoundException, ValidationException | Implemented |
GetRecords | ShardIterator, Limit | Records, NextShardIterator | expired-iterator and validation errors | Implemented, with divergence (DDB-DIV-007: read-triggered retention) |
ListStreams | TableName, Limit, ExclusiveStartStreamArn | Streams, LastEvaluatedStreamArn; paginated | ResourceNotFoundException | Implemented |
Batch and transactional writes emit stream records like single-item writes;
a transaction’s records are part of its atomic commit. TTL deletions emit
REMOVE records.
T6 — TTL and tagging
Section titled “T6 — TTL and tagging”| Operation | Request surface | Response surface | Errors | Status |
|---|---|---|---|---|
UpdateTimeToLive | TableName, TimeToLiveSpecification | TimeToLiveSpecification | ResourceNotFoundException, ValidationException | Implemented, with divergence (DDB-DIV-009: no modification cooldown) |
DescribeTimeToLive | TableName | TimeToLiveDescription | ResourceNotFoundException | Implemented |
TagResource | ResourceArn, Tags | empty | ResourceNotFoundException, ValidationException | Implemented |
UntagResource | ResourceArn, TagKeys | empty | ResourceNotFoundException, ValidationException | Implemented |
ListTagsOfResource | ResourceArn, NextToken | Tags; single page | ResourceNotFoundException, ValidationException | Implemented |
Expired items are reclaimed by a background TTL sweeper (default cadence 60 seconds, configurable or disablable on the endpoint configuration).
T7 — Authentication
Section titled “T7 — Authentication”| Capability | Behavior | Errors | Status |
|---|---|---|---|
| Access-key → tenant resolution | Each access key ID is bound to exactly one tenant; unknown keys fail closed | UnrecognizedClientException, MissingAuthenticationToken, IncompleteSignature | Implemented |
| Strict SigV4 verification (default) | Full canonical-request verification with constant-time comparison and a ±15-minute timestamp window | InvalidSignatureException, UnrecognizedClientException | Implemented |
| Persisted access-key management | Keys can be stored, rotated, deleted, and listed in a server-side store; listings never include the secret | ResourceNotFoundException | Implemented |
Not modeled
Section titled “Not modeled”No provisioned-capacity model and the other recorded behavioral differences are listed on the divergences page.