Butler app icon

macOS web development

Local web development
for macOS.

Run PHP, Node, web servers, databases, caches, search, mail and storage on your Mac. Butler gives every project a local domain, trusted HTTPS, 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

or install the CLI
$curl -fsSL https://getbutler.dev/install.sh | sh

single static binary · ~15 MB · no Homebrew

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.

Per-site PHP & Node

Pin a project to any PHP version with butler isolate; butler node, npm and npx resolve the right Node per project. Composer follows the active runtime.

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 Composer
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