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.