Docs
Importing sites
Bring your sites over from MAMP PRO, Local, Laravel Herd, Laravel Valet or XAMPP, and optionally move their databases into Covo.
On this page
Covo can read the site list of the tool you use today and create one Covo site per host, with the same name and the same folder. Your files stay where they are: nothing is copied or moved. The source tool is only read, never modified, and can keep running next to Covo.
Start with a dry run
covo import mamp --dry-run # what would be created; changes nothing
covo import mamp # create the sites
The same works for every source:
covo import local --dry-run
covo import herd --dry-run
covo import valet --dry-run
covo import xampp --dry-run
To import only some sites, repeat --site with the host name or the site name:
covo import mamp --site shop.local --site blog.local
In the app: File → Import from Another Tool…, then pick the source, the sites to import and, if you want, “Also migrate”.
Sources
| Source | What Covo reads | Sites |
|---|---|---|
| MAMP PRO | a temporary copy of its settings file | virtual hosts |
| Local | ~/Library/Application Support/Local/sites.json |
each site, served from app/public |
| Laravel Herd | ~/Library/Application Support/Herd/config/valet/ |
parked folders, linked sites and isolated PHP versions |
| Laravel Valet | ~/.config/valet/ |
parked folders, linked sites and isolated PHP versions |
| XAMPP | /Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf |
virtual hosts |
For MAMP PRO, Covo copies the settings file into its own folder, reads the copy and deletes it, so the original is only read once.
Domains
Imported sites keep their names: .local names (common with MAMP PRO) and the .test names of Herd and Valet. Covo serves those suffixes once you enable them, or you can switch to .localhost:
covo domains enable local # keep .local names (one admin authorization)
covo domains enable test # keep .test names (one admin authorization)
covo import mamp --localhost # or serve them as <name>.localhost instead
.localhost needs no setup at all. See HTTPS for what enabling .local or .test changes on your Mac.
A host without a reserved suffix (for example intranet) becomes intranet.local, with a warning. MAMP’s default localhost host is skipped.
What gets imported
| From the source | In Covo |
|---|---|
| host name | site name and domain (blog.client.local becomes site blog-client) |
| document root | the same folder, used in place |
| PHP 8.x | the same minor version |
| PHP 5.6 to 7.4 | the same version on Apple Silicon with macOS 15 or later, otherwise PHP 8.1 with a warning |
| no PHP version | the newest fully supported version, with a warning |
| SSL setting | ignored: every Covo site is HTTPS |
| aliases | imported, unless another site already uses them |
A host is skipped when its folder does not exist, when its name is not a valid host name, or when a Covo site already uses the domain. Running the import again only adds what is missing. All sites of one import are created together: if one fails, none is kept.
Old PHP versions are end of life. Run covo php check <site> to see what would break on a newer one (see PHP).
Databases without migration
A plain import leaves each site’s database settings as they were, so the site still talks to the source tool’s database. For MAMP PRO there is one convenience: if MAMP linked exactly one database to a site and a database with that name already exists on Covo’s MySQL, the new site is linked to it.
Assisted migration
With --migrate, Covo moves each new WordPress or Laravel site to work entirely from Covo:
covo import mamp --migrate --site shop.local
covo import local --migrate
For each site, in one step:
- The database is copied from the source tool’s MySQL into Covo’s MySQL. The source is only read, and it must be running: Covo never starts or stops it.
- The site gets its own MySQL user, with the password in your login keychain.
wp-config.php(or.env) is backed up to Covo’s folder, then only the database settings change:DB_NAME,DB_USER,DB_PASSWORDandDB_HOST(for Laravel, theDB_*keys andAPP_URL). If Covo cannot find each of those lines exactly once, it changes nothing. For other PHP sites, Covo shows the values to set yourself.- For WordPress, the old address is replaced with the Covo address in the database, with serialized data handled correctly.
Covo connects to the source with the credentials in wp-config.php or .env. To use others, pass --source-user and --source-password (asked on the terminal). They are used for that copy only and never stored.
To load a dump file instead of reading the source’s MySQL, for one site:
covo import mamp --migrate --site shop.local --dump ~/Backups/shop.sql.gz
If Covo already has a database with the same name, --existing use (the default) uses it, --existing recopy copies it again after a backup, and --existing skip leaves it alone.
If a step fails, everything that site’s migration did is undone. Other sites carry on.
The folder stays shared
Migration does not copy your project. After it, the site works from Covo, and the source tool’s copy of the same folder no longer reaches its database, so it would show old data.
Undo a migration
covo import undo shop
This restores wp-config.php or .env from the backup and deletes the database Covo copied, with its user. The site stays in Covo. In the app: Undo Migration in the site’s Advanced section.