gos/web-socket-bundle
A Symfony bundle for adding real-time WebSocket features to your app. It provides a Ratchet-based server, topic-based publish/subscribe, RPC, authentication, and Symfony service integration for easy bidirectional communication.
Architecture fit — low for a Laravel stack. The framing of this as a "Laravel/PHP package" is the first thing to correct: gos/web-socket-bundle is a Symfony bundle, not a framework-agnostic library. It ships a Bundle subclass, a DependencyInjection\Extension with a config tree, compiler passes, and event subscribers wired to the Symfony kernel lifecycle. None of that has a counterpart in Laravel. There is no service provider, no facade, no publishable config, and no artisan entrypoint — so "composer require and go" is not a path that exists. The runtime core is Ratchet (ReactPHP event loop) with a WAMP topic/session layer and an Autobahn.JS client, all of which are usable in principle from any PHP process but are packaged here specifically for Symfony's container and kernel semantics. The newly released v3.15.0 changes none of this — it is a single deprecation fix scoped to Symfony 6.1 command configuration, with no new abstractions, no framework-agnostic surface, and no Laravel affordance.
Integration feasibility — feasible only out-of-process or via a fork. Three realistic shapes:
websocket:serve command. I'd budget 3–6 weeks for a hardened version, and you own it permanently.cboden/ratchet with a custom command. This is the recommendation unless WAMP's RPC-over-socket semantics are a hard product requirement.Technical risk — high, marginally reduced but not resolved. v3.15.0 is the first release since 2022-09-20, and it is a one-line fix for a Symfony 6.1 deprecation. It is a genuine positive signal — the maintainer is still reachable and the package is not formally abandoned — but a single maintenance commit after ~2 years does not establish cadence, and it is scoped to Symfony 6.1, not Symfony 7. Since Laravel 11/12 pin Symfony 7 components, the core compatibility question this assessment raised is unchanged and arguably reinforced: the release confirms the author is tracking Symfony 6.x-era deprecations, not that the dependency chain has been modernized. 609 stars and zero dependents in this dataset remains a thin adoption signal, and the bus factor is still effectively one. ReactPHP's blocking event loop still sits badly beside Octane/Swoole/RoadRunner — two concurrency models in one deploy target, with singleton and DB-connection leakage as a live class of bug. The Autobahn.JS client still does not interoperate with Laravel Echo.
Key questions before any commitment:
Stack fit — poor as a direct dependency, workable as a boundary. The clean architectural line is: Laravel owns domain state and authorization; the socket tier is a dumb, horizontally-scaled relay that only knows channel names and signed tokens. Anything that requires the WebSocket process to read Laravel's Eloquent models or session store is a design smell that will fight both frameworks.
Migration path. If the team is currently on Symfony with this bundle, use a strangler: put every outbound push behind a Broadcaster contract in application code, keep WAMP topic handlers as the first adapter, then add a Pusher-protocol adapter (Reverb) and dual-publish during cutover. Clients migrate per-feature behind a flag; the WAMP tier stays up until connection counts on the new path reach parity for two consecutive weeks. If the team is greenfield on Laravel, skip the strangler entirely — there is nothing to strangle.
Compatibility work to do up front:
replace block. v3.15.0 does not move the Symfony version ceiling — re-run composer why-not against Symfony 7 before anything else.Sequencing (4–6 weeks for a spike-to-prod path):
Maintenance. Effectively low-cadence rather than formally abandoned — a distinction v3.15.0 earns, and the only one it earns. A single Symfony 6.1 deprecation fix after ~2 years should be read as "the lights are on," not as a sustainable release rhythm; do not plan capacity against it. Adopting this still means budgeting roughly 10–20% of one backend engineer indefinitely for dependency bumps, security patching of the Ratchet/ReactPHP chain, and Symfony-version drift — and that estimate now carries an added hedge, because you cannot assume upstream will absorb the Symfony 7 migration for you. That cost lands whether or not the feature changes. Compare against Reverb, where the same cost is amortized across the Laravel community and covered by a first-party release cadence.
Support. Community forums only, and the community is Symfony-focused — the questions you will actually have ("how do I bridge this to Laravel's guard?") have no canonical answers. Onboarding is slow because the knowledge lives in the bundle's internals rather than in public documentation, and the v3.15.0 changelog (a single line plus an auto-generated compare link) reinforces that release notes will not be a reliable source of upgrade guidance. Expect 1–2 weeks for a Laravel developer to become productive with WAMP/Ratchet, 3–4 weeks if they are also owning the fork; the front-end team's Autobahn knowledge does not transfer to Echo, so it is a separate learning curve.
Scaling. Ratchet is single-process and single-threaded on one event loop. Vertical scaling is trivial, horizontal scaling requires a shared pub/sub backplane plus session affinity, and the bundle's topic registry holds in-memory state that must be consistent across nodes. Long-lived PHP processes accumulate memory — plan for scheduled rolling restarts and treat "restart" as a customer-visible event unless you build graceful drain.
Failure modes to design against:
Ramp-up and verdict. The score of 21.5 remains accurate for this context, and v3.15.0 does not move it: a competent, once-popular Symfony bundle being evaluated for a Laravel-adjacent role it was never designed for, now with one additional maintenance commit rather than a revival. I would not adopt it. The recommended path is unchanged — an out-of-process relay only if WAMP RPC is a genuine requirement; otherwise standardize on Laravel Reverb or Soketi, keep the socket tier stateless and behind a Broadcaster interface. The one trigger worth monitoring is a follow-up release that lands Symfony 7 support, which would matter if the team ever consolidates on Symfony; it still would not make this a Laravel solution.
How can I help you explore Laravel packages today?