Event-sourced aggregates with #[EventSourcingAggregate]. Projections via #[ProjectionV2] — global, partitioned, or streaming. Gap detection on by default. Projection emission with rebuild auto-suppression. End-to-end PII encryption across event store, broker, and structured logs.
Composer package · Laravel or Symfony · 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 emit a downstream event the moment it applies a change — 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 row names what you'd need to add to match Ecotone, and the architectural ceiling that integration cannot fix.
Eloquent-bound. No gap detection. No projection emission. Single-process replay.
An event-sourcing library only. Manual glue for everything downstream.
An event-sourcing library only. Subscription failures block the whole pipeline.
Scales with your event volume — from one cursor to N parallel workers.
Haven’t found what you’re looking for? Contact us
Unleash the power of Messaging in PHP
and push productivity to the higher level
