
FrankenPHP
A PHP web server built on Caddy that can run PHP apps faster and add HTTPS automatically.
- Stars
- 11.5k
- Forks
- 508
- Licence
- MIT
- Language
- Go
- Last update
- 4 days ago
- Type
- App
What it is
FrankenPHP is an application server for PHP, built on the Caddy web server. It serves PHP websites and apps and adds features such as automatic HTTPS, HTTP/2 and HTTP/3, early hints, and a worker mode that keeps the app loaded between requests. It is also usable as a Go library for embedding PHP in Go programs.
- Serve a local PHP project by running frankenphp php-server in its folder
- Run a PHP command-line script with frankenphp php-cli
- Run a PHP app in a Docker container with HTTPS on localhost
- Embed PHP inside a Go web service using net/http
Great for
- PHP developers who want a single binary to serve their app with HTTPS included
- Laravel or Symfony projects that could benefit from the official worker mode integrations
- Teams wanting to run a PHP app without installing a separate web server
- People who want to package a PHP app as a standalone executable
Not ideal for
- Users who need a fully managed hosting platform, since this is server software you must run and maintain
- Developers with no PHP code to serve, because it only runs PHP applications
- Those who need an extensively proven setup for critical production without testing first, since the README points to a known-issues page
How to get it
- 1
Download the app
Install on Linux or macOS
curl https://frankenphp.dev/install.sh | shInstall on Windows (PowerShell)
irm https://frankenphp.dev/install.ps1 | iexInstall with Homebrew
brew install dunglas/frankenphp/frankenphpRun with Docker
docker run -v .:/app/public -p 80:80 -p 443:443 -p 443:443/udp dunglas/frankenphp - 2
Run it
- Install FrankenPHP using one of the install commands
- Open a terminal in your PHP project folder
- Run frankenphp php-server to serve the current directory
- Open https://localhost and accept the self-signed certificate
- 3
Get the most out of it
- Use the SERVER_NAME environment variable to change the served domain
- Read the worker mode docs before enabling it for Laravel or Symfony
- Use the Docker images page for container deployments
- Install extensions via PIE when they are not included by default
Downloads
Strengths
- Bundles the web server, HTTPS and PHP runtime in one program
- Official worker mode and hot reloading options for Laravel and Symfony
- Linux binaries are statically linked and need no extra dependencies
Trade-offs
- Worker mode and advanced features require understanding how long-running PHP processes behave
- Platform binaries are limited: Linux, macOS on Apple Silicon, and Windows
- The README's feature list is truncated and details must be checked on the docs site
How it compares
| Project | Stars | Type | Level | Updated | Best for |
|---|---|---|---|---|---|
| frankenphp (this) | 11.5k | App | intermediate | 4 days ago | PHP developers who want a single binary to serve their app with HTTPS included |
| composer | 29.6k | Dev tool | beginner | 4 days ago | PHP developers starting a new project who want standard third-party libraries |
| bagisto | 28.3k | App | intermediate | 4 days ago | Developers building a custom online store on Laravel |
| laravel-crm | 24.1k | App | intermediate | 4 days ago | Small and mid-sized businesses that want a self-hosted CRM |
| guzzle | 23.4k | Library | intermediate | 11 days ago | PHP developers who need to call external REST or web service APIs |
| monolog | 21.4k | Library | intermediate | 5 days ago | PHP developers who need structured logs from an application |
Stats synced from GitHub. The assessment above was drafted with AI from the project's README on 2026-10-29 and may miss recent changes — check the README before relying on a command. MIT licence: free to use, modify and distribute, including commercially, as long as you keep the copyright notice.