-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Mark Lauter edited this page Aug 10, 2026
·
15 revisions

Another weapon from the MSL Armory
An in-process implementation of IAmazonDynamoDB backed by SQLite — for local development, testing, and offline-capable apps. See the AWS DynamoDB Developer Guide for DynamoDB concepts.
- No AWS credentials needed — develop and test without internet connectivity
- Fast testing — in-memory or file-backed SQLite, no network round-trips
- Zero cost — no DynamoDB provisioned capacity charges during development
-
Drop-in replacement — implements the
IAmazonDynamoDBinterface (see API parity for the supported surface)
| Category | Status |
|---|---|
| Table operations | Supported |
| Item CRUD (Put, Get, Delete, Update) | Supported |
| Query and scan | Supported |
| Batch operations (BatchGet, BatchWrite) | Supported |
| Transactions (TransactWrite, TransactGet) | Supported |
| Secondary indexes (GSI, LSI) | Supported |
| TTL | Supported |
| Tags | Supported |
| Export / Import | Supported |
| Endpoints & Limits | Stubbed (hardcoded values) |
| Backup & Restore | Out of scope |
| Global Tables | Out of scope |
| Kinesis Streams | Out of scope |
| PartiQL | Out of scope |
| Vector search | Out of scope |
See API parity for a detailed compatibility matrix.
dotnet add package MSL.DynamoDbLiteusing DynamoDbLite;
// File-backed
using var fileClient = new DynamoDbClient(new DynamoDbLiteOptions(
"Data Source=myapp.db"));
// In-memory (give the Data Source a unique name per logical database)
using var memoryClient = new DynamoDbClient(new DynamoDbLiteOptions(
$"Data Source=app_{Guid.NewGuid():N};Mode=Memory;Cache=Shared"));For dependency injection, use the AddDynamoDbLite extension:
using DynamoDbLite;
services.AddDynamoDbLite(o => o.WithConnectionString("Data Source=myapp.db"));See DI and configuration for the full surface and Getting started for the setup walkthrough including the in-memory test-isolation foot-gun.
- Getting started — installation, configuration, first steps
- Tutorial — hands-on walkthrough building a bookmarks store
- Table operations — CreateTable, DeleteTable, DescribeTable, ListTables, UpdateTable
- Item operations — PutItem, GetItem, DeleteItem, UpdateItem
- Query and scan — KeyConditionExpression, FilterExpression, pagination
- Batch operations — BatchGetItem, BatchWriteItem
- Transactions — TransactWriteItems, TransactGetItems
- Secondary indexes — GSI, LSI, projection types
- TTL — Time to Live configuration and behavior
- Tags and admin — tags, endpoints, limits, export/import
-
DI and configuration —
AddDynamoDbLite, options builder, validation, exceptions - Concurrency — writer serialization and tuning the wait under contention
- Performance — WAL, batching, and the file-backed tuning knobs
- API parity — compatibility matrix and behavioral differences
- FAQ — recurring questions and gotchas
-
DynamoDBContext for tests — POCO mapping with the AWS SDK's
DynamoDBContext - xUnit per-test isolation — per-test factories, class fixtures, file-backed cleanup
-
ASP.NET Core integration test fixture —
WebApplicationFactorywith a DynamoDbLite-backedIAmazonDynamoDB - Migrating tests off DynamoDB Local — drop the container, keep the test surface
- Storage architecture — SQLite schema, concurrency, class hierarchy
- Expression engine — tokenizer, parsers, AST, evaluators
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