Pre-built PHP binaries and Docker images with native async/coroutine support via the TrueAsync extension.
docker pull trueasync/php-true-async:8.6
docker run --rm trueasync/php-true-async:8.6 php -vEach image includes both php (CLI) and php-fpm.
Available tags:
| Tag | Base | Description |
|---|---|---|
8.6 |
Ubuntu 24.04 | Full image with cli + fpm |
8.6-alpine |
Alpine 3.20 | Lightweight image with cli + fpm |
8.6-frankenphp |
Ubuntu 24.04 | FrankenPHP — Caddy + async PHP worker |
latest |
Ubuntu 24.04 | Alias for 8.6 |
latest-frankenphp |
Ubuntu 24.04 | Alias for 8.6-frankenphp |
FrankenPHP is a Go-based PHP app server built on top of Caddy. The TrueAsync variant runs PHP as a persistent async worker — one PHP script stays loaded and handles requests as coroutines via the TrueAsync event loop.
docker pull trueasync/php-true-async:latest-frankenphp
docker run --rm -p 8080:8080 trueasync/php-true-async:latest-frankenphpThen open http://localhost:8080 — the bundled demo page shows live runtime stats (PHP version, active coroutines, memory).
To use your own entrypoint:
docker run --rm -p 8080:8080 \
-v ./my-app:/app \
-v ./Caddyfile:/etc/caddy/Caddyfile \
trueasync/php-true-async:latest-frankenphpExample Caddyfile with async worker:
{
admin off
frankenphp {}
}
:8080 {
root * /app
php_server {
index off
file_server off
worker {
file /app/entrypoint.php
num 1
async
buffer_size 20
match /*
}
}
}
Example entrypoint.php:
<?php
use FrankenPHP\HttpServer;
use FrankenPHP\Request;
use FrankenPHP\Response;
set_time_limit(0);
HttpServer::onRequest(function (Request $request, Response $response): void {
$response->setStatus(200);
$response->setHeader('Content-Type', 'text/plain');
$response->write('Hello from TrueAsync!');
$response->end();
});curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-linux.sh | bashAn interactive wizard will guide you through the build configuration: extensions, FrankenPHP, debug mode, install path, and PATH setup.
For non-interactive use (CI/scripts):
# Standard build
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-linux.sh | \
NO_INTERACTIVE=true EXTENSIONS=all SET_DEFAULT=true bash
# With FrankenPHP
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-linux.sh | \
NO_INTERACTIVE=true EXTENSIONS=all BUILD_FRANKENPHP=true SET_DEFAULT=true bashSupported distros: Ubuntu, Debian (apt-based).
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-macos.sh | bashRequires Homebrew. Supports both Apple Silicon (ARM) and Intel Macs.
For non-interactive use:
# Standard build
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-macos.sh | \
NO_INTERACTIVE=true EXTENSIONS=all SET_DEFAULT=true bash
# With FrankenPHP
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-macos.sh | \
NO_INTERACTIVE=true EXTENSIONS=all BUILD_FRANKENPHP=true SET_DEFAULT=true bashQuick install (PowerShell):
irm https://raw.githubusercontent.com/true-async/releases/master/installer/install.ps1 | iexManual install:
- Go to Releases
- Download the archive:
- Release — for general use
- Debug — for PHP/extension development (includes debug symbols and assertions)
- Verify the SHA256 checksum from
sha256sums.txt - Extract to your preferred location
- Add the directory to your PATH
The build-from-source scripts (build-linux.sh, build-macos.sh) support these options:
| Option | Env Variable | Default | Description |
|---|---|---|---|
--prefix DIR |
INSTALL_DIR |
$HOME/.php-trueasync |
Installation directory |
--set-default |
SET_DEFAULT=true |
false |
Add to PATH as default php |
--debug |
DEBUG_BUILD=true |
false |
Build with debug symbols |
--extensions PRESET |
EXTENSIONS |
standard |
Extension preset: standard, xdebug, all (see below) |
--no-xdebug |
NO_XDEBUG=true |
false |
Exclude Xdebug from build |
--frankenphp |
BUILD_FRANKENPHP=true |
false |
Build FrankenPHP binary (Caddy-based async server) |
--no-latest-curl |
BUILD_LATEST_CURL=false |
true |
Skip building libcurl 8.12.0 (async uploads fallback) |
--jobs N |
BUILD_JOBS |
auto | Parallel make jobs |
--branch NAME |
PHP_BRANCH |
from config | Override php-src branch |
--no-interactive |
NO_INTERACTIVE=true |
false |
Skip interactive wizard |
Extension presets (--extensions):
| Preset | Xdebug | Description |
|---|---|---|
standard |
No | async + core PHP extensions |
xdebug |
Yes | standard + Xdebug debugger |
all |
Yes | everything (same as xdebug) |
FrankenPHP is opt-in via --frankenphp / BUILD_FRANKENPHP=true regardless of the preset. Requires Go 1.26+ (installed automatically if not found).
By default, the installer builds libcurl 8.12.0 from source. This is required for fully async file uploads — libcurl >= 8.11.1 fixes PAUSE/unpause bugs (curl#15627) that caused intermittent timeouts. Use --no-latest-curl to skip this and use the system libcurl (async uploads will fall back to synchronous reads).
TrueAsync PHP is not added to PATH by default to avoid conflicts with your system PHP. Use --set-default to make it the default php.
After installation, use the php-trueasync command:
php-trueasync rebuild # Rebuild from latest source
php-trueasync version # Show installed version
php-trueasync uninstall # Remove TrueAsync PHPphp -v
php -m | grep async| Extension | Description |
|---|---|
| async | TrueAsync coroutine engine with libuv reactor |
| xdebug | Debugger and profiler (optional) |
Standard PHP extensions: curl, mbstring, openssl, pdo, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, sockets, and more.
| Platform | Method | Variants | Status |
|---|---|---|---|
| Linux | Docker | Ubuntu 24.04, Alpine 3.20, FrankenPHP | ✅ |
| Linux | Build from source | Ubuntu/Debian (apt) | ✅ |
| macOS | Build from source | ARM + Intel (Homebrew) | ✅ |
| Windows | Pre-built binaries | Release, Debug (x64) | ✅ |
Build parameters are defined in build-config.json:
- PHP source repository and branch
- Extensions to include
- Configure flags per platform
- Docker Hub — Docker images
- TrueAsync PHP Source — PHP fork with async API
- TrueAsync Extension — libuv-based async implementation
- TrueAsync Xdebug — Xdebug with async support
- TrueAsync FrankenPHP — FrankenPHP fork with async worker support
MIT