ErikLieben.FA.ES.EventStreamManagement
2.0.0-preview.17
dotnet add package ErikLieben.FA.ES.EventStreamManagement --version 2.0.0-preview.17
NuGet\Install-Package ErikLieben.FA.ES.EventStreamManagement -Version 2.0.0-preview.17
<PackageReference Include="ErikLieben.FA.ES.EventStreamManagement" Version="2.0.0-preview.17" />
<PackageVersion Include="ErikLieben.FA.ES.EventStreamManagement" Version="2.0.0-preview.17" />
<PackageReference Include="ErikLieben.FA.ES.EventStreamManagement" />
paket add ErikLieben.FA.ES.EventStreamManagement --version 2.0.0-preview.17
#r "nuget: ErikLieben.FA.ES.EventStreamManagement, 2.0.0-preview.17"
#:package ErikLieben.FA.ES.EventStreamManagement@2.0.0-preview.17
#addin nuget:?package=ErikLieben.FA.ES.EventStreamManagement&version=2.0.0-preview.17&prerelease
#tool nuget:?package=ErikLieben.FA.ES.EventStreamManagement&version=2.0.0-preview.17&prerelease
ErikLieben.FA.ES
A lightweight, AOT-friendly Event Sourcing toolkit for .NET. Build aggregates, append and read events, create snapshots, upcast historical data, and integrate with Azure storage and Functions.
A Friendly Note
This is an opinionated library built primarily for my own projects and coding style. You're absolutely free to use it (it's MIT licensed!), but please don't expect free support or feature requests. If it works for you, great! If not, there are many other excellent libraries in the .NET ecosystem. For commercially supported event-sourcing platforms, consider EventStoreDB or AxonIQ's Axon Server/Framework.
That said, I do welcome bug reports and thoughtful contributions. If you're thinking about a feature or change, please open an issue first to discuss it.
Getting Started
The fastest way to explore the library is to run the TaskFlow demo application, a full-stack Aspire app showcasing aggregates, projections, Minimal APIs, and Azure Functions.
Prerequisites
- .NET 10 SDK
- Docker Desktop or Podman (for Azurite and CosmosDB emulators)
Run the Demo
# Clone the repository
git clone https://github.com/eriklieben/ErikLieben.FA.ES.git
cd ErikLieben.FA.ES
# Run the Aspire demo
dotnet run --project demo/src/TaskFlow.AppHost
This starts:
- API - ASP.NET Core Minimal API with event-sourced aggregates
- Functions - Azure Functions with EventStream and Projection bindings
- Frontend - Angular app (optional, at
demo/taskflow-web) - Azurite - Azure Storage emulator for blobs/tables/queues
- CosmosDB Emulator - For CosmosDB-backed event streams (optional)
Open the Aspire dashboard (URL shown in console) to see all services and explore.
Optional: Persist Storage
To keep data across restarts:
dotnet run --project demo/src/TaskFlow.AppHost -- --PersistStorage=true
Key Features
| Feature | Description |
|---|---|
| Aggregates | Encapsulate state and behavior; rebuild state by folding events |
| Projections | Read models that materialize streams into queryable shapes |
| CLI Tool | Generates Fold mappings, factories, and JSON serializers |
| AOT-friendly | Source-generated serializers, no reflection in hot paths (Cosmos DB limitations) |
| Storage Providers | Azure Blob, Table, and Cosmos DB support |
| Minimal APIs | [EventStream] and [Projection] parameter binding |
| Azure Functions | Input bindings for aggregates and projections |
| Testing | In-memory streams with Given-When-Then assertions |
Packages
# Core library
dotnet add package ErikLieben.FA.ES
# CLI tool (local)
dotnet new tool-manifest
dotnet tool install ErikLieben.FA.ES.CLI --local
# Storage providers
dotnet add package ErikLieben.FA.ES.AzureStorage
dotnet add package ErikLieben.FA.ES.CosmosDb
# Integrations
dotnet add package ErikLieben.FA.ES.AspNetCore.MinimalApis
dotnet add package ErikLieben.FA.ES.Azure.Functions.Worker.Extensions
# Testing
dotnet add package ErikLieben.FA.ES.Testing
Requirements: .NET 9.0 or .NET 10.0
Documentation
| Topic | Description |
|---|---|
| Configuration | Service registration and fluent builder API |
| Storage Providers | Azure Blob, Table, and Cosmos DB setup |
| Concurrency | Optimistic concurrency and constraints |
| Result Types | Explicit error handling with Result<T> |
| Testing | AggregateTestBuilder and Given-When-Then patterns |
| Minimal APIs | [EventStream] and [Projection] bindings |
| Stream Actions | Append, read, and fold operations |
| Notifications | Event notifications and subscriptions |
| Live Migration | Migrating event streams without downtime |
| Event Stream Management | Stream rollover and archiving |
| Analyzer Rules | Code analyzers and diagnostics |
| v2.0 Migration | Breaking changes and upgrade guide |
| Changelog | Version history and release notes |
Exception Reference
Structured error codes are documented in docs/exceptions/.
Quick Example
// Define an aggregate
public partial class Customer(IEventStream stream) : Aggregate(stream)
{
public string? Name { get; private set; }
public Task Register(string name)
{
ArgumentNullException.ThrowIfNull(name);
return Stream.Session(ctx => Fold(ctx.Append(new CustomerRegistered(name))));
}
private void When(CustomerRegistered e) => Name = e.Name;
}
// Define an event
[EventName("Customer.Registered")]
public record CustomerRegistered(string Name);
// Generate supporting code
// dotnet tool run faes
See the demo/src/TaskFlow.Domain folder for complete aggregate and projection examples.
License
MIT License - see the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- ErikLieben.FA.ES (>= 2.0.0-preview.17)
-
net9.0
- ErikLieben.FA.ES (>= 2.0.0-preview.17)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ErikLieben.FA.ES.EventStreamManagement:
| Package | Downloads |
|---|---|
|
ErikLieben.FA.ES.AzureStorage
Azure Blob and Table storage provider for ErikLieben.FA.ES event sourcing framework. Includes snapshots, tiering, and projection coordination. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0-preview.17 | 85 | 5/19/2026 |
| 2.0.0-preview.16 | 67 | 5/15/2026 |
| 2.0.0-preview.15 | 55 | 5/15/2026 |
| 2.0.0-preview.14 | 64 | 5/12/2026 |
| 2.0.0-preview.12 | 69 | 4/17/2026 |
| 2.0.0-preview.11 | 77 | 4/17/2026 |
| 2.0.0-preview.10 | 155 | 3/1/2026 |
| 2.0.0-preview.9 | 274 | 2/22/2026 |
| 2.0.0-preview.8 | 85 | 1/7/2026 |
| 2.0.0-preview.7 | 79 | 1/7/2026 |
| 2.0.0-preview.6 | 84 | 1/5/2026 |
| 2.0.0-preview.5 | 81 | 1/5/2026 |
| 2.0.0-preview.4 | 1,099 | 1/5/2026 |
| 2.0.0-preview.3 | 78 | 1/5/2026 |
| 2.0.0-preview.2 | 278 | 12/30/2025 |
| 2.0.0-preview.1 | 373 | 12/7/2025 |