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

Bernard Bundle Bridge Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  1. Is the actual target framework Symfony or Laravel? The answer changes this from "reimplement the idea" to "vendor a fork."
  2. What is our real message transport today — Redis, SQS, database? Bernard's transports overlap with Laravel's native queue drivers, so we may be adding a parallel abstraction for no gain.
  3. Do we already have async command processing (Horizon, Symfony Messenger, or an existing SimpleBus setup)? If yes, this bridge is redundant.
  4. What is the cost of a wrong choice here — are these commands on a payment or fulfillment path, or best-effort notifications?
  5. Is there any internal owner of SimpleBus middleware conventions, or would this be orphaned on arrival?

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.

Integration Approach

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:

  1. Reimplement natively (recommended). Build a 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.
  2. Vendor a fork. Copy the bridge source into 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.
  3. Direct composer require. Not recommended. The 2017 release date and archived status make a clean install on a current PHP version unlikely without --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.

  1. Inventory (1 day): enumerate every command currently dispatched asynchronously, its payload shape, idempotency characteristics, and retry semantics.
  2. Spike (2 days): prototype the native middleware + worker on one low-risk command in a staging queue.
  3. Parallel run (1 sprint): dual-dispatch to legacy and new paths behind a feature flag, compare outcomes, do not dual-consume.
  4. Cutover: drain the legacy queue, flip the flag, decommission the old worker.
  5. Cleanup: delete the vendored/forked code path and document the middleware contract.

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.

Operational Impact

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:

  • Silent message loss on worker crash between dequeue and command-bus dispatch (no ack semantics by default).
  • Poison messages / retry storms — a command that throws will loop without a dead-letter target unless we build one.
  • Serialization drift — the command object is serialized with a PHP-version-sensitive format; a PHP upgrade mid-flight can render queued messages undecodable. Drain queues before any runtime upgrade.
  • Re-queue loops — if the async middleware is not stripped on the consumer side, a failed command re-enqueues itself indefinitely.
  • Divergence between sync and async paths — commands that behave differently when dispatched inline versus queued, typically around transaction boundaries and stale reads.

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.

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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator