Skip to main content

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.

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.

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 IEventStore abstraction 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

AreaWhat Eventuous provides
DomainAggregate<TState>, State<T>, typed Id records, domain exceptions
ApplicationCommandService<TAggregate, TState, TId> and stateless variants
PersistenceIEventStore / IEventReader / IEventWriter with multiple backends
SubscriptionsDurable, checkpointed event consumers with at-least-once delivery
ProjectionsEvent handlers that build read models in any target store
ASP.NET CoreCommandHttpApiBase<TState> and minimal-API command mapping
DiagnosticsOpenTelemetry traces and metrics out of the box

NuGet packages

All packages are published on NuGet under the Eventuous namespace.
PackagePurpose
EventuousCore meta-package: aggregates, state, command services, event store abstractions
Eventuous.KurrentDBKurrentDB (formerly EventStoreDB) event store and subscriptions
Eventuous.PostgresqlPostgreSQL event store and subscriptions
Eventuous.SqlServerSQL Server event store
Eventuous.SqliteSQLite event store
Eventuous.RedisRedis event store
Eventuous.Projections.MongoDBMongoDB read-model projector and checkpoint store
Eventuous.Extensions.AspNetCoreHTTP command mapping with CommandHttpApiBase
Eventuous.Extensions.DependencyInjectionDI helpers and registration extensions
Eventuous.Diagnostics.OpenTelemetryOpenTelemetry tracing and metrics instrumentation
Eventuous.TestingAggregate and command service test helpers
Eventuous.KafkaKafka producer and subscription
Eventuous.RabbitMqRabbitMQ producer and subscription
Eventuous.GooglePubSubGoogle Cloud Pub/Sub producer and subscription
Eventuous.Azure.ServiceBusAzure Service Bus producer and subscription
Eventuous.GatewayEvent 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.

Build docs developers (and LLMs) love