Ports and files

On this page

Every port Short Leash listens on is on 127.0.0.1. Everything it writes is under Short Leash's own folder, apart from the few files listed under Files outside Short Leash's folder.

Ports

Everything listens on 127.0.0.1 only.

Port What
80, 443 Sites over HTTP and HTTPS (opened by launchd, handed to Short Leash)
5354 DNS for .test names
2525 Mail (SMTP)
9003 Your editor, for Xdebug (Short Leash connects to it)
3306, 5432, 27017, 6379, 7700, 9000, 8080 MySQL and MariaDB (whichever starts second takes the next free port), PostgreSQL, MongoDB, Valkey and Redis (whichever starts second takes the next free port), Meilisearch, RustFS, Reverb (each one changeable)
8108, 8107 Typesense's API and its peering service, on macOS (they move together)
Others, chosen at random Dev servers, the dump collector, Mailpit's API and the share listener

Files outside Short Leash's folder

Path Written by Removed by
/Library/LaunchDaemons/dev.shortleash.daemon.plist Setup Settings › Remove
/etc/resolver/test Setup Settings › Remove
Short Leash Local CA in your login keychain Setup Settings › Remove
A block marked “Short Leash” in ~/.zshrc Settings › Terminal, when you turn it on Turning it off

Short Leash's folder

~/Library/Application Support/Short Leash holds everything else:

Path What
config.toml Settings, parked folders, links and site settings
secrets/ Share password, Cloudflare tokens and webhook signing secrets (readable only by you)
trust.json Folders you trusted to run what their leash.toml asks (readable only by you)
db/ Short Leash's database: webhook deliveries, task lists, terminal details and per-minute request counts, with its daily copy and big webhook bodies in blobs/ (readable only by you)
terminals/ The end of each terminal's output (readable only by you)
pair/ Your Pair avatar, avatar.jpg, as Short Leash shrank it (readable only by you)
ca/ The certificate authority
certs/ Certificates issued for your sites
generated/ PHP and PHP-FPM configuration Short Leash writes (rebuilt as needed)
runtimes/ PHP and Node versions (Python versions are managed by uv)
services/ Service binaries and data
php/conf.d/ Your own PHP .ini files
php/<version>/conf.d/ Your own PHP .ini files for one version, e.g. php/8.4/conf.d/, read after php/conf.d/
composer/ Short Leash's Composer home (global packages such as the Laravel installer)
bin/ php, composer and leash for your terminal, Composer itself and cloudflared
run/ Sockets for Short Leash and PHP
logs/ Logs from the background service
leash-ports/ An empty file for each port Short Leash gives one of its own processes, locked while it's claimed, so two copies of Short Leash running side by side never take the same one. It's here even when LEASH_HOME points Short Leash at another folder, so every copy of Short Leash you run shares it. Readable only by you; a file goes when its claim does

Looking inside Short Leash's database

db/leash.db is a SQLite database. To look without changing anything, open it read-only:

Terminal window
sqlite3 'file:'"$HOME"'/Library/Application Support/Short Leash/db/leash.db?mode=ro' '.tables'

Keep leash.db-wal and leash.db-shm next to it: they hold the latest changes. Don't copy or edit the file while Short Leash runs. If it's ever damaged, Short Leash moves it to leash.db.corrupt-<time> when it next starts and restores the daily copy, leash.db.bak-daily.