roadrunner/http
RoadRunner HTTP worker for PHP: serve PSR-7/PSR-15 requests in long-running RoadRunner workers, with request/response bridging, middleware support, and fast, production-ready HTTP handling for Laravel and other PHP apps.
roadrunner/http is a thin contract layer, not a framework. It implements the PSR-7 worker side of RoadRunner's request/response protocol: the Go server hands the worker a serialized request, the package hydrates a ServerRequestInterface, and it serializes the PSR-7 response back over Goridge. Its architectural value is that it lets any PSR-7-compliant PHP application (Slim, Mezzio/Laminas, custom PSR-15 middleware stacks, Nyholm/Diactoros/Laminas-based apps) run under RoadRunner with zero framework lock-in. It does not provide routing, DI, or middleware — those remain the app's responsibility. For Laravel or Symfony shops, this is the wrong layer: Octane and the Symfony Runtime component already wrap RoadRunner and you would bypass them at your peril..rr.yaml; the package surface is small and the PSR-7 interfaces are frozen standards. The real integration cost is not this package — it is standing up the RoadRunner binary, worker lifecycle configuration, and a supervisor (systemd, Kubernetes, or the RR CLI). Any team already running PSR-7 middleware can be productive in days.roadrunner-php org — roadrunner-worker, roadrunner-grpc, etc. — each individually modest), so treat those metrics as a data-quality signal rather than a demand signal. Mitigate by verifying Packagist download counts and the org's activity, not GitHub stars. The Last release: 2026-10-19 value is anomalous (future-dated) and should be reconciled before you put it in a dependency register.rr binary vs. the PHP client — do we track major versions together?.rr.yaml, one endpoint, run locally against the same code.psr/http-message version, Goridge protocol version, RoadRunner binary version, PHP minor version. PSR-7 implementations are interchangeable, so the swap cost of Diactoros → Nyholm is low; the swap cost of an RR major version is not. Treat the binary and the client as a coupled pair in composer.json/image tags..rr.yaml (week 1–2) → worker bootstrap and config committed to the repo (week 2) → load test against the FPM baseline (week 3) → staging soak with fault injection (week 3–4) → canary → full cutover or abandon. Build the abandon decision into the plan at the load-test gate.composer.lock. MIT license removes legal friction.num_workers, not by tuning PHP-FPM pm.max_children. This is mechanically simple on Kubernetes but requires that the application hold no per-request state in memory between requests. Memory is the recurring operational cost: long-lived workers accumulate leaks, so max_jobs/recycle policies and RSS-based restart thresholds must be configured deliberately, not left at defaults..rr.yaml; without it, a single stuck worker degrades the pool.How can I help you explore Laravel packages today?