Blog Articles
WARNING
We created this page with the help of the GenAI tool.
We're currently double-checking it to ensure the information is 100% correct and free of hallucinations.
A curated collection of articles about Emmett, Event Sourcing patterns, and related topics from event-driven.io.
Getting Started with Emmett
Start here if you're new to Emmett or Event Sourcing.
| Article | Description |
|---|---|
| Announcing Emmett! | Introduction to Emmett and its design philosophy |
| Event Sourcing on PostgreSQL in Node.js | Setting up the PostgreSQL event store |
| Testing Event Sourcing, Emmett edition | Comprehensive testing strategies |
Projections & Read Models
Learn how to build and maintain read models from events.
| Article | Description |
|---|---|
| Writing and testing event-driven projections | Projection patterns with Pongo and PostgreSQL |
| Using event metadata in projections | Advanced projection techniques with metadata |
| Dealing with Race Conditions in Read Models | Handling concurrent updates to projections |
Message Processing
Deep dives into messaging patterns and consumers.
| Article | Description |
|---|---|
| Consumers, projectors, reactors and all that messaging jazz | Understanding Emmett's messaging model |
| Checkpointing the message processing | Reliable message processing with checkpoints |
| Multi-tenancy and dynamic messaging workload distribution | Scaling message processing |
| Idempotent Command Handling | Ensuring exactly-once semantics |
Event Store Implementations
Building and understanding event stores.
| Article | Description |
|---|---|
| How to build MongoDB Event Store | MongoDB as an event store |
| Let's build an Event Store in one hour! | Understanding event store internals |
| Event stores are key-value databases | Mental model for event stores |
Pongo (PostgreSQL Document Database)
Emmett's companion library for document storage in PostgreSQL.
| Article | Description |
|---|---|
| Pongo - Mongo but on Postgres | Introduction to Pongo |
| Pongo behind the scenes | How Pongo works internally |
| Pongo gets strongly-typed client, migrations, and CLI | Advanced Pongo features |
| Running regular SQL on Pongo documents | SQL interoperability |
TypeScript & Patterns
General patterns useful for event-driven development.
| Article | Description |
|---|---|
| How TypeScript can help in modelling business workflows | TypeScript patterns for workflows |
| How to build an in-memory Message Bus in TypeScript | Message bus implementation |
| How to tackle ESM compatibility issues | Managing module compatibility |
| Mocking the native Node.js Test Runner | Testing techniques |
Infrastructure & DevOps
Practical guides for running Emmett in production.
| Article | Description |
|---|---|
| How to configure a custom TestContainer | EventStoreDB TestContainer setup |
| Docker Compose Profiles | Managing Docker environments |
Event Sourcing Concepts
Deeper understanding of Event Sourcing principles.
| Article | Description |
|---|---|
| Event Streaming is not Event Sourcing | Key distinctions |
| How to get the current entity state from events? | State aggregation patterns |
| Should you throw an exception when rebuilding state? | Error handling in evolve functions |
| Slim your entities with Event Sourcing | Keeping state focused |
| Optimistic concurrency for pessimistic times | Concurrency control strategies |
| How to use ETag header for optimistic concurrency | HTTP-based concurrency |
Community Articles
Articles written by the community.
| Article | Author | Description |
|---|---|---|
| Event Sourcing with Emmett: Reducing the Entry Barrier | @mbneto | Getting started perspective |
Learning Paths
Beginner Path
- Announcing Emmett! - Understand the motivation
- Event Sourcing on PostgreSQL in Node.js - Set up your first event store
- Testing Event Sourcing, Emmett edition - Learn testing patterns
Intermediate Path
- Complete Beginner Path
- Writing and testing event-driven projections - Build read models
- Consumers, projectors, reactors - Understand message processing
- Checkpointing the message processing - Reliable processing
Advanced Path
- Complete Intermediate Path
- Dealing with Race Conditions in Read Models - Handle edge cases
- Multi-tenancy and dynamic messaging - Scale your system
- Idempotent Command Handling - Production resilience
Stay Updated
- Blog: event-driven.io
- Newsletter: Architecture Weekly
- Discord: Emmett Community
- GitHub: event-driven-io/emmett
See Also
- Getting Started - Official tutorial
- Sample Applications - Working examples
- Packages - All Emmett packages
