Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Eventstore Bundle Laravel Package

th3mouk/eventstore-bundle

A Symfony bundle that integrates an event store into your application, providing configuration, services and console commands for persisting and replaying domain events. It keeps event-sourcing setup minimal so you can focus on aggregates and projections instead of infrastructure.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — The first thing to correct at intake: this is a Symfony bundle, not a Laravel package, despite how it was filed. Its actual value-add is small — a DI extension and service definitions that wire a Guzzle HTTP client to EventStore's legacy REST/AtomPub surface. There is no Laravel service provider, facade, or publishable config. On a Laravel roadmap item, this is not a candidate; it is a reference. As a TPM, the actionable finding is process-level: the discovery pipeline mislabeled the artifact, and that should be fixed before it costs someone a sprint.

Integration feasibility — Poor as a shipped dependency and cheap as a fork. Archived upstream means no releases, no PHP 8 work, no Guzzle 7 support, and no security response. The functional surface is genuinely small (append events, read streams, subscribe by polling), so the engineering effort to own it is low. The product question is not "can we integrate it" but "why would we acquire a dependency with no maintainer when the code we'd depend on is a few hundred lines we could own outright."

Technical risk — High, and correlated across axes: unmaintained upstream, 5 stars, 0 dependents (no community to catch regressions), and a transport bet on EventStore's HTTP/AtomPub API, which has been de-emphasized in favor of gRPC in modern EventStoreDB. Even a successful integration is a commitment to a deprecated interface. Frame this to stakeholders as transport risk, not just dependency risk — the two compound.

Key questions — These are the ones that gate funding:

  • Is the underlying requirement event sourcing, CQRS read models, or simply an append-only audit trail? A database table satisfies the third, at a fraction of the cost.
  • Which EventStoreDB version and protocol (HTTP vs. gRPC) is the target? If greenfield, HTTP is the wrong answer regardless of this package.
  • Is the destination stack Laravel or Symfony? If Laravel, this drops out of the candidate set entirely.
  • Who owns the fork, and what is the ongoing budget line for it?
  • Does the package implement retry, backoff, or idempotency on append, or is it raw Guzzle calls? Duplicate-event risk is a domain correctness issue, not a plumbing detail.
  • What is the timebox for a spike, and what evidence would kill the initiative?

Integration Approach

Stack fit — Misaligned on both stacks. Laravel: incompatible by construction; treat as reference code only. Symfony: workable solely on legacy versions where the bundle's kernel and extension API still exist. Neither gives a supported forward path, so the integration plan is really a build plan with this repo as source material.

Migration path — Do not add it to composer.json in production. Two realistic options, and the TPM should force a choice between them on spike evidence:

  • (a) Lift and own: extract the client classes into an internal adapter behind a EventStoreClient interface we control. Small surface, clear ownership, transport swappable later.
  • (b) Start maintained: adopt a gRPC-based EventStoreDB client or a PHP event-sourcing framework (Prooph, EventSauce) with a custom store, and reimplement only the HTTP glue if HTTP is genuinely mandated.

The default recommendation is (b) for greenfield, (a) only when there is an existing HTTP EventStore deployment we must interoperate with.

Compatibility — Expect conflicts on Guzzle major version, PHP version floor, and Symfony component constraints. Resolution likely requires ignore-platform-reqs or a fork — both of which are risk-register entries, not workarounds to wave through.

Sequencing — (1) Timeboxed spike — one working day — proving publish/read of a stream against the target EventStoreDB version, with credentials, content negotiation, and concurrency check. (2) Fork-vs-build decision on that evidence. (3) If forking, wrap behind an owned interface before any domain code touches it. (4) Wire into application services. (5) Only then discuss production. Each gate is a decision point, not a formality — the spike is designed to fail cheaply if the transport bet is wrong.

Operational Impact

Maintenance — Effectively 100% ours from day one. Upstream is archived, so every PHP, Guzzle, or Symfony upgrade becomes a fork conflict we resolve. Budget a small but permanent maintenance tax. The mitigating factor is code volume: it is small enough to absorb, which is also the argument for just owning it rather than carrying a fake dependency.

Support — None. No issue triage, no CVE response, no upstream contact. Internal ownership, written runbooks, and a named maintainer are mandatory rather than optional. If procurement or compliance requires an actively maintained, versioned dependency, this fails the gate outright and should be recorded as such.

Scaling — The HTTP/AtomPub transport is chatty: batching is limited and per-request overhead dominates high-throughput append workloads. Guzzle connection pooling helps, but the ceiling is materially below gRPC. Before committing, model expected event volume and peak append rate against that ceiling — a number, not a vibe.

Failure modes — Silent behavioral drift against newer EventStoreDB builds; no built-in retry, backoff, or idempotency on append (duplicate events are a real correctness risk in an append-only store); timeout and connection-exhaustion behavior inherited from Guzzle defaults; basic-auth credential handling that needs verification. All of this must be hardened in the adapter layer, and that hardening is part of the cost estimate — not an afterthought.

Ramp-up — Learning the package itself is an afternoon; it is thin. The dominant cost is EventStoreDB operational knowledge — stream design, projections, optimistic concurrency, subscriptions — plus event-sourcing modeling discipline on the team. That investment is independent of this package and should be resourced separately in the roadmap, because it is the actual commitment.

Recommendation — Do not adopt as a dependency. Keep it as reference material, or fork the minimal client surface behind an interface we own. Treat gRPC or a maintained event-sourcing library as the strategic path, and confirm first that the underlying requirement justifies EventStoreDB at all rather than an append-only table. Record the finding on the technology radar as avoid — unmaintained, deprecated transport, and fix the intake labeling so Symfony artifacts stop arriving under Laravel briefs.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource