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

Pusher Bundle Laravel Package

laupifrpar/pusher-bundle

Pusher Bundle integrates Pusher real-time messaging with Laravel, offering configuration and helpers to publish events and subscribe clients to WebSocket channels. It simplifies adding live updates and notifications to PHP applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What changed. Release 6.1.0 adds end-to-end encryption (E2EE) support. That is the first functional change since the prior assessment, which recorded the last release as June 2022 and characterised it as a likely metadata refresh. A feature release materially revises one prior data point — but only one.

The new release contradicts the prior framing and forces re-verification. The earlier evaluation concluded this was a Symfony 2 bundle pinned to symfony/symfony ~2.x. A 6.1.0 version number is not consistent with a Symfony2-era artifact: Symfony 2.8 reached EOL in November 2018, and no maintainer ships a 6.x semver line for a package frozen on that contract. Two readings are possible, and they lead to opposite conclusions:

  • Reading A — the package has been modernised. The 6.x line targets contemporary Symfony, the Symfony2 framing in the current assessment is stale (possibly inferred from an older tag or from the *Bundle naming convention), and the central "Composer-level blocker" finding is wrong and must be retracted. The package would then be a candidate — still redundant, but not disqualified.
  • Reading B — the version number is not a compatibility signal. The package retains the Symfony2 bundle contract and the 6.1.0 tag reflects an internal or unrelated versioning scheme. The blocker stands unchanged.

The prior assessment gave a firm, high-confidence disqualification. That confidence was not matched by evidence in this release. This must be resolved before the roadmap item is closed, because acting on a stale disqualification is as costly as adopting a dead package.

