-
Notifications
You must be signed in to change notification settings - Fork 0
API Parity
Mark Lauter edited this page May 16, 2026
·
5 revisions
DynamoDbLite implements the IAmazonDynamoDB interface from AWSSDK.DynamoDBv2. This page documents which operations are supported, partial, stubbed, or out of scope, 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 |
| 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 |
Supported | Throws AmazonDynamoDBException, matching DynamoDB's rejection of 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 |
Stubbed | Property returns null; iterate manually with LastEvaluatedKey
|
| 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 |
These operations are meaningless for an in-process embedded emulator and will not be implemented. Every method below throws NotSupportedException.
Backup & restore:
CreateBackupAsyncDeleteBackupAsyncDescribeBackupAsyncDescribeContinuousBackupsAsyncListBackupsAsyncRestoreTableFromBackupAsyncRestoreTableToPointInTimeAsyncUpdateContinuousBackupsAsync
Global tables & replication:
CreateGlobalTableAsyncDescribeGlobalTableAsyncDescribeGlobalTableSettingsAsyncDescribeTableReplicaAutoScalingAsyncListGlobalTablesAsyncUpdateGlobalTableAsyncUpdateGlobalTableSettingsAsyncUpdateTableReplicaAutoScalingAsync
Kinesis streaming:
DescribeKinesisStreamingDestinationAsyncDisableKinesisStreamingDestinationAsyncEnableKinesisStreamingDestinationAsyncUpdateKinesisStreamingDestinationAsync
PartiQL:
BatchExecuteStatementAsyncExecuteStatementAsyncExecuteTransactionAsync
Contributor insights:
DescribeContributorInsightsAsyncListContributorInsightsAsyncUpdateContributorInsightsAsync
Resource policies:
DeleteResourcePolicyAsyncGetResourcePolicyAsyncPutResourcePolicyAsync
| 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 | Segments honored but applied post-retrieval — partitions results, does not reduce per-call work; Limit counts pre-segmentation |
| 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 | Out of scope |
| DynamoDB Streams | Change data capture | Out of scope |
| Global tables | Multi-region replication | Out of scope |
-
Parallel scan caveats —
TotalSegments/Segmentpartition results post-retrieval. Each segment returns disjoint items, but segmentation does not reduce per-call work, andLimitapplies to the pre-segmentation row count. - Connection strings — must follow Microsoft.Data.Sqlite format
-
Paginators —
IDynamoDBv2PaginatorFactoryreturnsnull; the idiomaticclient.Paginators.ScanAsync(...)pattern throwsNullReferenceException. Iterate paginated results manually withLastEvaluatedKey.
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