venzon/clank-bundle
venzon/clank-bundle is a Laravel/PHP package that bundles Clank integration for your application. It offers straightforward Composer-based setup, minimal configuration, and a lightweight way to add Clank support without extra boilerplate.
Scope mismatch is the headline finding. venzon/clank-bundle describes itself as a Symfony2 bundle for Ratchet. It is not a Laravel package, it has no service provider, no facade, no config/*.php publishable config, and no Composer extra.laravel block. It cannot be composer required into a Laravel application and expected to boot. The bundle is structured around Symfony2 primitives — AppKernel bundle registration, a DependencyInjection/*Extension that builds a TreeBuilder config tree, services.yml/XML wiring, and Symfony's EventDispatcher and Session components. Laravel supplies its own container, dispatcher, and session stack; none of the bundle's auto-wiring assumptions hold. Any integration is therefore a port, not an adoption, and should be scoped and costed as such.
Architecture fit. The underlying design is sound and worth studying: a long-running Ratchet IoServer process that boots a Symfony-ish container once, then dispatches connection open/close, topic subscribe/publish, and RPC calls through an event-driven router, with HTTP-side session sharing so WebSocket identities match web identities. That is architecturally close to what Laravel Reverb and laravel-websockets do today. The value here is as a reference implementation of the session-bridging and pub/sub routing pattern, not as a dependency.
Integration feasibility. Low-to-moderate as a fork; effectively zero as a drop-in. Composer will install it (it is on Packagist with an MIT license), but the first autoload of the bundle's extension class will fail or misbehave outside Symfony2's kernel. Realistic paths, in order of preference:
bootstrap/app.php-style container boot), rewrite the event dispatcher bindings to Illuminate\Contracts\Events\Dispatcher, and swap Symfony session access for Illuminate\Session backed by the same Redis store the web app uses. Estimate 2–4 engineer-weeks for a mid-level developer including tests, and that estimate is soft because there are no tests in the repo to tell you what "correct" looks like.Technical risk. High, and mostly not technical in nature:
composer.json cannot be patched without a fork.IoServer/ConnectionInterface.Key questions for the team:
Stack fit. Poor as-is, good conceptually. Laravel's first-party answer to this problem space is Reverb (Laravel 11+, Pusher protocol, Octane-aware, Horizon-adjacent tooling) with Soketi and beyondcode/laravel-websockets as viable alternates. All three give you a supervised long-running process, a channel authorization callback that maps cleanly onto Laravel's Gate/broadcasting auth, and an ecosystem of client libraries. ClankBundle gives you none of that alignment and predates all of it.
Migration path. Treat this as a strangler migration rather than an install:
IoServer + Ratchet\Wamp components are the direct ancestor of what the bundle wraps. If not, do not introduce Ratchet at all.Compatibility. Two hard blockers if anyone attempts direct reuse: the Symfony DependencyInjection extension will not compile under Laravel's container, and the session bridge assumes Symfony's SessionInterface and its storage handlers. Both are replaceable but must be replaced deliberately. PHP version constraints in the bundle's composer.json will also conflict with a modern Laravel require block and force --ignore-platform-reqs hacks — a smell that should stop the attempt rather than work around it.
Sequencing. Two weeks, gated:
Maintenance. A fork is a permanent liability with no upstream to rebase onto. Budget ongoing engineering time — realistically a fraction of an FTE — for dependency patching (Ratchet, ReactPHP event loop, and the PHP runtime), and accept that no upstream will ever ship a fix. Contrast with Reverb, where Laravel handles the event-loop and protocol churn. The maintenance delta alone likely exceeds the cost of rebuilding the two useful patterns from scratch.
Support. There is no support. No maintainer to escalate to, no issue tracker with signal, no commercial backing. Internal escalation runs to whoever wrote the fork, and if that person leaves, the code becomes archaeology. Any production incident debugs from source.
Scaling. The Ratchet model scales by adding processes behind a broker, with the constraint that all nodes share a pub/sub bus (Redis) and that channel membership lives in the broker, not process memory. The bundle's original design predates easy horizontal fan-out; expect to rebuild presence tracking and channel membership from scratch. Two specific ceilings: single-threaded event loop means one slow handler blocks all connections on that worker, and there is no built-in backpressure — a slow consumer becomes unbounded memory growth. Neither is a blocker, but both must be designed for rather than discovered.
Failure modes to plan for:
Ramp-up. Steep and undocumented. Expect 1–2 weeks before a competent Laravel developer is productive in the fork, mostly spent reading Ratchet's source because the bundle's README is the only guide and it is a decade stale. The Reverb alternative has official docs, a community, and a first-party tutorial path — measured in hours. Recommend that comparison be made explicitly in the decision memo, because it is the strongest single argument against this package and it is not a technical argument at all.
How can I help you explore Laravel packages today?