-
Notifications
You must be signed in to change notification settings - Fork 0
API Parity
Mark Lauter edited this page May 10, 2026
·
5 revisions
DynamoDbLite implements the IAmazonDynamoDB interface from AWSSDK.DynamoDBv2. This page documents which operations are supported, partially supported, stubbed, or not implemented, and highlights behavioral differences from real DynamoDB. See the DynamoDB API Reference for the full AWS API specification.
| Operation | Status | Notes |
|---|---|---|
CreateTableAsync |
Supported | Immediate ACTIVE status |
DeleteTableAsync |
Supported | Synchronous deletion |
DescribeTableAsync |
Supported | Exact item count and size |
ListTablesAsync |
Supported | All overloads |
UpdateTableAsync |
Partial | GSI create/delete; throughput and billing-mode changes accepted but no-op; other UpdateTable fields silently ignored |
| Operation | Status | Notes |
|---|---|---|
PutItemAsync |
Supported | ConditionExpression, ReturnValues (ALL_OLD) |
GetItemAsync |
Supported | ProjectionExpression, ConsistentRead (no-op) |
DeleteItemAsync |
Supported | ConditionExpression, ReturnValues (ALL_OLD) |
UpdateItemAsync |
Supported | All UpdateExpression clauses, all ReturnValues modes |
| Operation | Status | Notes |
|---|---|---|
QueryAsync |
Supported | KeyConditionExpression, FilterExpression, pagination, index queries |
ScanAsync |
Supported | FilterExpression, pagination, index scans, legacy overloads |
| Operation | Status | Notes |
|---|---|---|
BatchGetItemAsync |
Supported | Multi-table, ProjectionExpression per table |
BatchWriteItemAsync |
Supported | Mixed put/delete, duplicate detection |
BatchExecuteStatementAsync |
Not Implemented | Throws NotImplementedException
|
| Operation | Status | Notes |
|---|---|---|
TransactWriteItemsAsync |
Supported | All action types, idempotency tokens |
TransactGetItemsAsync |
Supported | Multi-table, ProjectionExpression |
| Feature | Status | Notes |
|---|---|---|
| GSI at table creation | Supported | Up to 5 |
| LSI at table creation | Supported | Up to 5 |
| GSI via UpdateTable | Supported | With immediate backfill |
| GSI deletion | Supported | |
| Projection types (ALL, KEYS_ONLY, INCLUDE) | Supported | |
| Sparse indexes | Supported | |
ConsistentRead=true on GSI |
Not Implemented | Throws AmazonDynamoDBException on call (matches DynamoDB, which rejects strongly-consistent reads on GSIs) |
| Operation | Status | Notes |
|---|---|---|
UpdateTimeToLiveAsync |
Supported | Enable/disable; enabling immediately backfills existing items' TTL epoch |
DescribeTimeToLiveAsync |
Supported |
| Operation | Status | Notes |
|---|---|---|
TagResourceAsync |
Supported | |
UntagResourceAsync |
Supported | |
ListTagsOfResourceAsync |
Supported |
| Operation | Status | Notes |
|---|---|---|
DescribeEndpointsAsync |
Stubbed | Returns dynamodb.localhost
|
DescribeLimitsAsync |
Stubbed | Returns hardcoded limits (account: 80,000 R/W; table: 40,000 R/W) |
DetermineServiceOperationEndpoint |
Stubbed | Returns http://dynamodb.localhost
|
Paginators |
Not Implemented | Property always returns null
|
| Operation | Status | Notes |
|---|---|---|
ExportTableToPointInTimeAsync |
Supported | Local filesystem via S3Bucket field (treated as a directory path); DYNAMODB_JSON only |
DescribeExportAsync |
Supported | |
ListExportsAsync |
Supported | |
ImportTableAsync |
Supported | Local filesystem via S3BucketSource.S3Bucket field (treated as a directory path); DYNAMODB_JSON only |
DescribeImportAsync |
Supported | |
ListImportsAsync |
Supported |
All throw NotImplementedException:
CreateBackupAsyncDeleteBackupAsyncDescribeBackupAsyncDescribeContinuousBackupsAsyncListBackupsAsyncRestoreTableFromBackupAsyncRestoreTableToPointInTimeAsyncUpdateContinuousBackupsAsync
All throw NotImplementedException:
CreateGlobalTableAsyncDescribeGlobalTableAsyncDescribeGlobalTableSettingsAsyncDescribeTableReplicaAutoScalingAsyncListGlobalTablesAsyncUpdateGlobalTableAsyncUpdateGlobalTableSettingsAsyncUpdateTableReplicaAutoScalingAsync
All throw NotImplementedException:
DescribeKinesisStreamingDestinationAsyncDisableKinesisStreamingDestinationAsyncEnableKinesisStreamingDestinationAsyncUpdateKinesisStreamingDestinationAsync
These throw NotSupportedException (rather than NotImplementedException used elsewhere) because PartiQL is intentionally out of scope for this emulator, not pending implementation.
ExecuteStatementAsyncBatchExecuteStatementAsyncExecuteTransactionAsync
All throw NotImplementedException:
DeleteResourcePolicyAsyncGetResourcePolicyAsyncPutResourcePolicyAsyncDescribeContributorInsightsAsyncListContributorInsightsAsyncUpdateContributorInsightsAsync
| Behavior | DynamoDB | DynamoDbLite |
|---|---|---|
| Table status transitions | CREATING → ACTIVE → DELETING | Immediately ACTIVE; synchronous deletion |
| GSI creation | CREATING status, eventual backfill | Synchronous backfill, immediately ACTIVE |
| Provisioned throughput | Enforced; throttling on exceeded capacity | Stored but not enforced; no throttling |
| Consumed capacity | Tracked and returned | Not tracked |
| ConsistentRead | Eventually vs strongly consistent | All reads are strongly consistent (SQLite) |
| TTL deletion | Items deleted ~48 hours after expiry; may still appear in reads | Items filtered instantly at read time; physically deleted within 30s |
| TTL enable/disable | Can take up to 1 hour | Immediate |
| Item count / table size | Updated approximately every 6 hours | Updated on every write (exact) |
| Table ARN | Region-specific, real account ID | arn:aws:dynamodb:local:000000000000:table/{name} |
| Export/Import | S3-based | Local filesystem (the S3Bucket field is reused as a directory path) |
| Export/Import format | DYNAMODB_JSON and ION | DYNAMODB_JSON only |
| Parallel scan | Supports segments for parallelism | Not supported (TotalSegments/Segment ignored) |
| Idempotency token | Persisted server-side | In-memory cache with 10-minute TTL |
| UnprocessedKeys/Items | May return unprocessed items under throttling | Always empty (all items processed) |
| Auto-scaling | Adjusts throughput based on load | Not applicable |
| Encryption | At-rest and in-transit encryption | Not applicable (local storage) |
| Point-in-time recovery | Continuous backups | Not implemented |
| DynamoDB Streams | Change data capture | Not implemented |
| Global tables | Multi-region replication | Not implemented |
-
No parallel scan —
TotalSegmentsandSegmentparameters are ignored -
No capacity tracking —
ReturnConsumedCapacityhas no effect - No DynamoDB Streams — no change event notifications
- No auto-scaling — throughput values are decorative
- Export format — only DYNAMODB_JSON (ION not supported)
- Connection strings — must follow Microsoft.Data.Sqlite format
-
Paginators —
IDynamoDBv2PaginatorFactoryis not implemented (returns null)
Repo · NuGet · API Parity
Getting started
Reference
- Table Operations
- Item Operations
- Query and Scan
- Batch Operations
- Transactions
- Secondary Indexes
- TTL
- Tags and Admin
- DI and Configuration
- Concurrency
- Performance
- API Parity
- FAQ
Recipes
- DynamoDBContext for tests
- xUnit per-test isolation
- ASP.NET Core integration test fixture
- Migrating tests off DynamoDB Local
Internals