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