Crate cqrs_es

source ·
Expand description


A lightweight, opinionated CQRS and event sourcing framework targeting serverless architectures.

Command Query Responsibility Segregation (CQRS) is a pattern in Domain Driven Design that uses separate write and read models for application objects and interconnects them with events. Event sourcing uses the generated events as the source of truth for the state of the application.

Together these provide a number of benefits:

  • Removes coupling between tests and application logic allowing limitless refactoring.
  • Greater isolation of the aggregate.
  • Ability to create views that more accurately model our business environment.
  • A horizontally scalable read path.

Things that could be helpful:

Three backing data stores are supported: docs CodeBuild


  • An in-memory event store suitable for local testing.
  • Common persistence mechanisms.
  • This module provides a test framework for building a resilient test base around aggregates. A TestFramework should be used to build a comprehensive set of aggregate tests to verify your application logic.


  • This is the base framework for applying commands to produce events.
  • EventEnvelope is a data structure that encapsulates an event with its pertinent information. All of the associated data will be transported and persisted together and will be available for queries.



  • In CQRS (and Domain Driven Design) an Aggregate is the fundamental component that encapsulates the state and application logic (aka business rules) for the application. An Aggregate is always composed of a DDD entity along with all entities and value objects associated with it.
  • Returns the aggregate as well as the context around it. This is used internally within an EventStore to persist an aggregate instance and events with the correct context after it has been loaded and modified.
  • A DomainEvent represents any business change in the state of an Aggregate. DomainEvents are immutable, and when event sourcing is used they are the single source of truth.
  • The abstract central source for loading past events and committing new events.
  • Each CQRS platform should have one or more queries where it will distribute committed events.
  • A View represents a materialized view, generally serialized for persistence, that is updated by a query. This a read element in a CQRS system.