Event-sourced aggregates with #[EventSourcingAggregate]. Projections via #[ProjectionV2] — global, partitioned, or streaming. Non-blocking gap detection — concurrent access is never blocked. Projection emission with rebuild auto-suppression. End-to-end PII encryption across event store, broker, and structured logs.
Composer package · Laravel, Symfony, or Tempest · PostgreSQL or MySQL · RabbitMQ, Kafka, SQS, Redis, or DBAL outbox
Store events, not state. Aggregates, projections, replay, snapshotting. Partitioned + streaming projections so rebuilds parallelize across workers and catch up in real time — no single-process bottleneck.
A projection can publish its own event the moment it applies a change — so dependent logic reacts in the same flow instead of a separate eventually-consistent process; sagas, event handlers, and other projections subscribe via the normal #[EventHandler]. Rebuild a projection? Emission is automatically suppressed, so downstream consumers aren't flooded with duplicate historical events while the read model catches up.
Rebuild a projection on a new version in parallel — concurrent async backfill partitioned by aggregate ID scales rebuilds to millions of events across N workers. The live projection keeps serving queries until the atomic flip.
Projections are trigger-based: on every run they read from the Event Store at their last committed position. Crash at event #42? Fix the bug, deploy, and the projection catches up automatically — no manual reset, no backfill script.
One #[Sensitive] attribute encrypts a field in the event store, on the wire over RabbitMQ / SQS / Redis / Kafka / DBAL outbox, and in your structured logs — because all serialization flows through one shared conversion pipeline.
Each tool below is a capable choice for its slice. Ecotone covers the same ground and adds the operational layer around it — so aggregates, projections, sagas, and messaging share one model and one set of guarantees.
Purpose-built for event sourcing inside a Laravel application.
Where Ecotone goes further than this library
#[Sensitive] field through the event store, the broker, and your structured logs.A clean, framework-agnostic event-sourcing library.
Where Ecotone goes further than this library
A capable Doctrine-based event-sourcing library with per-subscription isolation.
Where Ecotone goes further than this library
Scales with your event volume — from one cursor to N parallel workers.
#[Sensitive] field through the event store, the broker, and your structured logs.Haven’t found what you’re looking for? Contact us
Unleash the power of Messaging in PHP
and push productivity to the higher level
