Elyra
Elyra The coding agent e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Conductor Local project conductor Elyra SQL Anywhere Replication-ready SQL engine
Release notes
Changelog
Elyra
Askr documentation

Askr documentation

Askr is a standalone, memory-safe PHP application server written in Rust. It embeds the PHP interpreter in-process (no FastCGI, no FPM), serves it from a memory-safe hot path, and — in worker mode — boots your app once and serves many requests against it, eliminating per-request framework bootstrap.

Version 0.2.1. Production target is Linux; development also works on macOS.

Start here

Guide What it covers
Architecture How Askr works: embedding, non-ZTS process-per-core, the worker loop, request lifecycle, TLS, recycling, reload, the admin plane.
Building Building libphp (macOS & Ubuntu) and the askr binary; the extension matrix.
Configuration The askr.toml reference, CLI flags, and environment variables.
CLI reference Every command and flag (serve, doctor, config-check).
Worker mode Boot-once-serve-many, the Laravel worker script, per-request state reset, writing your own worker.
CoW template Boot once, fork workers (copy-on-write) — ~ms warm respawn + shared memory (experimental).
Shared cache In-binary cache, atomic counters and rate limiting (no Redis); the Laravel driver.
Broadcasting Live updates to browsers via SSE + askr_broadcast() (no Reverb/Pusher).
Admin dashboard The built-in status/reload/metrics API and web dashboard.
Deployment Production: systemd, TLS, zero-downtime reload, recycling, scaling, hardening.
Ubuntu setup Recommended production install on Ubuntu (release tarball, systemd, TLS, tuning).

60-second tour

Install a self-contained release (Linux x86_64 / arm64) and serve a Laravel app:

VER=v0.2.1; ARCH=$(uname -m)
curl -fsSLO https://github.com/kwhorne/askr/releases/download/$VER/askr-${VER#v}-linux-$ARCH.tar.gz
tar xzf askr-${VER#v}-linux-$ARCH.tar.gz && cd askr-${VER#v}-linux-$ARCH

./askr-run.sh doctor
ASKR_APP_BASE=/var/www/app ./askr-run.sh serve \
  --root /var/www/app/public \
  --worker-script examples/laravel-worker.php \
  --workers "$(nproc)" --tls-self-signed --admin 127.0.0.1:9000

Production setup (systemd, TLS, hardening): Ubuntu setup. Building from source: Building.

What works today (0.2.1)

  • Embedded PHP (non-ZTS) running real Laravel 12, ~9× the per-request/FPM model
  • Multi-core via one worker process per core on a shared listen socket
  • Worker mode (Octane-style) with per-request state reset — no bleed
  • --paranoid state-bleed detector — is your app worker-safe?
  • CoW template (--cow) — boot once, fork workers for ~ms warm respawn (experimental)
  • Queue workers + scheduler in the same binary (no Horizon/cron)
  • Shared cache (askr_cache_* + Laravel driver) — cache/counters/rate limiting, no Redis
  • Broadcasting — live updates via SSE + askr_broadcast(), no Reverb/Pusher
  • Graceful recycling + auto-respawn + crash resilience
  • TLS (rustls) + HTTP/2; --tls-self-signed for dev
  • Zero-downtime rolling reload on SIGHUP, with optional canary
  • Request hardening: body-size limit (413), HEAD, GET/POST
  • Typed askr.toml config + config-check
  • Built-in admin dashboard + API (status, reload, live metrics)
  • In-process metrics — PHP-vs-I/O split, latency histogram, per-worker RSS
  • askr doctor pre-flight checks

Not yet

The per-core io_uring I/O core (the biggest efficiency step, Linux), HTTP/3 (QUIC), raw WebSockets / Reverb-protocol compatibility, multipart $_FILES, OpenTelemetry export, seccomp/Landlock sandboxing, and the askr-laravel composer package.