Start a project
contact@dicecodes.com

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.

None file size limit
4 parts moved: database, themes, plugins, uploads
GPL free and open source
0 data collected
{ the problem }

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 does }

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.

{ what it will not touch }

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.

{ requirements }

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.

{ installing it }

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.

{ moving it }

What happens at each step

  1. 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.

  2. 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.

  3. 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.

  4. Save permalinks

    Settings, Permalinks, Save once. Then check the front page, the images and the links, and clear any cache.

{ before DNS moves }

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.

{ where the archive sits }

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.

{ what it does not do }

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.