Emmett - Event Sourcing development made simple
Nowadays, storage is cheap, but the information is priceless.
Event Sourcing, contrary to the standard approach, keeps all the facts that happened in our system. To do that, it needs an event store: a database designed for its needs.
This project aims to experiment with an opinionated Event Sourcing framework based on my experience working on Marten and EventStoreDB.
Take your event-driven applications back to the future!
Documentation and Resources
Read more in documentation, join our Discord Channel and ask any question.
Check also my blog articles on Emmett:
- Announcing Emmett! Take your event-driven applications back to the future!
- Testing Event Sourcing, Emmett edition
- Event Sourcing on PostgreSQL in Node.js just became possible with Emmett
- Writing and testing event-driven projections with Emmett, Pongo and PostgreSQL
- Using event metadata in event-driven projections=
FAQ
Is it production-ready?
What's there is safe to use. I'd like to add more stuff to enhance the production experience, like OpenTelemetry, but users are already using Emmett in their systems.
Why Node.js?
I like its minimalistic approach and flexibility, plus TypeScript is an excellent language with its shapeshifter capabilities. Plus, I've been asked if I could deliver such a store for Node.js.
Why is it named Emmett?
What features it has?
Essential building blocks for designing and running business and application logic like:
- typings around events, commands, Deciders, Workflows, etc.
- command handling wrappers for application layer,
- implementation of event store using PostgreSQL, EventStoreDB and basic, in-memory version,
- abstractions for building read models,
- building blocks for the Web Apis with Event Sourcing and CQRS,
- serverless-friendly runtime model,
What features will it have?
We'll see, but for sure, I'd like to have the following:
- implementation of event store using other storage engines like SQLite, MongoDB, DynamoDB, CosmosDB etc.
- building blocks for integration and running distributed processes,
- GraphQL API for event stores,
- Full stack development helpers with Next.js or HTMX,
- built-in open telemetry,
- streaming data through HTTP API (and enabling integration scenarios through it).
- defining event transformations and projections with WebAssembly,
- etc.
Would it be a competitor to other stores?
It is hard to say; my intention is not to compete but to give more options to the community.
Why there's no license?
Because I'm unsure how this will end, and I don't want to expose it as an MIT license from the beginning.
Support
💖 If you'd like this initiative or want to use it potentially. Feel invited you join the group of my 👉 Github Sponsors.
GitHub ⭐'s won't pay the bills, so any help is more than welcome!
Contributing
Feel invited to contribute to Emmett. Check details in contributing guide.
Code of Conduct
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.