Open source · GPL-2.0 FTP only · no SSH CLI + WordPress plugin

Migrate a WordPress site
over FTP, hassle-free

WP Migrate Toolkit moves files + database from one host to another using only FTP access — ideal for shared hosting where you have neither SSH nor a remotely reachable database.

wpmig — FTP migration
 $ python3 wpmig.py migrate -c monsite.yml [1/2] SOURCE — export  base exportée : 77 tables
 fichiers archivés (zip) : 12 776 fichiers
[2/2] DESTINATION — import  extraction : 12 776 fichiers, 0 erreur
 base importée : 77 tables
 search-replace : 282 lignes
✓ Terminé en 92 s.  
The problem

Migrations on shared hosting are a nightmare

No SSH, a MySQL database on localhost, server-to-server FTP blocked, an invalid FTPS certificate. WP Migrate Toolkit works around all of it.

Without the tool

Blocked server-to-server transfers, a database unreachable from outside, fragile manual scripts, and serialized URLs corrupted at the slightest domain change.

With WP Migrate Toolkit

Your machine acts as the FTP go-between; the PHP agent exports/imports in place; the URL is replaced cleanly. All automated and cleaned up.

Features

Everything for a reliable migration

From shared hosting to VPS, no surprises.

FTP only, no SSH

Built for shared hosting: no shell access required. The localhost MySQL database is exported and imported by a PHP agent running in place.

CLI + Plugin

A config-driven command-line tool AND a click-button WordPress plugin. The same shared engine on both sides.

Safe search-replace

Serialization-safe URL replacement: never breaks WordPress serialized data, even when the URL length changes.

ZIP / TAR fallback

Auto-detects ZipArchive; falls back to a .tar (PharData) if the zip extension is missing on the source host.

Shared FTPS handled

Invalid certificates ignored and Pure-FTPd/LWS TLS session resumption supported out of the box.

Automatic cleanup

The agent, token and artifacts are removed after each phase. Nothing left behind in production.

How it works

Three steps, one clear flow

Driven by a config file or from the WordPress admin.

Source (FTP)

Agent PHP : export base + archive fichiers

Intermédiaire

Votre machine ou un VPS relaie le transfert

Destination (FTP)

Extraction, import base, search-replace

1

Source

The agent exports the database (.sql) and archives the files (.zip or .tar), then the tool downloads them.

2

Destination

Upload + extraction, patching of wp-config.php, then database import.

3

Finalization

Serialization-safe URL search-replace, then a full cleanup of temporary files.

Download

Free and open source

The WordPress plugin, the CLI, or both.

WordPress plugin

To export/import from the admin.

  • Interface under Tools → WP Migrate
  • Export / import a package
  • Built-in search-replace
Plugin (.zip)

FTP CLI

To migrate A → B in one command.

  • Automated migration
  • Driven by a YAML file
  • No WordPress admin required
CLI (.zip)
FAQ

Frequently asked questions

Direct answers, also written for search engines and AI.

Can I migrate without SSH access?

Yes. WP Migrate Toolkit only needs FTP access on both sides. A small PHP agent is dropped on the server, run over HTTP, then deleted: it exports/imports the database (reachable only on localhost) from inside the server.

Why not Softaculous or Duplicator?

On shared hosting, Softaculous remote FTP import often fails (Connection refused: server-to-server FTP is blocked). Here, your machine or a VPS acts as the go-between and the heavy extraction runs in place. Duplicator requires access to each site’s WordPress admin.

Does URL replacement break serialized data?

No. The tool applies a recursive serialization-safe search-replace that correctly re-encodes the lengths of WordPress serialized strings.

What if the source server lacks the ZipArchive extension?

The tool automatically falls back to a .tar archive via PharData, available even without the zip extension. Extraction on the destination detects the format.

Are my passwords sent anywhere?

No. The agent is protected by a random token, compared in constant time. Optional telemetry only sends counters (tables/files, duration, success/failure), never any credential.

Ready to migrate painlessly?

Download the plugin or the CLI, or browse the code on GitHub.