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

Command Bus Bundle Laravel Package

tactics/command-bus-bundle

A Symfony bundle that wires a command bus into your application: define commands and handlers, dispatch them through a single bus service, and keep controllers thin. Includes container configuration so command handling stays decoupled, explicit, and easy to test.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What this actually is. Despite being framed as a Laravel/PHP package, tactics/command-bus-bundle is a Symfony bundle, not a Laravel package. That distinction is the single most important finding here and should be resolved before any further diligence. The architecture it implements is the textbook command bus: immutable Command DTOs, single-purpose CommandHandler services with a handle() method, and a CommandBus that resolves the correct handler (typically from the DI container, via a service tag) and invokes it. Scope is narrow — the description is the entire feature set. Expect a few hundred lines of code, no persistence, and no transport layer.

Architecture fit. For a Symfony 2.x/3.x-era codebase the pattern fit is good and conventional. For a Laravel codebase it is poor: there is no ServiceProvider, no package auto-discovery, and no illuminate/* dependency, so the bundle's container wiring and tag-based handler resolution have no natural analogue. You would be porting the concept, not installing the package. Even in Symfony, the framework fit is roughly eight years stale.

Integration feasibility: low as a dependency. Before anything else, verify the composer.json constraints — a 2016 bundle will typically pin PHP ^5.5/^7.0 and symfony/symfony ~2.x, which will not resolve against a modern app. Check whether the bus is container-aware, whether handlers are lazily resolved (relevant to boot-time cost and to circular-dependency behavior), and whether the handler registry fails fast or at dispatch time.

Technical risk: high. Last release January 2016, zero stars, zero dependents, no evidence of CI, no security disclosure process, and an effectively nonexistent maintainer. The attack surface is small, so unpatched-CVE risk is modest, but the operational risk is not: PHP 8 incompatibilities, deprecation noise, dead-end debugging, and a bus factor of one with no demonstrated interest. Zero dependents means no field validation — you would be the first production user of an abandoned library.

Key questions.

  • Is the host application Laravel or Symfony, and on which versions? (If Laravel, this is a non-starter as a dependency.)
  • Is synchronous, in-process dispatch sufficient, or is async/queued execution required?
  • Do we need middleware — transaction boundaries, logging, validation, idempotency?
  • Is any existing code already coupled to this bundle's interfaces?
  • Can we accept a ~200-line reimplementation of the pattern instead?

Integration Approach

Stack fit. Not Laravel. If the target is Laravel, use the native bus (Illuminate\Bus, self-handling commands, or a thin custom CommandBus contract bound in a service provider). If the target is Symfony, use symfony/messenger, which covers the same pattern with middleware, transports, retries, and active maintenance. In both cases the package is a reference implementation, not a dependency.

Migration path (if already in use). Define your own CommandBus and CommandHandler interfaces and make the existing bundle's bus an adapter behind them. Keep Command and Handler classes unchanged — they are just POPOs/DI services and carry no framework coupling worth rewriting. Re-point handler registration from the bundle's tag convention to the target framework's mechanism. Run the old and new buses in parallel in staging ("shadow dispatch") with assertions comparing outcomes and execution order, then cut over.

Compatibility. Assume a fork is required for PHP 8+: ContainerAware* base classes, deprecated Symfony\Component\DependencyInjection APIs, and each()/loose-comparison-era idioms are all likely present. Budget a day to fork, patch, and add a minimal test suite that pins handler-resolution behavior.

Sequencing.

  1. Inventory all commands, handlers, and dispatch sites.
  2. Define the internal bus/handler contract.
  3. Implement the adapter over Messenger or the Laravel bus.
  4. Dual-run with diff logging in a non-production environment.
  5. Remove the bundle; freeze the fork in a vendor namespace if hard blockers appear.
  6. Add tests for handler resolution, missing-handler behavior, and ordering.

Operational Impact

Maintenance. Upstream is dead. Any adoption means permanent ownership: security triage, PHP upgrade work, and framework-compat patches fall to us. The code is small, so the cost is bounded — but it is a recurring tax on a component we gain no competitive advantage from.

Support. No maintainer responsiveness, no documentation beyond a README, no issue history to mine. Institutional knowledge will live entirely in whoever does the port and must be captured in an ADR.

Scaling. Synchronous in-process dispatch scales with the web tier only. There is no queue, no retry, no backpressure, and no worker model. For short, request-scoped commands this is fine — often preferable. For anything I/O-heavy or long-running it is a hard ceiling, and swapping the transport later is exactly the migration described above.

Failure modes. Handler resolution via the container means a missing or mis-tagged handler surfaces at dispatch time in production rather than at container compile time — mitigate with a boot-time assertion over the command-to-handler map. Absent middleware, there is no transaction boundary, so a handler that writes before throwing leaves partial state; add explicit transactional wrapping. No retry or idempotency semantics, so duplicate dispatch is a correctness hazard the caller must own.

Ramp-up. The pattern itself is an hour of onboarding for a competent PHP engineer. This specific implementation is harder than it should be — no docs, no tests, unfamiliar 2016 Symfony idioms — and every future hire will need the history explained. A native framework bus avoids that entirely.

Recommendation. Do not adopt as a dependency. Treat it as a documented pattern reference and implement the bus natively or on symfony/messenger. The low opportunity score reflects the reality: the idea is sound and durable, but this artifact is abandoned, unvalidated, and built for a different ecosystem than the brief assumes.

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.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle