roadrunner/worker
Core PHP worker package for RoadRunner that provides the Worker API, payload handling, and stdin/stdout communication with the RoadRunner server. Use it to build custom long-running workers and integrate them with RoadRunner's high-performance Go runtime.
spiral/roadrunner-http, spiral/roadrunner-laravel, etc.). A PM reading this as a "framework" will over-scope. Correct framing: it is ~1 of 5 packages you actually adopt; it is the piece that makes the others possible.spiral/roadrunner-worker → roadrunner/worker) also signals the ecosystem consolidating under the roadrunner org — good for longevity, but it means the old package name is on a path to abandonment, so "stay on the old name" is not a stable holding position for security-patch purposes.composer.json constraint change plus lockfile churn, not a code rewrite; namespace stays Spiral\RoadRunner. For direct consumers this is an afternoon. For transitive consumers it is a dependency-resolution check, not a project. Budget accordingly — do not let it get scoped as an initiative.Metric caveat for the decision record: 22 stars and 0 dependents understate it badly. It is consumed transitively through the spiral/roadrunner-* family and framework integrations, not directly by applications. Before citing adoption in any decision doc, pull Packagist download numbers for the parent packages — the GitHub signals here measure nothing useful. The same applies to the rename: early download counts on roadrunner/worker will look tiny and mean nothing; the signal is whether the framework integrations repoint their constraints.
Adopt (usually transitively, occasionally directly) when all of these hold:
Look elsewhere when:
laravel/octane or spiral/roadrunner-laravel. Touching this package directly is a smell, and it adds a maintenance surface for zero product value.To executives: This is not a feature — it is plumbing that comes free with a runtime choice. The decision on the table is adopting RoadRunner, and this package is the small, MIT-licensed component that lets our PHP code talk to it. No new vendor, no license cost, no lock-in: the API surface is small enough to replace, and the recent rename is a packaging change, not a re-platforming event. The upside is measurable — removing per-request bootstrap improves latency and reduces CPU per request; the cost is operational discipline around long-running processes, which we either already have or must fund. The one new ask is a PHP 8.2 floor, which is a prerequisite rather than a trade-off.
To engineering: Treat this as an internal dependency, not a library to design around. Consume it through the framework integration; extend the base worker only for worker types the framework doesn't cover. In 3.8.0 the package moved to roadrunner/worker and now requires PHP 8.2 — update your composer constraint, verify the sibling spiral/roadrunner-* packages have repointed to the new name before dropping the old one, and don't be surprised by the #[\Override] annotations if you subclass (they'll fail loudly on a bad signature, which is the point). Pin the version, keep the surface area minimal, and write one integration test that proves shutdown and error paths behave under the supervisor. If we extend it, that code is ours to maintain — budget for it explicitly.
Recommendation: Adopt as a transitive dependency alongside the RoadRunner decision; do not adopt as a standalone initiative. Action the 3.8.0 upgrade as routine maintenance (constraint rename + PHP 8.2 floor), tracking it as a dependency-currency task, not a project. Re-evaluate the strategic position only if we commit to a custom worker type, at which point scope it as a small, time-boxed engineering spike with a documented fallback.
How can I help you explore Laravel packages today?