noDDDe
A TypeScript framework for Domain-Driven Design, CQRS, and Event Sourcing
noDDDe is a TypeScript framework for Domain-Driven Design, CQRS, and Event Sourcing. Aggregates, projections, and sagas are expressed as typed bundles paired with pure functions for state transitions.
The shape: every domain concept is an object with handler maps. State transitions are pure functions of an event and a previous state. Infrastructure is passed to handlers as a parameter. Types flow from a single Def bundle, end to end.
Start here
The fastest path to understanding noddde is to read in this order:
- Why noddde — 90 seconds. Compares to NestJS CQRS, hand-rolled, Effect, Wolkenkit. Tells you when noddde is the wrong choice.
- Quick Start — a complete bank-account aggregate, working end-to-end. Copy, run, see it work.
- Core Concepts — the four ideas the rest of the docs assume.
That is the whole on-ramp. Everything else in the sidebar is reference.
Already familiar with the patterns?
If you have shipped CQRS+ES in TypeScript before, jump straight to:
- Defining Aggregates — the
defineAggregatefunction and theAggregateTypesbundle - Domain Configuration —
defineDomain+wireDomain - Persistence Adapters — Drizzle, Prisma, TypeORM
- Design Decisions — the tradeoffs, one page each
Looking for a real-shaped example?
The hotel booking sample exercises more than 90% of the framework: 3 aggregates, 3 sagas, 3 projections, Fastify HTTP, Drizzle/SQLite persistence. It is the closest reference to a production codebase.