Docs

What Covo touches

Where Covo keeps its files, what it changes outside that folder, how it verifies downloads and how to remove it completely.

On this page

Covo 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 Covo installs lives in ~/Library/Application Support/covo/: 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.

Covo never uses or changes Homebrew. It does not install anything system-wide.

Other tools keep running

Covo 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 Covo binds a port, it checks the port is free. If it is taken, Covo 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 Covo core runs as your user, never as root. Its services run as launchd user agents labelled dev.getcovo.* (for example dev.getcovo.caddy). Their definitions stay inside Covo’s folder; nothing is copied to ~/Library/LaunchAgents. After a restart nothing runs until you start Covo 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 Covo’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. Covo never runs sudo and never sees the password.

Change When How to undo
Covo’s certificate authority in your login keychain covo trust covo untrust
/etc/resolver/test covo domains enable test covo domains disable test
Covo’s marked block in /etc/hosts covo domains enable local covo domains disable local
Port forwarding rules in Covo’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

Covo 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.getcovo.hostshelper, installed with one administrator authorization. It can only edit Covo’s own block in /etc/hosts and the forwarding rules in Covo’s pf anchor, com.apple/dev.getcovo.hostshelper. /etc/pf.conf is never changed.

The port forwards only cover loopback connections and exist only while Covo is running: covo start adds them, covo stop removes them. If another program already uses 443 or 80 (MAMP on 80, for example), Covo refuses and leaves the port to it.

Removing the helper needs no password:

covo domains disable local        # refused while .local sites exist
covo 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. covo uninstall removes it too.

Keychain items

Covo keeps secrets in your login keychain, never in files, command lines or URLs:

Keychain service Holds
dev.getcovo.mysql MySQL root password and the passwords of site database users
dev.getcovo.postgres PostgreSQL superuser password, when PostgreSQL is enabled
dev.getcovo.remote passwords for remote servers, when you use one for sync
dev.getcovo.github GitHub token for private repositories in blueprints

Covo’s certificate authority is also stored in the login keychain after covo trust.

Verified downloads and updates

Covo 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 Covo’s public build repository and must carry a valid signature from a key built into Covo. A newer manifest can add versions but never change one Covo already knows, and an older manifest is never accepted again.

Covo checks for updates once a day and shows a badge. It never installs anything by itself:

covo update                   # what is available
covo update check             # download and verify the signed manifest
covo update apply             # install everything available
covo update apply caddy php-8.4
covo 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 Covo

covo uninstall

This stops every Covo service, removes Covo’s certificate authority and every Covo 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 Covo added them, and deletes ~/Library/Application Support/covo/. That folder holds your Covo databases and snapshots, so export anything you need first. Your site folders are never touched. Covo asks for confirmation; pass --yes to skip it.

Covo refuses to delete its folder if it contains files Covo did not create.