The calm way to run
WordPress locally.

Cove is a tiny CLI that spins up local sites in seconds. Automatic HTTPS, one-click admin login, zero Docker.

$ bash <(curl -sL https://cove.run/install-cove.sh)
macOS · Linux · WSL2  ·  or install from source ↗
For agent users · Claude, Cursor, Codex, Copilot, Grok… just paste this.
Set up a new WordPress site locally using cove.run.
no docs required Your agent will read the quickstart and run cove add for you.
~/Cove — zsh — 84×24
cove add myblog
➕ Creating WordPress site: myblog.localhost
📌 Installing WordPress 6.9 on PHP 8.4
🗃️ Creating database: cove_myblog
Installing WordPress... done
✅ Site 'myblog.localhost' created successfully!
 
cove login myblog
🔎 Finding an admin for 'myblog.localhost'...
✅ Found admin: 'admin'.
🔗 One-Time Login URL for 'admin'
https://myblog.localhost/?login=a8f…
$
The stack

Boring tech. Beautifully glued.

Cove bundles the smallest set of proven tools that make local WordPress feel like a native dev experience. You’ll never see them unless you want to.

The whole API

One CLI. Short commands.
No docs-diving.

If you know add, list, and login, you know Cove. Everything else is here when you need it.

Sites8 commands
cove add <name> [--plain] [--php=8.3]
Fresh WordPress install at name.localhost. --plain for static, --php to pin a version from day one.
cove import <name> <backup.zip>
A new site from any backup that holds a WordPress tree and a .sql dump, at any depth: Cove backups, Local exports, most host archives.
cove clone <site> <new>
Copies a site, database and all, under a new name.
cove list [--totals] [--format=json]
Every site Cove manages, with the PHP it runs on. --totals adds disk usage.
cove rename <old> <new>
Renames the site, its DB, and runs wp search-replace so stored URLs update cleanly. Snapshots and previews move with it.
cove delete <name> [--force]
Tear down the directory, database, snapshots, and previews in one go.
cove path / url <site>
The directory or the HTTPS address of a site, for scripts and cd "$(cove path myblog)".
WordPress5 commands
cove login <site> [--user=…] [--url=…]
A one-time login link for any user, on any subsite of a network. --plain prints only the URL.
cove wp <site> <command…>
WP-CLI inside a site from anywhere, on the PHP that site actually runs.
cove core [update] [site]
Report or update the WordPress version across your sites.
cove network <site>
The sites on a multisite network, with their URLs.
cove php <site> [8.2 | unpin]
Pin a site to an older PHP. Native php-fpm behind FrankenPHP; everything else stays the same.
Backups & transfer7 commands
cove backup <site> [--out=…]
Files and database as one zip in ~/Cove/Backups, ready for cove import on any machine.
cove snapshot <site> [restore <id>]
Take one in a second (APFS clones), list, restore with a safety snapshot behind you, export as a tarball.
cove history <site>
Nightly saves of plugins and themes; roll any of them back.
cove db backup / list
Every site’s database to timestamped .sql files, or all DB credentials at a glance.
cove pull [--proxy-uploads]
Pulls a remote WordPress site down via SSH.
cove push
Pushes a local Cove site up to a remote WordPress host.
cove transfer
The backup and restore engine behind pull, push, and import, usable on its own.
Inspect4 commands
cove log [site] -f
Tail error logs. -f follows in real time.
cove screenshot <site> [--sweep]
A site’s front page captured by your own Chrome. --sweep refreshes every preview the dashboard shows.
cove health
Diagnoses crashes, OPcache pressure, and stray state on disk, and offers to clean up.
cove status
At-a-glance health of Caddy, MariaDB, and Mailpit. A cheap probe, safe to poll.
Serving & access8 commands
cove share [site] [--background]
Cloudflare Tunnel → public URL you can text a client in seconds. --background keeps it up after you close the terminal.
cove lan enable
Exposes sites to your phone via Bonjour/mDNS. Great for iOS sync.
cove tailscale enable
Every site reachable from any device on your tailnet.
cove mappings <site> add <domain>
Extra domains a site answers on; a *. entry covers every subdomain.
cove proxy add <name> <port>
A .localhost name with HTTPS in front of anything on a local port: Node, Go, a model server.
cove directive <site> add …
Custom Caddyfile rules for one site, kept across reloads.
cove ports --http 8090 --https 8453
Run alongside Local, Studio, or DevKinsta without port fights.
cove trust
Installs Cove’s local root CA into the OS trust store and every Firefox/Chromium NSS database it can find. No more “Not Secure” warnings on *.localhost.
Services & PHP5 commands
cove enable / disable
Start or stop Caddy, MariaDB, and Mailpit together.
cove reload
Regenerates the Caddyfile and reloads Caddy, without dropping a connection.
cove memory [set <value>]
Audit PHP memory_limit across every ini Cove and Homebrew load. set 2G bumps them all.
cove opcache [set <MB>]
Show or resize FrankenPHP’s shared OPcache. All sites share it, so a big fleet wants a bigger one.
Cove itself4 commands
cove upgrade
Pulls the latest Cove release in place and refreshes managed bits (Whoops, login helper, watchdog) across every site.
cove menubar install
The macOS menu bar or Linux tray companion: services, sites, and the dashboard from the top of the screen.
cove version / install
Which Cove you have, or a first-time setup of the Homebrew dependencies.

Every command runs unattended: --yes skips confirmations, --format=json gives scripts and AI agents something to parse, and a pipe never hangs on a prompt.

Sites, mail, databases, logs, files

When the terminal’s not handy.

Open https://cove.localhost for a dashboard built to match this page. Five views, one keystroke apart: every site at a glance, every message your sites send, the databases behind them, the logs they write, and their files.

Sites/ to filter, one click to sort, admin login one click away, ⌘K to jump anywhere
Mail — an inbox per site; reset and login links lifted out of each message with a copy button
Databases — browse any table, double-click a cell to edit it, a SQL console with ⌘↵
Logs — PHP errors per site, debug.log, access logs; live, filtered by level, repeats folded
Files — browse and edit any site’s directory with syntax highlighting, drop folders to upload, right-click for the rest
Click caddy, mariadb, or mailpit in the top bar for status, versions, and credentials
System, light, or dark — and it remembers
New in 2.0

Every site, one page.

Click a site and you land on it: what it is, a preview of its front page, and the things you would otherwise open wp-admin or a terminal for — each on its own tab, each with its own URL.

OverviewA preview captured by your own Chrome and kept fresh in the background, with the last 24 hours of requests, errors, mail, and cron on one line. Files, database, mail, and logs one click away.
Plugins & themesActivate, update, delete, toggle auto-updates. Network-wide on a multisite. Browse a plugin’s files without leaving.
UsersLog in as anyone, whatever the role. On a network, on the subsite they belong to, with a subsite picker next to every login button.
CronEvery scheduled event with when it’s due and a run-now button, so a stuck hook stops being a mystery.
TrafficRequests, page views, errors, response times, and the slowest requests, read straight from the site’s access log. No plugin, nothing sent anywhere.
SnapshotsTake one in a second, restore with a way back, download a zip. Drop a backup zip on the add form to import a whole site.
WP-CLIA console on the page: type, , output with exit code and timing. Right-click any row for the rest.
Headless tooEvery one of these has a command, and every command runs unattended — --yes, --format=json, --plain — so scripts and AI agents never get stuck on a prompt.
Troubleshooting

The usual suspects.

The questions most people hit on day one. Everything else is in the readme.

My browser says “Your connection is not private.” +
Run cove trust. It drops Cove’s local root CA into your OS trust store plus every Firefox/Chromium NSS database it can find (snap-packaged browsers on Linux included), so *.localhost stops showing “Not Secure.” Fresh installs call it automatically; re-run it any time the root rotates.
Does Cove coexist with Local, Studio, or DevKinsta? +
Yes. If ports 80 / 443 are busy, the installer detects the conflict and offers alternatives, usually 8090 / 8453, chosen to avoid the crowded 8080 / 8443 / 8888 range. Switch back and forth any time with cove ports; existing WordPress sites get migrated via wp search-replace automatically.
Do I need to install PHP separately? +
No. Cove uses FrankenPHP’s bundled PHP for both the web server and wp-cli. A dedicated ~/Cove/php.ini is written at install time, so Cove has full control of memory_limit and error reporting without fighting a system-wide PHP.
How do I share a work-in-progress site with a client? +
Run cove share myblog. Cove installs cloudflared on demand and hands back a public HTTPS URL. Tear it down with Ctrl+C. For longer-lived access on your own devices, use cove tailscale enable instead.
What happens if I change ports on an existing site? +
Cove walks every WordPress site under ~/Cove/Sites/ and runs wp search-replace --all-tables --skip-plugins --skip-themes so the stored siteurl, home, and serialized content all match the new port. Use --dry-run first if you’re feeling cautious.
Can I run it on WSL2? +
Yes. Ubuntu, Debian, Fedora, RHEL, and WSL2 are all supported. WSL needs systemd enabled ([boot] systemd=true in /etc/wsl.conf). After install, cove wsl-hosts prints the PowerShell snippet to update Windows’ hosts file so sites resolve from your Windows browser.
Is it really free? +
Yep. Open source, MIT licensed. Source lives on GitHub, releases are cut straight from there. No account, no telemetry, no paid tier.