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

Commander Bundle Laravel Package

face/commander-bundle

A PHP bundle that integrates Commander-style command handling into your application, giving you a structured way to define, register, and run commands through the framework's service container and configuration.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Architecture pattern decision — command bus / CQRS-lite adoption. This bundle is a thin command-handler registry: it lets a team route a "command" object to a single handler instead of wiring service dependencies directly. The product-relevant question it forces is whether our write paths should be modeled as explicit, named operations (e.g., RegisterUser, IssueRefund) or stay as ad-hoc service calls. That is a maintainability and onboarding decision, not a features decision — but it gates how fast we can add features later.
  • Build vs. buy vs. borrow. Three real options: (a) adopt a package, (b) write a ~100-line dispatcher in-house, (c) use the framework's native bus. This package is effectively a reference implementation of option (b) — useful as a design template, weak as a dependency. A PM should frame the decision as "do we own this seam, or outsource it?" rather than "which package?"
  • Roadmap optionality for async work. A command bus is the seam that later makes queued/background processing a config change rather than a refactor. If our roadmap includes long-running operations (report generation, third-party syncs, bulk imports), establishing the command boundary now reduces future re-work and lets us defer the transport decision.
  • Team-scaling and code ownership decisions. Command-per-file structures create predictable file locations and clear ownership boundaries, which matters when we add engineers or split into squads. This is a process benefit that shows up as reduced review friction, not shippable features.
  • Audit and transactional-boundary use cases. A single command entry point is a natural hook for logging, authorization checks, and transaction wrapping — relevant if compliance, billing, or multi-step workflows are on the near-term roadmap.
  • Stack-fit caveat that must be resolved before any decision. Despite the Laravel framing, this is a Symfony bundle (stefvaessen/CommanderBundle, published under the face/ vendor). If our codebase is Laravel, this package is not installable as-is — the decision collapses to "copy the pattern" or "use Illuminate\Bus." Confirm the framework before spending evaluation time.

When to Consider This Package

Consider it only if all of the following hold:

  • The application is Symfony, not Laravel — the bundle's service-container integration and compiler passes are Symfony-specific.
  • You are already inside the face/ ecosystem, or this bundle is a transitive/legacy dependency you must keep.
  • Your command-dispatch needs are genuinely minimal: synchronous, in-process, no middleware pipeline, no retries, no transport.
  • You have engineering capacity to fork and own it — read the source, vendor it into the repo, and treat it as first-party code with your own tests.

Look elsewhere — in practice, almost always — when:

  • You are on Laravel. Use Illuminate\Bus / the container's dispatch() and job queues. Zero new dependencies, framework-supported, already documented for the team.
  • You need async, retries, middleware, or transports. Symfony Messenger is the maintained, first-party answer and covers the synchronous case too. Building on a 0-star package to later migrate to Messenger is pure waste.
  • You need any support guarantee. 0 stars, 0 dependents, and a negligible health score mean no community, no security review, no bus factor beyond one maintainer, no compatibility testing against future framework majors. This fails a standard dependency-adoption checklist on supply-chain risk alone.
  • The pattern is all you want. If the appeal is "commands map to handlers," write it. A CommandBus interface plus a container-backed handler locator is small, testable, and yours to evolve — and it removes an unvetted third party from the critical path of every write operation.
  • You are pre-product-market-fit. Introducing an architectural pattern with a dependency cost before the domain is stable adds ceremony that will be refactored away. Ship the feature; introduce the seam when the second or third command appears.

How to Pitch It (Stakeholders)

For executives (one paragraph): We evaluated a small open-source PHP package that implements the "command handler" pattern — a way of structuring how the application performs write operations so each one is a named, isolated, testable unit. The pattern is sound and widely used; this particular package is not a viable dependency. It has no users, no stars, no maintainers beyond a single author, and it targets Symfony rather than our Laravel stack. Recommendation: do not adopt. If we want the pattern, we get it for free from Laravel's built-in job/bus system, or we write roughly a hundred lines of our own code that we control. Net cost of the recommended path is a few engineering days, zero new supply-chain risk, and no vendor lock-in.

For engineering (the substance):

  • What it is: a Symfony bundle providing a command → handler mapping and dispatch mechanism. Thin, synchronous, container-integrated. Not a message queue; not a replacement for Messenger.
  • Why we're saying no: installability (wrong framework), maintenance risk (single maintainer, no releases cadence evidence, no dependents to shake out bugs), review burden (we'd have to audit and own it anyway, at which point we've paid the build cost plus the integration cost), and upgrade risk (no signal on future Symfony major compatibility).
  • What we do instead: on Laravel, standardize on Illuminate\Bus with one-action job classes as our command handlers and a thin CommandBus interface if we want framework independence. On Symfony, use Messenger's synchronous transport — it's first-party, documented, and gives us an upgrade path to async for free.
  • What we keep from this package: the convention — one command object, one handler, one obvious file location, dispatch through a single interface. That's the value, and it's a coding-standard decision we can adopt this sprint with a short ADR and no dependency.
  • Decision owner and next step: engineering to confirm framework target and current dispatch usage; PM to record the ADR outcome (pattern adopted, package rejected) so this doesn't get re-litigated next quarter.
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