Linking sites
Butler serves projects from folders on your Mac. Point it at a directory and it
becomes a .test site — no virtual hosts to edit, no restarts.
Link a single project
Section titled “Link a single project”From inside a project folder:
cd ~/Sites/my-appbutler linkOr name the path explicitly:
butler link ~/Sites/my-appEither way the folder is served at http://my-app.test (the site name is the
folder name). Butler inspects the project and picks the right handling
automatically — it recognizes Laravel, WordPress, Symfony, Drupal, Statamic
and Craft, and falls back to sensible defaults for a plain PHP or static
site. Open it right away:
open http://my-app.testTo give the site a different name, link from a folder of that name or set it in
butler.yml.
Park a directory of projects
Section titled “Park a directory of projects”If you keep all your projects under one parent folder, park it once and every subfolder becomes a site automatically:
butler park ~/SitesNow ~/Sites/blog is blog.test, ~/Sites/api is api.test, and any new
folder you create there is served without another command. Stop parking a
directory with butler forget.
See what’s linked
Section titled “See what’s linked”butler sitesThis lists both individually linked sites and everything picked up by parked directories, along with each one’s address and PHP version. The Sites section of the menu bar app shows the same information with buttons for the common actions.
Remove a site
Section titled “Remove a site”butler unlink my-app # remove a single linked sitebutler forget ~/Sites # stop auto-serving a parked directoryUnlinking only removes the mapping — your project files are never touched.
Configure a site
Section titled “Configure a site”Most projects need no configuration. When one does — a specific PHP version, a
non-standard public directory, environment variables, a database, or reverse-proxy
mode for a JS dev server — drop a butler.yml file at the project root. It’s the
per-project override for everything Butler does. See the full
butler.yml reference.
php: "8.3"webserver: caddypublicPath: publicenv: APP_DEBUG: "true"Initialize config interactively
Section titled “Initialize config interactively”To generate a starter butler.yml (also reading any existing valet.yml,
.valetrc or herd.yml):
butler init # in the current projectbutler init ~/Sites/my-appNext steps
Section titled “Next steps”- Turn on HTTPS so the site loads over
https://. - Pin a PHP version for this project.
- Share it publicly to show someone your work.