★ Free plugin

Sitecarry — backups you can actually restore.

Packages your whole site — every file plus a full database export — into one archive, with a standalone installer that rebuilds it on any server. The build runs in short, resumable slices, so it finishes on shared hosting that kills a request after thirty seconds.

3cloud destinations
ZIP64no 4GB ceiling
WP 7.1tested up to
  1. Build a package
  2. Download archive + installer
  3. Upload both to the new server
  4. Open installer.php
The installer never loads WordPress, so it can replace the files WordPress runs from.

Overview

What this WordPress backup plugin does.

A backup is only worth what it restores. Every Sitecarry package carries the files, a complete database export and a standalone installer — one program that rebuilds the site on a server with no WordPress on it at all, rewriting URLs and paths as it goes.

The hard part of moving a WordPress site is that a lot of its settings are PHP serialized data, where every string carries its own byte length. A plain search and replace breaks those lengths, and that is how a migration quietly wipes widget settings and page builder layouts. Sitecarry rewrites the serialized form directly and repairs the lengths, including the JSON-escaped URLs Elementor stores its content in.

Features

What's inside.

Get it on WordPress.org ↗︎

Restores on any server

Every package ships with an installer.php that needs no WordPress on the target. Same file for moving hosts, cloning live to staging, or rolling a site back.

Survives shared hosting

Both the build and the restore run in short slices and resume exactly where the last request stopped, so a 30-second execution limit is not the ceiling on your site size.

Off-site storage

Amazon S3 or anything that speaks it — Backblaze B2, Wasabi, DigitalOcean Spaces, MinIO — plus FTP and Google Drive. A restore can pull the archive back down when the old server is gone.

Scheduled and incremental

Hourly to weekly, with retention that counts complete sets. Incremental packages carry only changed files, and a full backup is taken automatically often enough to cap the replay.

Page-builder-safe URLs

Serialization-aware search and replace that repairs string lengths and handles the JSON-escaped form Elementor and other builders store. Layouts survive the move.

Verify and WP-CLI

Check a package against its recorded size and checksum before you need it. wp sitecarry backup has no execution limit and no tab to keep open, and verify exits non-zero so it can run from a monitor.

Screenshots

What it looks like.

Sitecarry Backups screen listing packages with restore passphrases
Sitecarry Settings screen showing schedule, retention and exclusions
Sitecarry Storage screen configured for Amazon S3
Sitecarry Notifications screen with failure alerts configured

Pricing

Free. All of it.

A migration, done for you

Quoted

Sitecarry is the tool we use to move sites. If you would rather the move simply happened, that is a service we offer.

  • Host-to-host migrations
  • Staging and go-live
  • DNS, SSL and email carried across
  • No downtime window to sit through
Migration services ↗︎

Sitecarry is on the WordPress.org plugin directory, so you install it like any other plugin — search for it from your dashboard, or download it from the listing. Updates arrive through the normal WordPress updates screen.

Changelog

Release history.

  • v1.33.0

    Connecting Drive used to mean creating a Google app of your own — ten minutes in a console most people never spend. Now you press Connect with Google, approve it at Google, and it is done. Your backups still upload from your server straight to Drive; what passes through dotance.com is the approval and a token refresh about once an hour. Making your own Google app is still there for anyone who wants nobody in the middle.

  • v1.32.0

    The activity record can now be emptied from a link in that card — useful when a site changes hands, or when the failures in it were all yours from testing. The packages themselves are untouched; only the record of what has happened goes.

  • v1.31.2

    On a site large enough that a backup runs in more than one pass, the finished archive could be written with an index length short by its last few entries, and no zip reader would open it. The length now comes from the packer's own running total rather than from the filesystem, whose answer lags behind on some hosts. Verify and rehearse caught this every time; replace any package that fails to verify with a fresh backup.

  • v1.31.1

    Listed on the WordPress.org plugin directory. Also fixed on Windows servers: each backup included every earlier package and its passphrase file, so packages doubled in size with every run. Linux and macOS servers were not affected.

  • v1.31.0

    The export is MySQL and the installer restores through mysqli, so on SQLite - WordPress Playground, or the SQLite integration plugin - a package would build and could never be restored. Sitecarry now refuses the backup there instead, with the reason on the screen.

  • v1.30.0

    The restore installer is assembled in memory and streamed straight to the browser, so the generated file exists only as the download itself and nothing is left behind on the site that made it.

  • v1.29.0

    That file holds the database password and the eight keys and salts that sign every login cookie, and a package can be uploaded to storage outside your control, so it is no longer included. A restore writes it instead: onto an existing install it updates the one already there, and into an empty folder it generates a new one with fresh keys. Restoring now starts with Get installer rather than Sitecarry writing a program into your WordPress folder.

  • v1.28.0

    Every query that names a table now passes the name through an identifier placeholder, all remote requests inside WordPress go through the HTTP API, and the plugin no longer raises PHP's execution time limit - each step is sized to fit inside the host's limit and resumes in the next request. WordPress 6.2 or later is required.

  • v1.27.0

    The status strip no longer wraps, so its five boxes stay the same height. A backup's restore passphrase now sits beside the Restore button that asks for it, instead of at the far end of a mostly empty row. And Settings keeps the first line under each control, folding the reasoning behind it into a short link — so the screen is a list of settings again rather than three paragraphs under each one.

  • v1.26.0

    Same controls, same words, laid out like what they are: evidence. One state mark used the same way everywhere, facts in a monospace face and sentences in the admin's own, each package as a row with its state and its two actions, a timeline for recent activity, and settings grouped into cards with a one-line explanation beside each. Nothing loads a font or an image, and accents follow your admin colour scheme.

  • v1.25.0

    The status strip no longer wraps its fifth item onto a row of its own — it was built for four, and a fifth arrived with rehearsal reporting. New screenshots too, showing the rehearsal, the activity log and the storage set-up guides; the old ones predated all three.

  • v1.24.0

    Progress that keeps moving — "3,200 of 11,077 files" beside the percentage, which on a large site sits still for minutes. Deleting a backup now names it, and says so when it is one that has been proven to restore or the only copy that exists anywhere. The progress bar follows your admin colour scheme, the screen is laid out for narrow ones, and the status strip, progress bar and results now read properly to a screen reader.

  • v1.23.0

    The Backups screen now shows what has actually happened — backups, rehearsals and deletions — with a thirty-day summary above it. Every other record lives with its package and disappears when retention prunes it, so on a site keeping five backups nothing older than five days had ever been visible. This log outlives the packages it describes. Each backup also now has one primary action instead of six buttons of equal weight, with Delete set apart from Restore.

  • v1.22.0

    A mangled line of JavaScript had left the buttons on the restore installer unresponsive. The archives themselves were never affected. Every build now assembles the installer and runs both a PHP and a JavaScript parser over it, so this cannot return unnoticed.

  • v1.20.0

    Google Drive and Amazon S3 both failed to upload because response headers were being read the wrong way — an error that looked like the service refusing. Failures now say what actually came back rather than naming the service.

  • v1.19.0

    Sitecarry can now prove your newest full backup every week on its own, and tells you only when it fails. The hour follows your backup hour, so a rehearsal never lands on top of a backup.

  • v1.16.0

    Verifying tells you an archive still opens. Rehearsing imports it — into scratch tables of its own, then throws them away — and checks the row count, that serialized data survives a domain change, and that what comes out is a WordPress that would actually work. A backup nobody has tested is a hope, not a backup.

  • v1.15.0

    Deleting the plugin now clears its settings and scheduled events, and deliberately leaves your packages alone — deleting a plugin should not destroy the only copy of a site.

  • v1.14.0

    Ten fixes, most of them cases where an interrupted backup could resume into a corrupt archive. The database export now pages by primary key, which is both correct and far faster on large tables.

  • v1.12.0

    Sitecarry writes the ZIP itself, appending and never rewriting, so build time grows with the size of the site instead of with its square. ZIP64 throughout, and PHP's zip extension is no longer needed.

  • v1.11.0

    Two more destinations, both chunked and resumable. Drive uses an OAuth client of your own, so authorisation never routes through anyone else's servers.

  • v1.10.0

    When the archive is no longer on the server — pruned, or because the server itself is gone — the installer downloads it from S3. That is the situation a backup exists for.

