Skip to main content

Dynatable

Type-safe, functional DynamoDB library for TypeScript

🛡️

Type-Safe DynamoDB

Full TypeScript support with inferred types from your schema. Catch errors at compile time, not runtime. Every query, mutation, and scan is fully typed.

📊

Single Table Design

Built for DynamoDB best practices. Define multiple entities in one table with type-safe access patterns. Support for GSIs, composite keys, and complex relationships.

🔍

Fluent Query Builder

Intuitive, chainable API for queries and scans. Filter, project, paginate, and more with full type inference. No more raw DynamoDB expressions.

🔄

Schema Migrations

Evolve your data safely with versioned migrations. Up/down support, dry-run mode, distributed locking, and full CLI tooling included.

Minimal Boilerplate

Define your schema once, get typed CRUD operations automatically. No decorators, no classes, just plain TypeScript objects.

🚀

Production Ready

Built on top of AWS SDK v3. Supports transactions, batch operations, conditional writes, and all DynamoDB features you need.

Simple, Intuitive API

import { Table } from '@ftschopp/dynatable-core';

const table = new Table({
name: 'MyApp',
client: dynamoDBClient,
schema: {
models: {
User: {
primaryKey: { PK: 'USER#${username}', SK: 'PROFILE' },
attributes: { username: 'string', email: 'string', age: 'number' },
},
},
},
});

// Fully typed operations
const user = await table.entities.User.get({ username: 'alice' }).execute();
const users = await table.entities.User.scan()
.filter((a, op) => op.gt(a.age, 18))
.execute();

Packages

@ftschopp/dynatable-core

Type-safe DynamoDB client with fluent query builder. Define your schema, get fully typed CRUD operations.

@ftschopp/dynatable-migrations

Schema migrations for DynamoDB. Version your data changes with up/down migrations, CLI tooling, and dry-run mode.