Backups and moving
Take a snapshot before you try something, pack a site into a zip to hand to someone, bring one in from a backup, or pull a WordPress site down from its host and push it back.
Snapshots#
A snapshot is a copy of a site's files and database at one moment, kept under ~/Cove/Snapshots/<site>/. On APFS, btrfs and xfs the files are a copy-on-write clone, so taking one is quick and it only takes room as the site changes.
cove snapshot shop # take one
cove snapshot shop --note="before the update" # take one with a label
cove snapshot shop list
cove snapshot shop restore 20261018-142530
cove snapshot shop delete 20261018-142530
cove snapshot shop export 20261018-142530 # a zip of its files and db.sqlA restore puts the snapshot back in place, after taking a snapshot of how things were, so a restore can be undone too:
✅ Restored 20261018-142530 The state from just before is snapshot 20261018-150212 — restore it to undo.
Snapshots work for every kind of site, a Laravel app's whole project and database included. A site's snapshots tab in the dashboard takes, restores, downloads and deletes them too.
Backup zips#
cove backup packs a site's files and database into one zip, ready to hand to someone or bring back with cove import.
cove backup shop # to ~/Cove/Backups/shop-<date>.zip
cove backup shop --out=shop.zip # somewhere else
cove backup shop --keep # keep the snapshot it was made fromZips in ~/Cove/Backups stay when you delete a site.
Importing#
cove import makes a new site from a backup archive of any kind of site, a zip or a tar.gz, and rewrites its address to the new one.
cove import shop ~/Downloads/shop-backup.zipA Cove backup or snapshot export comes back as the kind of site it was. A Laravel app gets its database and its .env set up for the new name. An app from --from or a plain site comes back as it was. For WordPress from anywhere else, the archive needs the WordPress files (with wp-config.php or wp-settings.php at any depth) and a .sql or .sql.gz dump. Local's exports and most hosts' backups qualify. Multisite archives aren't supported yet.
You can also drop a backup zip on the dashboard's add form.
Plugin and theme history#
For WordPress and Minn Engine sites, Cove keeps a record of the plugins, themes and must-use plugins, saved each night while your computer is idle and whenever you ask. Each save lists what changed, with versions, so the list reads like a changelog. Any plugin or theme, or all of them, can go back to how it was on a given day.
cove history shop # the saves
cove history shop save --note="before WooCommerce 10"
cove history shop show a1b2c3d # what changed in one save
cove history shop diff a1b2c3d --plugin=woocommerce
cove history shop rollback a1b2c3d --plugin=woocommerce
cove history shop rollback a1b2c3d --allA rollback saves the current state first, so it can be undone. --theme=<slug>, --mu-plugin=<name> and --file=<path> pick other things to roll back, and latest works in place of an id. The record lives in the site's history/ folder, and in its history tab in the dashboard.
Pulling and pushing#
cove pull brings a WordPress site down from a host over SSH: it makes a backup on the host, downloads it and sets it up to run locally. cove push goes the other way and overwrites the host's files and database with your local site.
cove pull # asks for the connection, the folder and the site name
cove pull --ssh "dev@example.com -p 22" --site myblog
cove push --site myblog --ssh "dev@example.com -p 22" --yes| Flag | What it does |
|---|---|
| --ssh "<user@host -p 22>" | The SSH connection to the host. |
| --path <dir> | The WordPress folder on the host. public/ unless you say otherwise. |
| --site <name> | The local site. When pulling, an unused name is created and an existing site is overwritten. |
| --proxy-uploads | Pull only: leave wp-content/uploads behind and load media from the live site instead. Much quicker for a big site. |
| --tenant <id or domain> | On a WP Freighter host, one tenant site: its own tables and files. A push to a Freighter host always needs one, so it can't overwrite every tenant. |
| --yes | Confirm the overwrite. A push never assumes it, even from a script. |
Give every flag and either one runs without asking anything. The host needs no tools of its own beyond PHP: Cove uses zip, tar and mysqldump when they're there and falls back to PHP when they aren't, and brings WP-CLI along if the host has none. cove transfer probe shows which of those tools it finds on your computer, and with a site name, that site's table prefix, folders and URLs.
Database dumps#
cove db backup writes a .sql dump of every WordPress site's database into its private/ folder. See Databases.
Something wrong or missing here? Open an issue ↗ Every command also explains itself: cove help <command>.