Qbix Server is a pure-PHP web server that eliminates the traditional nginx + php-fpm stack. Instead of spawning separate PHP workers that each load the full framework independently, the server loads all classes, configuration, and database connections once at startup, then forks worker processes. Forked workers inherit the preloaded state via copy-on-write memory sharing, avoiding duplication.
The concurrency claim rests on memory efficiency. Conventional php-fpm allocates 30–60MB per worker for framework code that is identical across all workers. On an 8GB server, this limits you to roughly 160 concurrent workers. Qbix Server loads that code once (~30MB shared), then each worker adds only ~5MB per-request data, enabling ~1,600 workers on the same hardware.
Performance benchmarks on a single-core container (PHP 8.3, 13KB static file) show Qbix Server delivering 56–73% of nginx throughput depending on concurrency mode and keep-alive settings. The documentation acknowledges this gap is inherent: nginx uses sendfile() kernel-space I/O, epoll event notification, and compiled C, whereas Qbix runs in interpreted PHP with stream_select and userspace file serving.
Key features include in-memory response caching with ETag and 304 validation, X-Accel-Redirect for access-controlled file serving (PHP checks permissions, server streams the file with no public URL), and X-Cache-Tree for component-level cache invalidation (invalidate one page component without flushing the entire page). WebSocket support is built in.
The architecture uses fork-per-request (or pre-forked worker pools with --workers=N). Each request runs in its own process, eliminating state leaks—global variables, static properties, and database connections are wiped when the process exits. This contrasts with persistent-worker systems like FrankenPHP and Swoole, where static state can leak between unrelated requests unless carefully audited.
The server is distributed as PHP source code, a 196KB PHAR file, or a static binary (~15MB) bundling PHP 8.3 and extensions. It requires PHP 8.1+ with sockets, pcntl (for signals and workers on Unix), and openssl extensions. Windows support exists but without pcntl; each request spawns via proc_open with ~50ms overhead, sacrificing the preload speed advantage.
Optionally, installing amphp via Composer upgrades the transport layer to HTTP/2 with multiplexing, HPACK header compression, and server push. The built-in transport uses stream_select with zero dependencies.
The server includes a micro-framework layer: classes/ (autoloaded), handlers/ (event-fired on demand), views/ (PHP templates), config/ (JSON settings), and web/ (public document root). The same directory structure is used by the full Qbix Platform, allowing projects to upgrade to the framework later without reorganizing code.
For simple sites, APIs, or projects that don't need a full framework, Qbix Server runs in standalone mode (no --app flag). With --app=/path/to/qbix-app, it integrates the full Qbix Platform, routing requests through the framework's dispatcher and loading plugins like Users, Streams, and Assets.
The server is part of the Qbix Platform ecosystem and is released under the MIT license.