Questions

Questions about this WordPress backup plugin.

If you would rather not do the migration yourself, the website migration page covers that.

How do I migrate a WordPress site to a new domain for free?

Build a package with Sitecarry (files plus a full database export), upload the package and its installer to the new hosting, open the installer in a browser and enter the new database details and the new URL. The installer rewrites every URL in the database, including the serialized data inside Elementor and theme settings, so layouts survive the move. The plugin is free and needs no licence.

How do I back up a WordPress site to Google Drive automatically?

Connect Google Drive on Sitecarry's Storage screen, then set a schedule — hourly, twice daily, daily or weekly — with how many packages to keep. Each backup runs in the background in short resumable slices, so it works on shared hosting, and the finished package is uploaded to your own Drive. You can restore straight from Drive when the copy on the server is gone.

How large a site can it handle?

Comfortably into the tens of gigabytes. Sitecarry writes its own archive format rather than using PHP's zip extension, appending each file to the end and never rewriting what is already there — so the work grows with the size of the site instead of with the square of it. ZIP64 is used automatically, so neither the archive nor any file in it stops at 4GB.

You still need free disk space for the package, and enough for the database export while it is being written.

Why does the restore not run inside WordPress?

Because it replaces the very files WordPress is running from. Anything doing that from inside WordPress would be pulling the floor out from under itself partway through.

The installer is a standalone program that never loads WordPress, which is also why it works on a server that has nothing installed on it yet.

The same reasoning is why WordPress itself documents a manual restore as a file-level operation rather than something done from the dashboard — see the WordPress backup documentation.

Will my Elementor layouts survive a move to a new domain?

Yes, and this is the part most migrations get wrong. WordPress stores a lot of settings as PHP serialized data, where every string records its own byte length; replacing a domain with a longer one using a plain search and replace breaks those lengths and WordPress can then no longer read the value.

Sitecarry rewrites the serialized form directly and repairs the lengths, and it also handles the JSON-escaped form (https:\/\/) that Elementor and other page builders store their content in.

Does verifying a package prove it will restore?

No, and nothing short of restoring it does. Verifying proves the archive is the one that was written, still opens, and holds the files a restore starts from — which catches truncated uploads, disks that filled mid-write, and silent corruption. It cannot tell you the database inside will import cleanly on a different server.

Where are the packages kept, and can anyone else reach them?

In wp-content/uploads/sitecarry/, with an unguessable filename, direct web access blocked by .htaccess and web.config, and downloads served only through an authenticated admin request — never a public URL.

Every package also has its own restore passphrase, shown in the admin and deliberately kept out of the archive, so an installer left behind on a server cannot be used by anyone else to overwrite the site.

When packages are sent off-site, use a key scoped to one bucket rather than an account-wide one — Amazon S3 and every service that speaks its protocol support this, and it limits what a leaked key can reach.

What happens to my backups if I delete the plugin?

Nothing. Sitecarry removes its own settings and scheduled events and leaves the packages in wp-content/uploads/sitecarry/ exactly where they are — deleting a plugin should never be the thing that destroys your last copy of the site. Delete that folder yourself once you are sure.