BACK TO DIRECTORY

Naqil Backup & Migrate

by Ameer Ali

5.0
(1 ratings)

Moving a WordPress site usually means downloading a huge archive and uploading it again — if your host lets you upload something that big at all.

Naqil does it with a link. Install it on both sites. On the old one, click Migration link next to a backup. On the new one, paste it and press Pull backup. The two servers transfer the site between themselves, and the new one applies it the moment the transfer lands: database, theme, plugins and uploads, with the old address rewritten to the new one.

You never download the file and you never upload it. The PHP upload limit never applies, because nothing passes through your browser. No FTP, no phpMyAdmin, no third-party service in the middle.

And nothing is held back for a paid version. There is no paid version.

The link is private and temporary

It carries a 48-character secret token, only the SHA-256 hash of that token is ever stored, it expires after 3 days, issuing a new link invalidates the previous one, and deleting the backup revokes it immediately.

It finishes on sites that are actually large

Measured on a real site of 1.8 GB and 72,000 files: 17 minutes, start to finished archive. The archive is built by appending to it rather than rewriting it for every batch, which is what turns a large backup from hours into minutes, and each batch works to a clock rather than a fixed number of files, so a request always finishes well inside whatever limit the server keeps.

When something goes wrong, it tells you where

Every request a backup or restore makes is written down before it runs, not after. So when a server kills a job — and on large sites that is what happens — the last line in the log is the step it died on, with the table and row it was working on at the time. Running out of memory or out of time is named outright, because those two are the ones that leave nothing else behind.

Most tools answer a failed migration with “migration failed”. This one answers with the request, the step, the table, the memory in use, and the limit it hit.

It works on hosts other tools give up on

Different table prefixes between the two sites, a MySQL 8 site moving onto MariaDB, a host without the PHP zip extension, a backup larger than the upload limit, a page cache plugin, an HTTPS site landing on a plain HTTP address — each of these is handled rather than left to fail.

Free means the whole thing, at any size

Site size is not a feature here. A 50 MB blog and a 5 GB shop use the same code and the same transfer, and neither is asked for anything. Cross-domain migration, site-to-site transfer, restores, the Activity log — all of it, out of the box, with nothing to buy later.

Your new domain will actually work

When you restore a backup made on a different URL, every occurrence of the old address is replaced with the new one — safely, including inside PHP-serialized and JSON-encoded data, where a naive search and replace corrupts theme, widget and plugin settings. The rewrite never calls unserialize(), so your database content cannot trigger code execution.

Nothing leaves your server

No third-party service, no account, no telemetry, no proprietary format. Backups are plain ZIP archives you can open on any computer, stored in a protected folder inside your uploads directory.

Features

  • One-click backup of your database and wp-content into a standard ZIP.
  • Chunked, resumable engine — handles large sites without PHP timeouts.
  • Restore from the backup list, or upload a ZIP from another site.
  • Site-to-site migration over a secret, expiring link — no download, no upload limits.
  • Serialization-safe URL replacement for moving to a new domain.
  • Custom find and replace in the database, applied safely as the backup is built.
  • Exclude spam comments, post revisions, the database, uploads, themes or plugins.
  • Secure downloads from the admin, protected by capability and nonce checks.
  • Fully translatable, with a complete Arabic translation and RTL-ready screens.
  • An Activity log that records every request a backup or restore makes — what it was working on, how long it took, how much memory it used — so a job that fails tells you where it stopped instead of leaving you guessing.
  • A “Check the source” button that asks the other site what it will answer, before a transfer starts rather than after it fails.
  • Built-in Help screen documenting every feature and how to use it.

Works well for

  • Moving a site from localhost or staging to a live server.
  • Cloning a site to a new domain.
  • Switching hosts.
  • Keeping a manual backup before a risky update.

Screenshots

The Backups screen: create a backup, then restore, download, share, or delete it.

The Backups screen: create a backup, then restore, download, share, or delete it.

Advanced options: serialization-safe find & replace, plus database and file excludes.

Advanced options: serialization-safe find & replace, plus database and file excludes.

Migrate & Import: pull a backup straight from another site over a link, or drop in a .zip.

Migrate & Import: pull a backup straight from another site over a link, or drop in a .zip.

The built-in Help screen documents every feature and how to use it.

The built-in Help screen documents every feature and how to use it.

Plugin Details

Active Installs
10
Total Downloads
192
Version
0.1.1
Requires WP
5.6
Requires PHP
7.2
Tested Up To
7.0.4
Added
2026-08-06
Last Updated
2026-08-15 1:11pm GMT

Ratings

5
1
4
0
3
0
2
0
1
0