Local PHP development · Windows, macOS & Linux
Local PHP development.
Just files and folders.
Wharf runs PHP, nginx and Apache right on your computer, like MAMP or
Laragon — no Docker, no VM. Every folder is a project with a real address like
my-kirby-site.localhost, HTTPS in one switch, and the PHP
version it needs.
Released: native apps for macOS, Windows and Linux.
How it works
Three steps. No wizard.
-
Pick a folder
“Add project…” takes any folder right where it lives — your code never moves. Wharf proposes a name and the rules for your CMS; one click, and it runs.
-
Start it from the tray
Start, stop and open live in the tray menu, no window needed. Quit Wharf, and everything it started stops.
-
Open a real URL
Each project gets its own address, with HTTPS if you want it. Your computer finds it by itself: nothing to set up, no password, no port number in the address.
https://my-kirby-site.localhost
Features
Everything a PHP project needs.
Nothing it doesn't.
-
HTTPS with one switch
Turn it on, and Wharf makes a certificate your browser trusts. Your computer asks once.
-
The PHP you need
PHP already on your computer is used where it is. Any supported version is one click away, and each project can pick its own. The default one is also
phpin your terminal. -
nginx or Apache
Choose one for everything, or give a single project the other. Its address stays the same.
-
Knows your CMS
Kirby, Laravel, WordPress, Statamic, Symfony, Craft CMS or Drupal: Wharf recognises the folder and picks the right webserver rules.
-
Settings and logs
One
php.inifor every PHP version; webserver rules and a log folder per project. Plain files, one click away. -
Accessible
Readable in light and dark, status shown by shape as well as colour, and the keyboard reaches everything.
Plain text
Your whole setup is one file you can read.
Edit it by hand instead of clicking, and Wharf picks up your changes when you save. Only what differs from the defaults is written down.
config/wharf.json{
"services": {
"webserver": { "active": "nginx", "available": ["apache", "nginx"] },
"php": { "version": "8.4", "available": ["8.2", "8.4"] }
},
"projects": [
{ "name": "my-kirby-site", "ssl": true, "template": "kirby" },
{ "name": "legacy-app", "webserver_override": "apache",
"php_version": "8.2", "ssl": false },
{ "name": "client-site", "ssl": false,
"path": "/Users/you/Code/Client Site" }
]
}
~/Wharf/ ├── bin/ PHP, nginx, Apache, mkcert ├── www/ optional home for projects ├── config/ worth backing up │ ├── wharf.json │ ├── php.ini │ ├── vhosts/ my-kirby-site.nginx.conf │ └── templates/ laravel.nginx.conf └── data/ logs, certificates, generated configs
Open source
Free, and yours to read.
MIT licence: free for personal and client work.
Source on GitHub Report an issue
Pay what you want
Wharf is and stays free. If it saves you time, you can support its development with an amount of your choice — once, no subscription.
Privacy
Nothing leaves your computer.
The app has no account, no analytics, no crash reports. Wharf downloads only what you ask for, and never touches your hosts file or your project folders. This website counts visits without cookies.
Status
Where Wharf stands today.
Done Partly Not yet
- Projects, addresses, tray
- Done. Add, start, stop, open
- PHP, nginx, Apache, HTTPS
- Done. Used if present, installed on request
- Desktop app
- Done. macOS, Windows and Linux
- Downloads
- Done. Latest release; the Windows installer is not code-signed
On the roadmap
Specified, not built yet. Version 1 is PHP only.
FAQ
Questions, answered.
Does Wharf use Docker or a virtual machine?
No. PHP, nginx, Apache and mkcert run as ordinary programs on your computer, so reading your files is as fast as your disk.
Will Wharf ask for my password?
Adding a project never does. On every system, the first time you turn on HTTPS, your computer has to be told once to trust Wharf's certificates. Saying no is fine — HTTPS stays on, browsers show a warning until you trust it, and Settings offers to ask again. On Linux, Wharf also asks once before the first project starts, to use ports 80 and 443, and when it installs Apache.
Why .localhost and not .test?
The name .localhost is reserved for your own computer
(RFC 6761).
macOS, Linux and every current browser answer it by themselves, so
nothing is written to the hosts file. A made-up ending such as
.test needs the hosts file instead, which macOS 26 does
not reliably read.
Which PHP versions can I use?
Any version already on your computer is used where it is. Every version that still gets security fixes can be downloaded from Settings. The default is the newest version in active support, and each project can pick its own.
Do I have to move my projects into a special folder?
No. Choose “Add project…” and pick the folder wherever it is — a Git checkout in your code folder is fine. It stays where it is, and removing the project never touches its files.
What is the www folder for?
It is optional. A folder put in ~/Wharf/www shows up
in the app, ready to add with one click, under its own name. Projects
anywhere else are added with “Add project…”.
Is Wharf only for Kirby?
No — any folder of PHP is a project. When you add one, Wharf recognises Kirby, Laravel, WordPress, Statamic, Symfony, Craft CMS and Drupal and picks ready-made nginx and Apache rules for it. You can change the pick, or choose none, for each project.
Can I install an older nginx or Apache for one project?
Not yet. Wharf installs the newest nginx and Apache, because the places it gets them from rarely offer older versions.
Can I download Wharf?
Yes: a DMG for macOS, an AppImage for Linux and an installer for Windows, on the GitHub releases page. The Windows installer is not code-signed — a certificate costs more than a free tool can carry — so SmartScreen warns once: choose More info, then Run anyway.