Wharf

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.

Download See how it works

Released: native apps for macOS, Windows and Linux.

One window, one list of projects: whether each one runs, its address, and what serves it. The tray menu shows the same; “Cast off” stops everything and quits.

How it works

Three steps. No wizard.

  1. 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.

  2. Start it from the tray

    Start, stop and open live in the tray menu, no window needed. Quit Wharf, and everything it started stops.

  3. 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.

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" }
  ]
}
The Wharf folder
~/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.

Support Wharf

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.

See everything Wharf changes on your computer

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.