ExtendDO is optimized for ExtendDB parity on Cloudflare Workers and Durable Objects. It is not a horizontally sharded Amazon DynamoDB service clone and it is not a full AWS service compatibility layer.
CatalogDOis a single control-plane Durable Object. Account metadata, auth resources, settings, table registry, resource tags, and lifecycle jobs share this object.- Each logical table maps to one SQLite-backed
TableDO. Items, indexes, streams, TTL metadata, backups, staged imports, export sessions, metrics, and single-table transaction state share that object. TransactionCoordinatorDOcoordinates cross-table transactions per account. It records idempotency fingerprints, participant state, durable commit/abort decisions, and recovery state.
This topology favors correctness and implementation simplicity over horizontal
scale. There is no PartitionDO, IndexDO, or per-partition routing layer.
- DynamoDB JSON request bodies are capped at 16 MiB by the Worker entrypoint.
- Management request bodies are capped at 128 KiB.
ScanandQueryare executed inside oneTableDO. They use SQL paging and bounded raw storage windows so large unbounded reads can returnLastEvaluatedKeyinstead of materializing the entire table in one call.- Even with bounded windows, hot or large table scans still serialize through one Durable Object and can delay unrelated work for that table.
Control-plane and maintenance work uses Durable Object state and alarms:
- Table create, delete, restore, import, and export have durable lifecycle state.
- Cross-table transaction materialization resumes from coordinator alarms and table read/write finalization.
- TTL cleanup, stream retention, export upload, backup work, import staging, and metrics refresh share the same per-table object as foreground traffic.
Durable Object alarms provide recovery, but they are not a high-throughput job queue. Very large background jobs can take multiple alarm passes.
ExtendDO does not use ExtendDB's filesystem import/export runtime. It uses R2:
- Imports read from an R2 object key in
FileSource.Path. - Source R2 object identity is pinned before async processing.
- Rows are staged and committed before the table is activated.
- Exports write to generated R2 keys derived from the requested destination and export id.
- Export sessions use snapshot-backed state and multipart R2 uploads.
The wire shapes are kept close to ExtendDB's DynamoDB-compatible behavior, but filesystem paths are intentionally not emulated.
- Backups and export snapshots are table-local Durable Object state.
RestoreTableFromBackupis supported through the ExtendDB-backed storage path and hidden lifecycle states.RestoreTableToPointInTimeis intentionally unsupported because ExtendDB currently marks real PITR restore unsupported.
- Secondary indexes are maintained as rows inside
TableDO. - Index reads use table/index cursor data for pagination, but all index state is still local to the table object.
- Index rebuild and TTL metadata rebuild work can be expensive for large existing tables because the table object must inspect table rows.
- Single-table transactions run inside one table object's synchronous SQLite transaction path.
- Cross-table write transactions use a durable two-phase protocol with prepared participant rows, item locks, durable coordinator decisions, and alarm-driven recovery.
- If a coordinator decision cannot be reached or observed, locked-item operations fail fast instead of exposing partial writes.
TransactGetItemsuses read barriers for cross-table reads.
This is designed to preserve all-or-nothing visibility as far as the current Durable Object topology allows. It does not provide AWS service-scale multi-region transaction behavior.
ExtendDO keeps ExtendDB-scope IAM-shaped behavior: admins, accounts, users, groups, roles, inline policies, permissions boundaries, principal/resource tags, role sessions, access keys, SigV4 data-plane auth, and ExtendDB policy conditions.
AWS-only management features are removed from the public parity target:
- Managed policies and policy versions.
- MFA devices and MFA-backed role conditions.
- OIDC/SAML providers.
- Federated assume-role flows.
- AWS Organizations context.
- Request-tag condition keys.
- Trusted network and FAS context headers.
Those routes should return 404 unless ExtendDB adds them upstream and ExtendDO chooses to import that scope.