Eventuous is a lean, opinionated library for building event-sourced applications in .NET. It provides the essential building blocks — aggregates, state, command services, subscriptions, and projections — without getting in the way of your domain model. Rather than trying to be a framework, Eventuous stays close to the metal: plain C# classes, records, and interfaces, wired together with standard .NET dependency injection and diagnostics.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Eventuous/eventuous/llms.txt
Use this file to discover all available pages before exploring further.
Design philosophy
Eventuous is built around three core ideas:- DDD-first. Your domain model should be expressive and free of infrastructure concerns. Aggregates encode business rules; events record what happened; state is derived deterministically from those events.
- Aggregate-centric. The aggregate is the consistency boundary. Eventuous enforces this by giving you a strongly-typed
Aggregate<TState>base class that owns the event-application loop. - Pluggable persistence. The
IEventStoreabstraction decouples your domain logic from any specific database. Official stores are provided for KurrentDB, PostgreSQL, SQL Server, SQLite, and Redis — swap them without touching your domain code.
Key capabilities
| Area | What Eventuous provides |
|---|---|
| Domain | Aggregate<TState>, State<T>, typed Id records, domain exceptions |
| Application | CommandService<TAggregate, TState, TId> and stateless variants |
| Persistence | IEventStore / IEventReader / IEventWriter with multiple backends |
| Subscriptions | Durable, checkpointed event consumers with at-least-once delivery |
| Projections | Event handlers that build read models in any target store |
| ASP.NET Core | CommandHttpApiBase<TState> and minimal-API command mapping |
| Diagnostics | OpenTelemetry traces and metrics out of the box |
NuGet packages
All packages are published on NuGet under theEventuous namespace.
| Package | Purpose |
|---|---|
Eventuous | Core meta-package: aggregates, state, command services, event store abstractions |
Eventuous.KurrentDB | KurrentDB (formerly EventStoreDB) event store and subscriptions |
Eventuous.Postgresql | PostgreSQL event store and subscriptions |
Eventuous.SqlServer | SQL Server event store |
Eventuous.Sqlite | SQLite event store |
Eventuous.Redis | Redis event store |
Eventuous.Projections.MongoDB | MongoDB read-model projector and checkpoint store |
Eventuous.Extensions.AspNetCore | HTTP command mapping with CommandHttpApiBase |
Eventuous.Extensions.DependencyInjection | DI helpers and registration extensions |
Eventuous.Diagnostics.OpenTelemetry | OpenTelemetry tracing and metrics instrumentation |
Eventuous.Testing | Aggregate and command service test helpers |
Eventuous.Kafka | Kafka producer and subscription |
Eventuous.RabbitMq | RabbitMQ producer and subscription |
Eventuous.GooglePubSub | Google Cloud Pub/Sub producer and subscription |
Eventuous.Azure.ServiceBus | Azure Service Bus producer and subscription |
Eventuous.Gateway | Event routing gateway between subscriptions and producers |
Explore the docs
Quickstart
Build a working event-sourced booking service from scratch in minutes.
Core Concepts
Understand aggregates, state, events, and command services.
Aggregates
Deep-dive into the
Aggregate<TState> base class and the event-application loop.Command Service
Learn how command services load, execute, and persist aggregates.
Community support — join the conversation on Slack or find us in the #eventuous channel on the DDD-CQRS-ES Discord server.