Open Migration — Move a WordPress Site With No Size Limit
Export a whole WordPress site to one archive and import it somewhere else, with no size ceiling and no paid tier. It runs in resumable batches, so a large site on shared hosting does not die at a timeout.
Most migrations fail for one of two reasons
Either the archive is bigger than the host will accept, or the import times out halfway. Both are ordinary on Indian shared hosting.
We wrote this because we move sites every week and kept hitting the same wall. The long version of that problem is in how to import a WordPress site larger than your upload limit, which is still the most useful thing we have published.
What it moves, and what it fixes on the way
The whole site in one archive
Database, themes, plugins and uploads into a single zip. It skips cache folders and other plugins’ backup folders, so the archive is the site rather than the clutter around it.
Resumable batches
Export and import run in small AJAX steps that pick up where they stopped. That is what lets a multi-gigabyte site move on hosting that kills a request after thirty seconds.
Serialised data handled properly
The domain is rewritten inside serialised PHP, JSON-escaped block markup and URL-encoded links. This is the thing a plain find-and-replace gets wrong, and it is why widgets and settings come out empty when people do it by hand.
Server paths and table prefixes
Absolute paths stored by page builders and cache plugins are updated, and the table prefix is converted during restore.
Site to site, no download
A one-time token over the REST API moves a site directly to another install without the archive touching your laptop.
A change domain tab
For switching to the real domain after DNS moves, or from http to https, without doing the whole thing again.
Deliberately out of scope
wp-config.php and core files
Never overwritten. Your database credentials and salts on the destination stay as they are, which is what you want.
Multisite
Not supported. The plugin detects a multisite install and refuses rather than half-working.
Your data
It makes external requests only when you use the site-to-site tab, and only to the address you typed.
Before you start
ZipArchive
The PHP extension has to be available. Most hosts have it; if yours does not, support can usually switch it on.
Disk space
The practical limit is room for the archive alongside the site, rather than any cap in the plugin.
A backup you did not make with this
Any migration tool can fail. Take the host’s own backup first, always.
One thing that trips people up
Search WordPress.org for the full name, Open Migration Unlimited Site Transfer. Searching for “open migration” on its own puts the larger, better-known plugins first and ours well down the list. Install it on both sites, the one you are leaving and the one you are moving to.
What happens at each step
-
Export
The Export tab checks the server first: ZipArchive present, backup folder writable, enough disk space. Then it dumps the database and zips the files in batches.
-
Import
Drop the zip on the new site. It extracts, restores the database and converts the URL, the server path and the table prefix. It tells you how many database rows it changed.
-
Log in again
With the <em>original</em> site’s username and password, because the archive brought its user accounts with it. If you are an administrator on both, you are signed back in automatically.
-
Save permalinks
Settings, Permalinks, Save once. Then check the front page, the images and the links, and clear any cache.
You can migrate first and switch the domain later
Import onto a temporary address, a staging subdomain or an IP. When DNS points at the new server, run Check DNS in the Change Domain tab. It requests the new address with a one-time token and looks for the plugin’s own marker in the reply, so you get one of three honest answers: confirmed, not this site, or could not reach it. The last usually means your host blocks outbound requests rather than anything being wrong.
Security of the backup itself
Not publicly readable
Archives live under uploads in their own folder, with deny rules for Apache and IIS and 32 random characters in every filename. Downloads stream through WordPress after a capability and nonce check, so the folder never has to be readable from outside. That last part matters on Nginx, which ignores .htaccess entirely.
Entries validated before extraction
Each file in the archive is checked one at a time on the way out, rather than trusting the zip.
Transfer tokens expire
A site-to-site token is one use and valid for 24 hours.
Stated plainly, because you may need something else
No scheduled or cloud backups
There is no nightly backup to Google Drive. If you want that, run a backup plugin alongside this one. We would rather say so than have you find out in an emergency.
The browser tab has to stay open
Batches are driven by the page, so the tab must stay in the foreground while an export or import runs.
An import replaces the destination
Completely, and it cannot be undone. Back the destination up first if there is anything on it.
No multisite
Detected and refused, rather than producing a half-working copy.
Changing the domain is never automatic
By design. You confirm it.
Full setup instructions, troubleshooting and the privacy notes are in the Open Migration documentation.
Is there really no size limit?
There is no limit in the plugin. Your disk space and your host are the practical ceiling. The batching is what avoids the timeout that usually stops large sites.
Will it break my widgets and settings?
That failure comes from replacing URLs with plain SQL, which changes the text but not the string lengths PHP records. This rewrites the lengths too.
Does it work on multisite?
No. It detects multisite and refuses rather than producing a broken copy.
What does it send to you?
Nothing. There is no analytics and no phone home. The only outbound request is a site-to-site transfer you start yourself.
Where does the archive get stored, and can anyone download it?
Under uploads in its own folder, with deny rules and 32 random characters in the filename. Downloads stream through WordPress after a permission check, so the folder never needs to be publicly readable — which is what keeps it safe on Nginx too.
Can I migrate before changing DNS?
Yes. Import onto a temporary address, then use Check DNS and the Change Domain tab once DNS points at the new server.
Is it free?
Yes, GPLv2, on the WordPress.org repository. No paid tier and no upsell.
Rather not do the migration yourself?
We move sites every week, including the ones that already went wrong once.