jphooiveld/eventsauce-bundle
A Symfony bundle that integrates EventSauce event sourcing into your application, providing service configuration for aggregates, repositories, message dispatching, and event storage so you can build domain-driven, event-sourced systems with less boilerplate.
Architecture fit. jphooiveld/eventsauce-bundle is a thin Symfony bundle that wires the EventSauce event-sourcing library (aggregate root repository, message dispatcher, message/snapshot repositories, serializers) into the Symfony DI container. It is not a Laravel package and cannot be installed as one — Laravel has no bundle manifest, no Kernel::registerBundles(), and no services.yaml autoloading convention that this package depends on. Adopting it in a Laravel codebase means either (a) treating it strictly as reference source for container wiring, or (b) using the underlying eventsauce/eventsauce library directly and hand-writing a ServiceProvider. The architecture itself is a strong, near-irreversible commitment: event sourcing makes the event log a permanent public contract, and every downstream read model becomes a rebuildable projection rather than a source of truth.
Integration feasibility. Low as-is, moderate as a blueprint. Concrete blockers:
eventsauce/* version in the 0.x range.Technical risk. High, concentrated in four areas:
Key questions for the maintainer/vendor before committing:
eventsauce/eventsauce and Symfony versions are pinned in composer.json, and does the DI wiring survive a bump to EventSauce 1.x?EventSauce\EventSourcing\TestUtilities) integration for aggregate unit tests?Verdict: viable as an architectural reference, not as a dependency. Evaluate the underlying library, not the bundle.
Stack fit. Poor for the stated target (Laravel). The bundle's value is its container configuration — a map of which interfaces bind to which implementations. That map is portable as knowledge, not as code. Reimplementing it as a Laravel ServiceProvider is a bounded, one-to-two-week task for an engineer already comfortable with EventSauce's interfaces.
Recommended path (in order of preference):
eventsauce/eventsauce directly + a first-party Laravel provider. Bind MessageRepository, AggregateRootRepository, MessageDispatcher, and the serializer in a ServiceProvider. Use EventSauce\EventSourcing\Serialization\ConstructingMessageSerializer (or Symfony Serializer-backed) and a Doctrine DBAL or Eloquent-backed message repository. This is the only path that gets you a maintained core.src/ first — expect it to be a few hundred lines of DI config, in which case option 1 dominates.Migration/compatibility notes. Whichever path, expect to write or adapt:
domain_messages, snapshots, aggregate_versions). Schema and indexing are yours to design.Sequencing.
src/ and README, extract the wiring map, confirm EventSauce core's current interfaces, prototype one aggregate + one projection in a scratch Laravel app.Do not start with a domain where event history is regulatory or financially material.
Maintenance. Effectively zero upstream. The bundle has had no release since November 2019 and 0 dependents; assume the maintainer is inactive and plan for a hard fork on day one. Budget for: EventSauce core upgrades (which you will want, since the library is actively maintained and the bundle's pin will hold you back), PHP/Laravel major-version bumps, and serializer compatibility. Treat the original bundle as unmaintained reference code, not a dependency you track.
Support. None. No vendor, no SLA, no CVE process, 15 stars means a near-zero community for triage. Internal ownership must be explicit and named — an event store with no owner is an outage waiting on a schema question.
Scaling. Three distinct curves:
Failure modes to design against:
Ramp-up. Event sourcing is a genuine skill step-change for a team raised on CRUD/ActiveRecord. Realistic estimate: 4–8 weeks before a team is independently productive, and the first bounded context should be considered a learning investment rather than a delivery. Pair the ramp-up with an explicit "what we will not event-source" list — mixed CRUD/ES systems are normal and healthy, and the fastest way to fail is to apply ES to a lookup table.
Recommendation. Do not adopt this bundle as a dependency. Use it as a wiring reference, adopt EventSauce core directly under a first-party Laravel service provider, and gate the whole initiative on a one-week spike plus a named internal owner for the event store.
How can I help you explore Laravel packages today?