jean-beru/pipeline-bundle
Jean-Beru PipelineBundle brings composable pipeline processing to Symfony apps. Build multi-step workflows from reusable stages, keep business logic organized, and run ordered processing as clean, testable services.
Architecture fit — mismatch, high friction. The first thing a TPM must surface: this is a Symfony bundle, not a Laravel package. Its value proposition is container integration — a DI extension, a compiler pass, and service tagging so that pipes are auto-discovered and assembled into a named pipeline at compile time. Laravel consumes Symfony components (HttpFoundation, Finder, Console) but does not implement the bundle abstraction or the Extension/CompilerPass lifecycle. Dropping this into a Laravel app gives you the pipeline value objects and nothing else; the auto-wiring that justifies the dependency is inert.
Compounding factor: Laravel already ships Illuminate\Pipelines\Pipeline (->through()->send()->then(), plus Pipe::carry()/finally() conventions) as a first-class primitive since Laravel 10. league/pipeline is the framework-agnostic fallback. The functional gap this package would fill is effectively zero, and the gap it would fill (container-driven pipe registration) is already solved by Laravel's service container and $this->app->tag().
Integration feasibility — feasible but pointless. Three paths exist:
Illuminate\Pipelines with extra steps and an unmaintained dependency.Only path 3 is defensible at this score.
Technical risk — high, and mostly non-technical. The risk is not that the code is bad; it is that nothing validates it. 1 star, 0 dependents, a single maintainer, and a last release of 2024-03-08 means no downstream production usage has stress-tested it. Unknown test coverage, no security policy, no issue-triage signal. Bus-factor of one. Adopting this means the we become the maintainer of record on day one.
Key questions for the requester:
Illuminate\Pipelines\Pipeline does not? Get a concrete answer, not "it's cleaner."Recommendation: reject adoption. Treat the package as a reference implementation to read for design ideas, and standardize on the native pipeline.
Stack fit — poor. The package targets Symfony's kernel/DI contract. Our stack is Laravel with Eloquent, service providers, and the facade container. The overlap is a naming convention, not an architecture. Any integration we write is glue we own forever, wrapping a dependency with no upstream velocity.
Migration path (if the decision were overridden).
PipelineServiceProvider that binds the pipeline factory, and translate the bundle's Configuration.php + compiler pass into $this->app->tag(PipeInterface::class) plus a Singleton binding per named pipeline.Illuminate\Pipelines on three real cases (request enrichment, payment authorization chain, ETL normalization). If native parity is 100% — which it will be — the spike has already answered the question.Illuminate\Pipelines with a config/pipelines.php registry. 150 lines, fully ours, no third-party surface.Compatibility. PHP floor and Symfony 6/7 constraints are unverified against our runtime; Laravel 11 requires PHP 8.2 and pins Symfony 7 components, but a bundle can carry transitive Symfony constraints that conflict with Laravel's pinned versions in Composer's resolver. This is a realistic composer update breakage vector, and it is the sort of thing that surfaces in CI on an unrelated PR three months later.
Sequencing.
Non-negotiable: whatever we ship must be documented in our internal pipeline ADR, so we do not revisit this in six months.
Maintenance. Upstream has effectively one contributor and a stalled release cadence. Any bug we hit — PHP 8.4 deprecations, Symfony 8 compatibility, a container compile edge case — we fix ourselves and either carry a permanent patch or publish a fork. Forking under our namespace is the honest cost of adoption; budget it explicitly rather than discovering it at the first composer audit.
Support. No community to escalate to: 1 star and 0 dependents means zero StackOverflow corpus, zero third-party blog coverage, zero peer review. Onboarding material is the README and the source. Internal Slack becomes the only support channel, and its responders are whoever did the spike — likely one person.
Scaling. Genuinely low concern. The pipeline pattern is in-process and stateless; overhead is a few object instantiations per request, negligible against DB and network I/O. The scaling risk that does exist is organizational: every additional named pipeline written against a bespoke abstraction increases the migration cost if we later consolidate, and increases the blast radius of the single-maintainer dependency.
Failure modes to instrument:
Illuminate\Pipelines.Ramp-up. Deceptively steep for the payoff. A Laravel engineer must context-switch into Symfony bundle semantics — extensions, compiler passes, tag priorities — to debug a container wiring issue, for a library that offers no capability they lack. Expected ramp: half a day to use, two-plus days to debug confidently. That asymmetry, multiplied across the team, is the real cost of this decision.
Verdict. Adopt Illuminate\Pipelines\Pipeline. If declarative named pipelines are a real requirement, fund a small in-house abstraction with tests and an ADR. Do not take a production dependency on a 1-star, zero-dependent, single-maintainer Symfony bundle to solve a problem Laravel already solved — the integration cost is real, immediate, and ours, while the benefit is zero, hypothetical, and theirs.
How can I help you explore Laravel packages today?