spiral/roadrunner
RoadRunner is a high-performance PHP application server and process manager written in Go. It runs PHP apps as long-lived workers and supports plugin-based features like HTTP/2/3, HTTPS, and FastCGI with PSR-7/17 compatibility—an alternative to Nginx+FPM.
RoadRunner is an open-source (MIT licensed) high-performance PHP application server, process manager written in Go and powered with plugins ❤️. It supports running as a service with the ability to extend its functionality on a per-project basis with plugins.
RoadRunner features a range of plugins, including HTTP(S)/2/3 and fCGI servers that are compatible with PSR-7/PSR-17 standards. This is just one of its many capabilities. It serves as an effective alternative to the traditional Nginx+FPM setup, providing improved performance and more flexibility. Its extensive plugin options go far beyond just HTTP(S)/2/3 and fCGI servers, offering a broad range of functionalities:
gRPC, http, jaeger).gRPC server. For increased speed, the protobuf extension can be used.HTTP(S)/2/3 and fCGI servers features automatic TLS management, 103 Early Hints support and middleware like: Static, Headers, gzip, prometheus (metrics), send (x-sendfile), OTEL, proxy_ip_parser, etc.The easiest way to get the latest RoadRunner version is to use one of the pre-built release binaries, which are available for OSX, Linux, FreeBSD, and Windows. Instructions for using these binaries are on the GitHub releases page.
To get the roadrunner binary file you can use our docker image: ghcr.io/roadrunner-server/roadrunner:2025.X.X (more information about
image and tags can be found here).
FROM ghcr.io/roadrunner-server/roadrunner:2025.X.X AS roadrunner
FROM php:8.3-cli
COPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr
# USE THE RR
Configuration located in the .rr.yaml file (full sample):
You can also install RoadRunner automatically using the command shipped with the composer package, run:
composer require spiral/roadrunner-cli
./vendor/bin/rr get-binary
Server binary will be available at the root of your project.
Note
PHP's extensions
php-curlandphp-zipare required to download RoadRunner automatically. PHP's extensionsphp-socketsneed to be installed to run roadrunner. Check withphp --modulesyour installed extensions.
wget https://github.com/roadrunner-server/roadrunner/releases/download/v2025.X.X/roadrunner-2025.X.X-linux-amd64.deb
sudo dpkg -i roadrunner-2025.X.X-linux-amd64.deb
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/roadrunner-server/roadrunner/master/download-latest.sh | sh
brew install roadrunner
choco install roadrunner
Configuration can be located in .rr.yaml file (full sample):
version: '3'
rpc:
listen: tcp://127.0.0.1:6001
server:
command: "php worker.php"
http:
address: "0.0.0.0:8080"
logs:
level: error
Read more in Documentation.
<?php
use Spiral\RoadRunner;
use Nyholm\Psr7;
include "vendor/autoload.php";
$worker = RoadRunner\Worker::create();
$psrFactory = new Psr7\Factory\Psr17Factory();
$worker = new RoadRunner\Http\PSR7Worker($worker, $psrFactory, $psrFactory, $psrFactory);
while ($req = $worker->waitRequest()) {
try {
$rsp = new Psr7\Response();
$rsp->getBody()->write('Hello world!');
$worker->respond($rsp);
} catch (\Throwable $e) {
$worker->getWorker()->error((string)$e);
}
}
[!IMPORTANT] If you see the
EOFerror, check that you have installed the PHP packages from this step. If this does not help, try to execute the commandphp worker.phpdirectly and check the output.
To run application server:
$ ./rr serve -c .rr.yaml
The MIT License (MIT). Please see LICENSE for more information. Maintained
by Spiral Scout.
Thanks to all the people who already contributed!
How can I help you explore Laravel packages today?