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

Clank Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  1. Discard as a dependency; reuse as design input. Rebuild the two things it does well (signed-token session handoff, topic fan-out via a broker) on top of Laravel Reverb or Soketi. Lowest total risk.
  2. Fork and port. Keep the Ratchet-based server, replace the Symfony2 DI/config layer with a Laravel bootstrap (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.
  3. Run it standalone as a sidecar. Leave it as an independent PHP process emitting/consuming messages on Redis or a queue, and have Laravel speak to it only through that broker. Avoids the container clash entirely; still inherits every maintenance problem below.

Technical risk. High, and mostly not technical in nature:

  • EOL foundation. Symfony 2.8 reached end of life in November 2019. PHP versions the bundle targets are themselves out of security support. Any transitive dependency pinned by its composer.json cannot be patched without a fork.
  • Unmaintained. Zero stars and zero dependents means no user base to surface bugs, no issue triage, no release cadence, and no security disclosure path. Last meaningful activity is roughly a decade old.
  • Bus factor 1, and that one has left. Onboarding requires reverse-engineering; there is no upgrade guide, no changelog of consequence, no CI.
  • Transitive surface. Ratchet itself is maintained (0.4.x), but the version this bundle constrained at authoring time is likely years behind. A fork means owning that upgrade too — including Ratchet's own breaking changes in IoServer/ConnectionInterface.
  • Licensing is the one clean signal. MIT is permissive; forking, relicensing internally, or lifting code into a proprietary service is legally uncomplicated. This is the single strongest argument for path 1 or 2 over "find an abandoned thing with a restrictive license."

Key questions for the team:

  1. What is the actual requirement — server-push notifications only, or bidirectional RPC with topic semantics? If it is push-only, Reverb/Pusher protocol covers it and this entire evaluation collapses to "no."
  2. Is there an existing Symfony2 app this bundle is already serving? If yes, this is a migration project with a known workload, not a greenfield evaluation.
  3. Who owns the fork, and is there a named maintainer with Ratchet experience?
  4. What is the session-auth requirement — do WebSocket connections need to resolve to the same authenticated user as HTTP, and is a short-lived signed token acceptable instead of shared session storage?
  5. What scale ceiling are we designing for (concurrent connections, messages/sec)?

Integration Approach

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:

  • Extract the two reusable ideas from the bundle: (a) the connection-handshake pattern where a browser authenticates over HTTP and passes a signed credential into the WebSocket upgrade request, and (b) the topic registry that maps a channel name to a set of connections for fan-out.
  • Implement both natively — the handshake as a signed, short-TTL token minted by a Laravel controller and validated by the socket server; the registry as Redis pub/sub keyed by channel, which is also what makes horizontal scaling possible later.
  • Choose the transport before writing code. If bidirectional RPC is genuinely required, Ratchet (via a thin custom server, not this bundle) is defensible because its 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:

  1. Days 1–2: requirements confirmation (push vs. RPC, scale, auth model). Kill the initiative here if push-only.
  2. Days 3–5: one-week spike building the handshake + channel auth + fan-out on Reverb in a branch. This is the actual competitive comparison, and it will be fast.
  3. Week 2: spike the same on a forked ClankBundle/Ratchet path only if the RPC requirement survives step 1. Compare on lines of code, test coverage achievable, and operational burden.
  4. Decision gate: default to the Reverb path unless the RPC spike shows a concrete capability gap. Document the fork decision and assign an owner if the fork wins.

Operational Impact

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:

  • Worker death with no supervision. Requires systemd/Supervisor with restart policy and alerting on restart rate. Deploy restarts drop every connection; clients must reconnect with jittered backoff or you get a thundering herd against your auth endpoint.
  • Memory leaks in long-lived PHP processes. Standard for this generation of tooling. Mitigate with max-request recycling per worker and RSS alerting.
  • Blocking I/O in handlers. A synchronous Eloquent or HTTP call inside a message handler stalls the whole worker. Enforce async or queue-based side effects, and lint for it in review.
  • Silent message loss. No dead-letter, no delivery guarantee. If messages matter, persist intent before publish and reconcile.
  • No observability. No metrics, health endpoint, or structured logging out of the box. Instrument from day one — connection count, message rate, handler latency, restart count.

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.

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
shitoudev/permissionmanager