Docs
What Benbow touches
Where Benbow keeps its files, what it changes outside that folder, how it verifies downloads and how to remove it completely.
On this page
Benbow is built to sit next to whatever you already use. This page lists what it changes on your Mac and how to undo each change.
One folder
Everything Benbow installs lives in ~/Library/Application Support/benbow/: PHP, Caddy, MySQL and the other components, their configuration, logs, databases, snapshots and caches. wp-cli and Composer keep their caches there too, not in your home folder. Your site folders stay where you put them.
Benbow never uses or changes Homebrew. It does not install anything system-wide.
Other tools keep running
Benbow does not stop, reconfigure or take over services it did not start. MAMP, Valet, Herd, the system Apache and any MySQL you already run are left alone. Importers only read other tools’ data.
Before Benbow binds a port, it checks the port is free. If it is taken, Benbow uses the next free one or reports the conflict. The defaults are chosen around common tools:
| Service | Default port |
|---|---|
| HTTPS | 8443 |
| MySQL | 3307 (3306 is usually MAMP’s) |
| PostgreSQL | 5433 |
| Redis | 6380 |
Caddy listens only on 127.0.0.1 and ::1, so your sites are not reachable from the network unless you turn on Open on phone for a site.
No root
The Benbow core runs as your user, never as root. Its services run as launchd user agents labelled dev.benbow.* (for example dev.benbow.caddy). Their definitions stay inside Benbow’s folder; nothing is copied to ~/Library/LaunchAgents. After a restart nothing runs until you start Benbow again, unless you set the app to open at login and start sites on launch (Settings → General).
Changes outside the folder
A few optional features need a change outside Benbow’s folder. Each one happens only when you turn it on, and the ones that touch system files ask for your administrator password through the standard macOS dialog. Benbow never runs sudo and never sees the password.
| Change | When | How to undo |
|---|---|---|
| Benbow’s certificate authority in your login keychain | benbow trust |
benbow untrust |
/etc/resolver/test |
benbow domains enable test |
benbow domains disable test |
Benbow’s marked block in /etc/hosts |
benbow domains enable local |
benbow domains disable local |
| Port forwarding rules in Benbow’s own pf anchor | HTTPS on 443 or HTTP on 80 | set a high port again |
| The privileged helper | .local domains or ports 443/80 |
see below |
The certificate authority is limited to .localhost, .test and .local names, so it cannot be used to vouch for real websites. See HTTPS.
The privileged helper
Benbow installs a small helper only for two features: .local domains (MAMP compatibility mode) and the standard ports 443 and 80. It is a LaunchDaemon, dev.benbow.hostshelper, installed with one administrator authorization. It can only edit Benbow’s own block in /etc/hosts and the forwarding rules in Benbow’s pf anchor, com.apple/dev.benbow.hostshelper. /etc/pf.conf is never changed.
The port forwards only cover loopback connections and exist only while Benbow is running: benbow start adds them, benbow stop removes them. If another program already uses 443 or 80 (MAMP on 80, for example), Benbow refuses and leaves the port to it.
Removing the helper needs no password:
benbow domains disable local # refused while .local sites exist
benbow ports --https 8443 --http 0 # back to a high port, no HTTP port
Once neither .local domains nor the standard ports need it, the helper removes itself. benbow uninstall removes it too.
Keychain items
Benbow keeps secrets in your login keychain, never in files, command lines or URLs:
| Keychain service | Holds |
|---|---|
dev.benbow.mysql |
MySQL root password and the passwords of site database users |
dev.benbow.postgres |
PostgreSQL superuser password, when PostgreSQL is enabled |
dev.benbow.remote |
passwords for remote servers, when you use one for sync |
dev.benbow.github |
GitHub token for private repositories in blueprints |
Benbow’s certificate authority is also stored in the login keychain after benbow trust.
Verified downloads and updates
Benbow only installs components listed in a manifest of pinned SHA-256 checksums. Nothing is extracted or run before its checksum matches. Newer manifests come from Benbow’s public build repository and must carry a valid signature from a key built into Benbow. A newer manifest can add versions but never change one Benbow already knows, and an older manifest is never accepted again.
Benbow checks for updates once a day and shows a badge. It never installs anything by itself:
benbow update # what is available
benbow update check # download and verify the signed manifest
benbow update apply # install everything available
benbow update apply caddy php-8.4
benbow update rollback mailpit # back to the version before the last update
Updates stay within a series (PHP within its minor version, MySQL 8.4.x). A failed update changes nothing.
Removing Benbow
benbow uninstall
This stops every Benbow service, removes Benbow’s certificate authority and every Benbow item from the login keychain (database passwords, remote server passwords and the GitHub token), removes the resolver file, the /etc/hosts block, the port forwards and the helper if Benbow added them, and deletes ~/Library/Application Support/benbow/. That folder holds your Benbow databases and snapshots, so export anything you need first. Your site folders are never touched. Benbow asks for confirmation; pass --yes to skip it.
Benbow refuses to delete its folder if it contains files Benbow did not create.