spiral/roadrunner-bridge
Integrates RoadRunner with the Spiral Framework, adding bootloaders for HTTP, queues, KV cache, gRPC, Centrifugo, TCP, metrics, logging, locks, and scaffolding. Requires PHP 8.1+ and Spiral Framework 3.14+.
Architecture fit: Unchanged at the architectural level. The v4.0.0 release does not alter the core premise — RoadRunner's Go server fronting persistent PHP workers, with the bridge supplying Laravel-compatible bootstrapping in place of the per-request public/index.php lifecycle. The state-management caveats (long-lived workers, static caches, connection reuse) remain the dominant design consideration. What the release does change is the surface area of the bridge itself: logging and worker-lifecycle plumbing are the primary interfaces a TPM will touch during integration, and both moved in this release.
Integration feasibility: Still feasible via Composer plus RoadRunner binary and YAML config, but v4.0.0 raises the integration cost in two specific places:
bubble and log-level semantics adjusted, log output normalized, and slash/Unicode escaping removed. Existing logging.php / RoadRunner YAML handler configs should be assumed non-portable until verified.EXIT command handling — directly relevant to the worker lifecycle concerns flagged in the prior assessment, since clean worker exit is a prerequisite for predictable state teardown.Technical risk: Risk is raised to high, driven by the major-version semantics rather than by any single fix:
@internal, meaning SemVer explicitly no longer protects them. Any code extending, decorating, or type-hinting those implementations is now on an unsupported path and can break in minor releases going forward.Key questions:
@internal and which deprecated APIs were removed?bubble / log-level rework change the format of emitted log lines, or only routing and escaping? This determines whether log-based alerting needs re-tuning.Stack fit: Neutral-to-positive. The release hardens observability and shutdown behavior — exactly the two areas that most often sink persistent-worker migrations in production. Nothing in v4.0.0 argues against the RoadRunner approach; several things argue for waiting until the internal/deprecation changes are characterized.
Migration path: Treat this as a re-baseline, not an upgrade. Because implementations are now internal and deprecations are gone, downgrade-and-retry is not a safe rollback strategy. Recommended path:
Compatibility: Pin ^4.0 explicitly; do not allow >=3.6 ranges that could straddle the internal/deprecation boundary. Expect to pin exact minor versions once internal classes are in use adjacent to your code, since SemVer no longer covers those paths. Framework-version compatibility remains unverified — confirm before committing.
Sequencing: (1) Audit deprecated/internal usage → (2) validate logger output format in staging against existing alert rules → (3) verify interceptor argument changes → (4) confirm graceful shutdown under load → (5) cut over. Steps 2 and 4 are the gating items; they carry operational risk disproportionate to their code diff.
Maintenance: The @internal designation shifts a real maintenance burden onto your team. Anything extending bridge implementations becomes effectively vendored — you own it, and RoadRunner's maintainers may change it without notice. Budget for periodic diff reviews of the bridge source before each minor bump, not just each major. Upside: an active maintainer group and a first-time-contributor pipeline suggest the package is being invested in rather than coasting.
Support: Improved versus the prior assessment. Named contributors with linked PRs and a full changelog diff is a materially better support posture than the previously noted "unknown" repository state. Still no evidence of an SLA, LTS policy, or security disclosure process — for a component sitting in the request path of every HTTP call, that gap should be documented as an accepted risk rather than assumed away.
Scaling: No change to the scaling model; persistent workers still deliver the bootstrap-overhead win for high-throughput APIs. The EXIT command fix modestly improves scaling behavior by making worker recycling and graceful shutdown more reliable — relevant under autoscaling and rolling deploys, where a worker that fails to exit cleanly becomes a stuck pod or a dropped in-flight request.
Failure modes: The risk profile is now more legible and, in places, more benign:
Ramp-up: Slightly steeper than the prior assessment suggested. Engineers must learn not just the persistent-worker mental model but also a discipline of checking whether a bridge class is @internal before building on it. The logging rework adds a small but non-zero learning cost around bubble/log-level semantics that most teams will not have encountered before. Mitigate with a short internal note on the internal-API policy and the log-format contract, and treat both as review checklist items.
How can I help you explore Laravel packages today?