Butler app icon

macOS web development

Local web development
for macOS.

Run PHP, Node, Python, Ruby, web servers, databases, caches, search, mail and storage on your Mac. Butler gives every project a local domain, trusted HTTPS, the language versions it asks for, and isolated services using sha256-verified static binaries. Loopback-only by default. Nothing touches Homebrew.

Download for macOS

Latest · Butler.app for Apple Silicon · macOS 14+ · auto-updates

One binary, that's it

CLI, daemon, DNS and the reverse proxy ship as a single butler executable. The menu-bar app is optional — quit it and nothing stops.

No Homebrew at runtime

Every service is a sha256-verified static binary pulled on demand. Your system stays clean; builds stay reproducible.

HTTPS in one command

A built-in CA issues per-site certs. butler secure flips any site to trusted TLS instantly.

Sites by directory

Park a folder and every subdirectory becomes name.test — Laravel, WordPress, Symfony, Craft, Statamic, Drupal, static and proxies, auto-detected. Octane worker mode included.

PHP, Node, Python & Ruby

Pin a project to any PHP version with butler isolate. node, python, ruby and the commands around them resolve the version each project asks for — and they're real files on your PATH, so editors, build scripts and git hooks get the same versions your terminal does.

Switch from Herd or Valet

butler migrate herd imports your sites, and butler migrate herd --services adopts existing database and cache data. PROXY-aware routing keeps request metadata intact across Butler's hops.

Every service, on demand

Pick what you need — each one a verified static binary, supervised for you.

Runtimes PHP 7.4 – 8.5 Node via fnm Python via uv Ruby via rv Go Bun Deno
Packages Composer pnpm
Web Caddy Nginx FrankenPHP Octane
Databases MySQL 8.0 · 8.4 · 9.7 MariaDB 10.11 · 11.4 · 11.8 PostgreSQL 16 · 17 · 18
Cache Redis Valkey
Search Meilisearch Typesense
Mail Mailpit
Storage Garage S3 RustFS S3
Realtime Reverb websockets Expose tunnels

Run several versions side by side — butler service add postgresql@18 and go.

Link a site in seconds

Familiar verbs if you've used Valet — done better where it counts.

$ cd ~/Sites/acme && butler link
Linked acme → https://acme.test (laravel, php 8.5)
$ butler secure acme
Issued cert · acme.test now serves HTTPS
$ butler install postgresql redis mailpit
Fetched 3 components, verified, started.
$ butler status
router caddy php-8.5 postgresql redis