simple-bus/bernard-bundle-bridge
Bridge between SimpleBus and BernardBundle that lets Symfony applications dispatch commands and events through Bernard queues. It wires message buses to asynchronous transports so handlers can run in background workers, with configuration for routing messages to queues.
Architecture fit. The first thing to flag is a stack mismatch: despite the Laravel/PHP framing, this is a Symfony bundle, not a Laravel package. It contains no service provider, no config/ publishable, and no Laravel queue integration. It exists purely to wire SimpleBus/AsynchronousBundle to BernardBundle through the Symfony DI container and Symfony's EventDispatcher. If our target runtime is Laravel, none of the wiring transfers — only the ~2–3 small classes of actual glue logic (a message publisher and a consuming command handler) are conceptually reusable.
Integration feasibility. Low as a dependency, moderate as a reference implementation. The package is a thin adapter: it registers a Bernard-backed producer for the asynchronous command bus and a consumer that re-dispatches dequeued messages back onto the command bus. That is realistically a day or two of engineering to reproduce idiomatically against Laravel's queue contracts. Pulling it in directly would drag in Symfony 2/3-era constraints, an abandoned bernard/bernard core, and a dependency graph that almost certainly conflicts with any modern PHP 8.x / Laravel 10+ application.
Technical risk. High and mostly unmanaged. The repository is archived, last released 2017-10-25, has 2 stars and 0 dependents — meaning no community validation, no downstream bug reports to learn from, and no path to a security or compatibility patch. Bernard itself is superseded in the ecosystem (the maintainers moved toward Enqueue and later Symfony Messenger), so we would be adopting two layers of dead-end technology simultaneously. The residual risk is not a known CVE; it is transitive dependency rot and the certainty that we alone own every future fix.
Key questions.
Recommendation: do not take a runtime dependency. Treat the repository as a ~200-line design reference and reimplement the publish/consume bridge against our native queue.
Stack fit. Poor out of the box, adequate after translation. The two integration surfaces we actually need are (a) a command-bus middleware that serializes an asynchronous command and pushes it to a queue, and (b) a worker that pops a message and re-dispatches it into the command bus with the same middleware chain minus the async one (to prevent re-queuing loops). Both map cleanly onto Laravel's Queue::push / job handle() model, and both are things we would write ourselves anyway.
Migration path. Three viable routes, in order of preference:
QueuedCommand job wrapper and an AsyncCommandMiddleware in-house, using Laravel's queue for transport. No new third-party surface. Cost: ~2–4 engineer-days including tests.app/Support/ or a private package, rewrite the Symfony DI wiring as a Laravel service provider, and pin the Bernard dependency. Only justified if we are already committed to Bernard elsewhere — which the 0-dependents signal suggests we are not.--ignore-platform-reqs hacks that we would then carry forever.Compatibility. Assume PHP 7.0/7.1-era code. Expect friction with PHP 8 typed properties, mixed, and any Laravel version past 5.x. Bernard's Redis/Doctrine transports will not interoperate with Laravel's RedisQueue job payload format — messages are not cross-compatible, so a gradual side-by-side migration requires either a translation shim or a hard cutover with a drain period.
Sequencing.
The critical sequencing constraint is the drain: because payload formats are incompatible, there is no live dual-read window — the cutover is a step function and needs a rollback plan that accounts for in-flight messages.
Maintenance. Total. Archived + 0 dependents means there is no upstream to merge our patches into, no issue tracker to escalate to, and no release cadence to ride. Every PHP upgrade, every Symfony/Laravel major, and every transport change becomes our ticket. Budget roughly 1–2 days per year of pure dependency upkeep for the vendored variant, versus near-zero for a native reimplementation — which is the strongest single argument against adoption.
Support. Effectively none. There is no maintainer, no commercial backing, and the star count suggests no one to ask in the community. Internal runbooks and a named owner are mandatory if we proceed; if we cannot name that owner, we should not ship it.
Scaling. Inherited from Bernard, which is dated: worker prefetch, retry/backoff, and dead-letter handling are all manual and far behind what Horizon or Symfony Messenger provide. Throughput will be fine at low volume but we lose observability — no queue dashboard, no failed-job UI, no per-job metrics without custom instrumentation. Plan to add structured logging at the consumer boundary from day one.
Failure modes. The ones that will actually page someone:
Ramp-up. Low on code volume, moderate on concepts. The bridge itself is small enough to read in an hour. The real learning curve is the SimpleBus middleware model (message → middleware chain → handler) plus Bernard's producer/consumer split, and that knowledge is not portable to anything else we run. Expect ~2 days for a senior engineer to be productive, but recognize that this is knowledge we are buying for a technology we will likely retire — a poor return.
Bottom line: the 0.08 score is fair. This is a 200-line adapter to two abandoned ecosystems, with a framework mismatch on top. Its only real value is as a worked example of how to bridge an async command bus to a queue — which we can read once and rebuild natively in less time than it takes to make it install.
How can I help you explore Laravel packages today?