![]() |
VOOZH | about |
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" />Directory.Packages.props
<PackageReference Include="ErikLieben.FA.ES.EventStreamManagement" />Project file
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&prereleaseInstall as a Cake Addin
#tool nuget:?package=ErikLieben.FA.ES.EventStreamManagement&version=2.0.0-preview.17&prereleaseInstall as a Cake Tool
👁 Quality Gate Status
👁 Maintainability Rating
👁 Security Rating
👁 Technical Debt
👁 Lines of Code
👁 Coverage
👁 Known Vulnerabilities
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.
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.
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.
# 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:
demo/taskflow-web)Open the Aspire dashboard (URL shown in console) to see all services and explore.
To keep data across restarts:
dotnet run --project demo/src/TaskFlow.AppHost -- --PersistStorage=true
| 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 () |
| 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 |
# 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
| Topic | Description |
|---|---|
| Service registration and fluent builder API | |
| Azure Blob, Table, and Cosmos DB setup | |
| Optimistic concurrency and constraints | |
Explicit error handling with Result<T> |
|
| AggregateTestBuilder and Given-When-Then patterns | |
[EventStream] and [Projection] bindings |
|
| Append, read, and fold operations | |
| Event notifications and subscriptions | |
| Migrating event streams without downtime | |
| Stream rollover and archiving | |
| Code analyzers and diagnostics | |
| Breaking changes and upgrade guide | |
| Version history and release notes |
Structured error codes are documented in .
// 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 folder for complete aggregate and projection examples.
MIT License - see the file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
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. |
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 | 66 | 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 |