Valet & Herd compatibility
Butler is designed to feel familiar if you’re coming from Laravel Valet or Herd. Most everyday commands share the same names, per-project config is cross-readable, and Butler can import an existing setup wholesale. This page is the detailed compatibility map; for the step-by-step import walkthrough see Migrating from Valet or Herd.
Importing an existing setup
Section titled “Importing an existing setup”Before mapping individual commands, note you usually don’t have to run them one by one. Butler can read your current Valet, Herd, or DBngin configuration and recreate the equivalent sites and services:
butler migrate valet # sites + services from Valetbutler migrate herd # sites + services from Herdbutler migrate dbngin # databases from DBnginAdd --sites or --services to import just one or the other. Your projects are
never moved or modified.
Command mapping
Section titled “Command mapping”Commands that behave the same way you’d expect from Valet:
| Valet | Butler | Notes |
|---|---|---|
valet park | butler park | Auto-serve every subfolder of a directory. |
valet forget | butler forget | Stop auto-serving a parked directory. |
valet link | butler link | Serve the current folder as a site. |
valet unlink | butler unlink | Remove a linked site. |
valet links | butler sites | List linked + parked sites. |
valet secure | butler secure | Trusted HTTPS for a site. |
valet unsecure | butler unsecure | Back to HTTP. |
valet secured | butler secured | List HTTPS sites. |
valet use <php> | butler use <php> | Set the global PHP version. |
valet isolate <php> | butler isolate <php> [--site <name>] | Pin a PHP version to one site (defaults to the current directory). |
valet unisolate | butler unisolate <name> | Remove a site’s pinned version. |
valet tld | butler tld <suffix> | Change the site TLD. |
valet share | butler share | Put a site on a public URL. |
valet restart | butler restart <name> | Restart a service. |
valet start / stop | butler start / stop | Start/stop services. |
valet status | butler status | Service status (Butler’s default command). |
valet log | butler log <name> | Tail a program’s log. |
valet composer | butler composer | Composer through the active PHP. |
Commands that differ on purpose
Section titled “Commands that differ on purpose”Where Butler works fundamentally differently from Valet, the command diverges rather than pretending to be identical:
| Valet | Butler | Why it’s different |
|---|---|---|
valet install | butler system install | Butler’s machine bootstrap lives under butler system. Top-level butler install means something else (below). |
| — | butler install <component> | Downloads a single service binary (MySQL, Redis, …) — Valet has no equivalent because it relies on Homebrew. |
| — | butler uninstall <component> | Removes an installed component — the inverse of butler install. |
valet trust | butler trust | Same intent (trust the CA), but Butler installs everything through its own CA rather than leaning on the system. |
valet which-php | butler php -v | Butler routes butler php to the active version for the current directory. |
valet uninstall | butler system uninstall | Machine teardown; --force also wipes Butler’s state and downloads. |
Behavioral differences worth knowing
Section titled “Behavioral differences worth knowing”- No Homebrew. Valet installs PHP and services via Homebrew; Butler downloads
self-contained, checksum-verified static binaries and supervises them itself.
Nothing lands in
/opt/homebrewor/usr/localat runtime. See What is Butler?. - A background service, not a set of Homebrew daemons. Butler runs as one supervised daemon. Your sites keep running whether or not the app is open, and a single privileged piece binds ports 80/443 at login.
- Per-project config is cross-readable. Butler reads a
valet.ymlfile as a fallback when there’s nobutler.yml, so projects carrying Valet config keep working. Runbutler initto generate a nativebutler.ymlwhen you’re ready. - Framework drivers. Like Valet, Butler auto-detects Laravel, WordPress, Symfony, Drupal, Statamic and Craft, and supports a custom/proxy driver for everything else.
- Services are first-class. Databases, caches, mail and search are installed
and supervised by Butler (
butler install,butler service) rather than being your responsibility via Homebrew or DBngin. See Databases & services.
Herd notes
Section titled “Herd notes”- Herd’s bundled services (databases, etc.) map to Butler’s
components and services.
butler migrate herd --servicesbrings them across. - Herd’s per-site settings import alongside its sites with
butler migrate herd.
See the full CLI reference for every Butler command.