A simple but powerful .NET framework for implementing event sourcing and CQRS patterns in domain-driven applications.
d60 Cirqus is a .NET framework for implementing event sourcing and CQRS (Command Query Responsibility Segregation) patterns. It provides a structured way to model domain logic using commands, aggregate roots, events, and views, all managed by a central CommandProcessor. The framework solves the complexity of building scalable, event-driven applications by offering a cohesive kit that handles event persistence, state mutation, and real-time projections.
.NET developers building domain-driven applications that require scalable event sourcing, CQRS architectures, or real-time data projections. It is particularly suited for teams focusing on business logic encapsulation and event-driven state management.
Developers choose Cirqus for its simplicity and powerful abstractions that make event sourcing and CQRS accessible without sacrificing flexibility. Its polished APIs, seamless .NET integration, and focus on domain-model-centric design provide a balanced approach, reducing boilerplate while ensuring maintainability and consistency in event-driven systems.
:x: d60 event sourcing + CQRS framework
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
The CommandProcessor offers a concise, guided setup (e.g., CommandProcessor.With().Create()) that reduces boilerplate and simplifies command handling, as shown in the configuration examples.
Built-in support for the emit/apply pattern in aggregate roots ensures private state mutation through events, demonstrated in the Counter example where Increment emits events that are applied internally.
Integrates with multiple event stores like SQL Server using JSON for persistence, allowing easy replay and interoperability, as highlighted in the flexible event stores feature.
View managers subscribe to events for complex projections, enabling real-time data updates via classes like CounterView that implement ISubscribeTo, as detailed in the view projections section.
The README admits Cirqus prioritizes polished APIs over raw performance, positioning it away from the 'extreme high performance camp,' which may limit scalability in high-demand scenarios.
Events stored as JSON can include .NET type names, hindering seamless interoperability with non-.NET systems, as noted in the interoperability scale discussion.
It is domain-model-centric rather than designed for complex event processing, so advanced CEP features require custom work, as acknowledged in the philosophy section.