Architecture fit — unchanged in the Laravel target, regardless of which reading is true. Even in Reading A, this remains a Symfony bundle: an *Bundle class, a DependencyInjection/*Extension.php, and service definitions in Resources/config/*.xml|yml, registered via AppKernel::registerBundles(). Laravel has no bundle registry, no bundle extension lifecycle, and no loader for that service-config format. Modernising the Symfony constraint does not create a Laravel integration surface. The useful code remains a thin wrapper over the Pusher PHP SDK, coupled to Symfony's DI container and event dispatcher.

E2EE does not create a capability gap. Pusher Channels E2EE is driven by channel naming (private-encrypted-*) and a client-held master key. Laravel's first-party broadcaster already permits arbitrary channel names and already delegates to pusher/pusher-php-server, which is maintained alongside the service. There is no E2EE capability that this bundle provides and the SDK path does not. The release therefore does not change the buy-vs-build calculus — the replacement remains 100% feature-equivalent, including 6.1.0's headline addition.

Technical risk — downgraded from "high across the board" to "high, with one open unknown."

  • EOL upstream (status: unverified, pending Reading A/B). If Reading B holds, unchanged. If Reading A holds, this risk largely evaporates and must be requalified against the real Symfony version in composer.json.
  • Maintenance signal (revised). A feature release in 2025+ is a live-maintainer signal, not a tag refresh. The prior "abandoned artifact" characterisation is no longer supportable on the evidence. The 65 stars / 0 dependents / single maintainer facts stand and remain disqualifying on their own.
  • Redundancy (unchanged, now decisive). This is the load-bearing finding. Laravel ships BroadcastManager + PusherBroadcaster consuming pusher/pusher-php-server directly. Any release of a redundant wrapper — E2EE or otherwise — adds no capability to the target stack.
  • Score 1.705 / opportunity 35.56. Treat as unchanged; a single feature release does not move a composite score materially.

Key questions for the requester (revised, ordered by blocking severity):

  1. Resolve the version contradiction. Pull the actual composer.json from the 6.1.0 tag. What Symfony constraint does it declare? This single artifact settles Reading A vs. B and determines whether the prior assessment's headline finding survives.
  2. Is the requirement E2EE specifically? E2EE is a client- and channel-contract concern, not a server-integration concern. Confirm whether the ask is encrypted channel transport (solved by Laravel + Echo with private-encrypted- channels) or something the bundle uniquely enables. Prior evidence suggests the latter does not exist.
  3. Was E2EE the actual driver for re-evaluating this package? If a stakeholder surfaced the release and asked "should we adopt it," the correct response is the SDK path with encrypted channel naming — not a bundle evaluation.
  4. Is there a legacy Symfony application in the estate, and if so, what Symfony version does it run? This determines whether the 6.x line is even installable there.
  5. What is the Pusher master key custody plan? Unchanged from before, but now urgent if E2EE is genuinely in scope — see Operational Impact.

Integration Approach

Stack fit: still do not integrate into Laravel. The recommendation survives the release on redundancy grounds alone, independent of the Symfony2 question. The correct path remains pusher/pusher-php-server (current major) plus Laravel's built-in broadcasting.

E2EE-specific additions to the SDK path. 6.1.0's feature maps cleanly onto first-party Laravel primitives:

  • Channel naming: use the private-encrypted- prefix on the channel name in the broadcast event. Laravel's broadcaster does not sanitise channel names, so this requires no package support.
  • Authorization: routes/channels.php must authorize private-encrypted- channels. The server authorizes access; it must never receive, log, or transmit the master key. Keep the key exclusively in client configuration.
  • Do not put the master key in .env server-side. This is the most likely implementation error: engineers instinctively centralise secrets. Server-side custody of the key defeats the entire purpose of E2EE.
  • Payload constraint: encrypted channels do not support exclusion — broadcast(...)->toOthers() is not available on encrypted channels. Confirm this is acceptable against the requirement; it is a genuine functional trade-off, not a package gap, and the bundle does not lift it.
  • Client: Echo + Pusher JS with encrypted: true and the master key supplied by the client.

If Reading A is confirmed (modern Symfony), a Symfony-side path exists — but it is not a Laravel integration and should not be conflated with one. Migration would be: composer-require the 6.x line in the Symfony app, register the bundle, move Pusher config into bundle config, and verify encrypted channel auth. This is a viable but separate track that only applies if a Symfony application is genuinely in scope (question 4).

If Reading B is confirmed (Symfony2 retained), the prior migration path stands unchanged: extract the usage surface, construct Pusher\Pusher directly in an application-owned service, deregister from AppKernel, move credentials to the secret manager, and verify private/presence signing.

Compatibility — the honest position is "unverified." The prior assessment asserted no version is compatible with any supported Laravel and that forward compatibility is unlikely. The first half is architecturally true (Laravel does not load bundles) and survives. The second half — the Composer constraint claim — is now unverified and should be marked as such until question 1 is answered. Partial compatibility with Symfony 2.x is confirmed only under Reading B.

Sequencing (revised).

  1. Inspect the 6.1.0 composer.json. Blocking gate. Cheap, decisive, resolves the contradiction. Do this before any further roadmap discussion.
  2. Confirm the requirement type (trigger vs. auth vs. E2EE transport vs. client UI).
  3. If Laravel: spike the SDK path in a branch — one event, one private-encrypted- channel, one auth endpoint, one Echo client. Verify the toOthers limitation is acceptable.
  4. If a Symfony app exists: evaluate the 6.x line as a separate decision with its own risk review.
  5. Decommission any residual bundle dependency; add a CI check that fails on unexpected Symfony constraints appearing in composer.lock.
  6. Document Pusher credentials in the secret manager; document the master key as client-only with an explicit handling note.

Operational Impact

Maintenance. The maintenance picture improves modestly — a feature release proves the maintainer is active. It does not change the structural problem: adopting this bundle means owning a fork in a Laravel context, because there is no integration surface to maintain against. In a Symfony context (Reading A) the load is lower but still single-maintainer, with one person absorbing PHP drift, Pusher API changes, and TLS handling. pusher/pusher-php-server remains maintained by Pusher and versioned alongside the service.

Support. Unchanged. No vendor support. 65 stars and one maintainer means best-effort issue response. The 6.1.0 release slightly improves the odds of a timely fix; it does not create a support contract.

E2EE introduces a new operational surface that the prior assessment never had to consider. This is the most consequential part of the release for operations, and it is a service-architecture concern, not a package concern:

  • Master key custody and rotation. The key must live client-side. Rotation invalidates history on old keys; there is no recovery if the key is lost. Establish a documented rotation and escrow procedure before enabling E2EE, not after.
  • Debugging becomes materially harder. Encrypted payloads are opaque to server logs, APM traces, and error reporting. Incident triage now requires client-side instrumentation. Budget for this explicitly — it is routinely underestimated.
  • Client-side rollout risk. E2EE requires coordinated client deployment. Mixed-version clients on encrypted channels fail at subscribe time. Feature-flag the channel name and dual-run unencrypted and encrypted channels during rollout.
  • Compliance framing. E2EE is often adopted for compliance reasons. Confirm the requirement is genuinely met when the server cannot read payloads — some compliance regimes require server-side retention or inspection, which E2EE makes impossible by design.

Scaling. Unchanged. Pusher's managed service absorbs connection and fan-out volume. The ceiling remains operational — a narrow configuration surface means tuning (timeouts, retries, cluster selection, pooling) may require patching vendor code. E2EE adds per-message encryption cost on the client, not the server, so server throughput characteristics are unaffected.

Failure modes to expect (revised).

  • E2EE enabled server-side by mistake — master key in .env or config; encryption is silently defeated while appearing enabled. Highest-severity new failure mode.
  • toOthers() used on an encrypted channel — broadcast throws or silently misdelivers. Easy to introduce during migration.
  • Mixed-version client rollout — 403s on subscribe with no server-side error signal.
  • Silent event drop — no retry or structured error surfacing on trigger failures.
  • Channel auth mismatch — signing diverges from SDK expectations; 403s with no server-side trace.
  • Composer conflict — routine composer update fails, or a loosened transitive constraint installs the bundle where it cannot run. Severity now conditional on Reading A/B.
  • PHP runtime drift — deprecated pattern removed; failure at boot rather than request time.
  • Credential sprawl — Symfony-era conventions favour parameters.yml, encouraging secrets in version control. This risk now extends to the master key, which is strictly worse.

Ramp-up. Effectively zero for the bundle — there is nothing worth learning. The SDK path remains ~30 minutes in Laravel. E2EE adds real work that must be scoped separately: client-side integration, key custody and rotation design, encrypted-channel auth, and incident-tooling adjustment. Estimate 2–4 engineer-days for E2EE end-to-end via the SDK path (client, auth, key management, observability), against indeterminate effort to make the bundle work in a stack that cannot load it.

Bottom line for the roadmap. The recommendation is not reversed, but the reasoning must be corrected. Redundancy — not EOL — is now the load-bearing argument, and it survives regardless of Reading A or B. Two actions: (1) spend two hours reading the 6.1.0 composer.json to retire the stale Symfony2 finding and stop the team from repeating a claim the evidence no longer supports; (2) scope E2EE as an SDK-path workstream against the requirement directly, since the bundle offers nothing there that Laravel does not already have. Do not allocate adoption capacity to this package; do allocate a small discovery task to retire any live Symfony2-era Pusher integration still in the estate.

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.
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
equipc/laravel-email-database-log
adedsec/nova-translated-labels