roadrunner-php/centrifugo
PHP bridge for the RoadRunner Centrifugo plugin that proxies Centrifugo client events like connect, refresh, subscribe, and RPC calls to your Laravel/PHP app for custom authentication, session renewal, and real-time request handling.
What changed in 2.5.0
| Change | Type | TPM read |
|---|---|---|
Package renamed roadrunner-php/centrifugo → roadrunner/centrifugo |
Distribution-level breaking change | Every composer.json reference, lockfile, SBOM, and internal doc that names the old vendor path must change. Namespace/autoload changes are the open question. |
| RoadRunner v3 support | Major runtime-version alignment | The package is a RoadRunner plugin; its version is only meaningful relative to the RoadRunner binary and the RoadRunner PHP worker SDK. This couples our PHP dependency upgrade to an infrastructure upgrade. |
Architecture fit. The package occupies a narrow but load-bearing seam: PHP workers (RoadRunner) publish to Centrifugo over its HTTP/gRPC API via a RoadRunner plugin. It is not a general-purpose Centrifugo client — it only works inside a RoadRunner worker. That means the package version is effectively pinned to the RoadRunner major version, and any evaluation must treat the two as a single upgrade unit. There is no meaningful "just bump the library" path here.
Integration feasibility. Moderate. The code surface we touch is small (service config in .rr.yaml, one or two publisher call sites, a DI binding), but the blast radius is the whole request lifecycle because it rides on the application server. Two independent migrations are bundled into one release: a Composer identity change and a runtime major-version change. They should be evaluated and, where possible, executed separately.
Technical risk. High, concentrated in three places:
replace directive, retained PSR-4 namespace) or a hard fork of the vendor path determines whether the change is a one-line composer.json edit or a codebase-wide use statement sweep. The release notes do not say. This is the single highest-value unknown.Key questions for the maintainers
replace/provide for the old package name, and is the PHP namespace changed or aliased?.rr.yaml deltas and DI/service-provider registration?roadrunner/*?Stack fit. This package is correct for our architecture if we are committed to RoadRunner as the application server for the services that publish to Centrifugo. It is not a fit for queue-worker or CLI contexts outside RoadRunner, and it should not be reused as a generic Centrifugo client elsewhere — a plain HTTP client is the right tool there. Confirm which services actually use it before scoping; the true footprint is usually smaller than the dependency graph suggests.
Migration path — two tracks, deliberately decoupled.
Track A: identity change (low risk, do first).
composer.json across services, composer.lock, Dockerfiles, SBOM/vulnerability-scanning allowlists, internal runbooks, and any private package that depends on it transitively.use statement rewrite.Track B: RoadRunner v3 (high risk, gated).
.rr.yaml between v2 and v3 for the Centrifugo plugin section and for server/rpc/log keys, and diff health/metrics endpoints.Compatibility. Treat the PHP package, the RoadRunner binary, the RoadRunner PHP worker SDK, and the Centrifugo server as a four-way compatibility matrix. Pin all four explicitly in the service template and record the tested tuple. Do not allow floating ranges (^2.5) on any of them.
Sequencing.
If the answer to "does 2.5.0 support RR v2" is no, invert: freeze on 2.4.x, start Track B immediately, and treat the rename as a rider on the runtime upgrade rather than a separate step.
Maintenance. Two ongoing obligations instead of one. The rename means we now track a new Packagist identity, which resets our vulnerability-alerting history and dependency-bot baselines until the new package is registered in our tooling. Expect a short window where CVE alerts for this dependency silently stop firing — close that gap deliberately. If 2.4.x is maintained as a legacy branch under the old name, we inherit a second line to watch.
Support. The maintainer is the RoadRunner organisation, and the release cadence tracks RoadRunner releases rather than Centrifugo's. Support risk is therefore concentrated on RoadRunner's release discipline, not on this package's own code. Establish a documented policy: we support the RR major version we run, and we do not carry our own patches. If 2.4.x has no security-backport commitment, that policy forces the RR v3 upgrade onto a schedule rather than leaving it open-ended.
Scaling. No direct scaling change — throughput is governed by Centrifugo and by RoadRunner worker pool sizing. Two indirect effects to watch: (a) RoadRunner v3 may change worker pool defaults and idle/restart behaviour, which shows up as capacity shifts after deploy without any config change on our side; (b) if the publish path becomes goroutine/protocol-version sensitive, per-worker publish throughput may move at the tail rather than the median. Benchmark at target concurrency during the spike, not just smoke-test.
Failure modes.
| Failure | Signature | Detection | Mitigation |
|---|---|---|---|
| Autoload/namespace mismatch after rename | Fatal on boot, worker refuses to start | Deploy fails fast | Canary first; keep 2.4.x pinned and re-deployable |
| RR v3 config schema mismatch | Crash-loop or plugin registered but disabled | Container restart count, rr startup logs |
Config diff review; validate in staging with production-shaped .rr.yaml |
| Silent publish regression | Messages not delivered, no exception raised | Only end-to-end publish→subscribe assertion catches this | Add a synthetic publish/subscribe probe to monitoring before rollout |
| Health-endpoint path change | Orchestrator marks healthy pods unhealthy (or vice versa) | Readiness flapping, traffic to not-ready pods | Verify health/readiness paths against v3 docs before cutover |
| Version skew across services | Some services on 2.4.x/RR v2, others on 2.5.x/RR v3 | Unpredictable, per-route | Enforce the pinned tuple in the service template; no partial fleet upgrades |
| Supply-chain alerting gap post-rename | No CVE alerts for weeks | Only by audit | Register new package in scanning tooling as part of Track A |
Ramp-up. Low for engineers who already work with RoadRunner — the API is small and the migration is mostly configuration. Non-trivial for everyone else: the failure modes here are runtime-level and invisible in application code, so on-call needs the rollback procedure and the synthetic-probe dashboard, not just the changelog. Budget roughly a day of team education plus a written runbook covering the pinning policy, the four-way compatibility tuple, and the rollback path. Treat the "silent publish regression" case as the primary training scenario — it is the one that reaches production without an alert unless we instrument for it.
How can I help you explore Laravel packages today?