Docs
Importing sites
Bring your sites over from MAMP PRO, Local, Laravel Herd, Laravel Valet or XAMPP, and optionally move their databases into Benbow.
On this page
Benbow can read the site list of the tool you use today and create one Benbow 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 Benbow.
Start with a dry run
benbow import mamp --dry-run # what would be created; changes nothing
benbow import mamp # create the sites
The same works for every source:
benbow import local --dry-run
benbow import herd --dry-run
benbow import valet --dry-run
benbow import xampp --dry-run
To import only some sites, repeat --site with the host name or the site name:
benbow 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 Benbow 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, Benbow 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. Benbow serves those suffixes once you enable them, or you can switch to .localhost:
benbow domains enable local # keep .local names (one admin authorization)
benbow domains enable test # keep .test names (one admin authorization)
benbow 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 Benbow |
|---|---|
| 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 Benbow 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 Benbow 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 benbow 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 Benbow’s MySQL, the new site is linked to it.
Assisted migration
With --migrate, Benbow moves each new WordPress or Laravel site to work entirely from Benbow:
benbow import mamp --migrate --site shop.local
benbow import local --migrate
For each site, in one step:
- The database is copied from the source tool’s MySQL into Benbow’s MySQL. The source is only read, and it must be running: Benbow 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 Benbow’s folder, then only the database settings change:DB_NAME,DB_USER,DB_PASSWORDandDB_HOST(for Laravel, theDB_*keys andAPP_URL). If Benbow cannot find each of those lines exactly once, it changes nothing. For other PHP sites, Benbow shows the values to set yourself.- For WordPress, the old address is replaced with the Benbow address in the database, with serialized data handled correctly.
Benbow 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:
benbow import mamp --migrate --site shop.local --dump ~/Backups/shop.sql.gz
If Benbow 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 Benbow, and the source tool’s copy of the same folder no longer reaches its database, so it would show old data.
Undo a migration
benbow import undo shop
This restores wp-config.php or .env from the backup and deletes the database Benbow copied, with its user. The site stays in Benbow. In the app: Undo Migration in the site’s Advanced section.