-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Mark Lauter edited this page May 17, 2026
·
11 revisions

Another weapon from the MSL Armory
A lightweight, 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-based 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 |
See API Parity for a detailed compatibility matrix.
using DynamoDbLite;
// File-based
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:
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 - 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-based 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