A free WordPress plugin from Geek By Choice

Steadfast BackupFree WordPress backup, restore and migration plugin

Scheduled backups of your whole WordPress site, copies kept safely off the server, and a restore you can trust when something goes wrong.

Free, with every feature included. WordPress 5.6 or newer, PHP 7.4 or newer.

The Steadfast Backup dashboard showing the latest backup, the next scheduled backup and the Back up now form

Everything a backup plugin should do

Each backup is one standard .tar.gz archive holding your database, plugins, themes, uploads and the rest of your site, so you can open it with ordinary tools even without WordPress.

Schedules your way

Hourly, twice a day, daily, weekly, monthly or any cron expression. Each schedule has its own contents, storage and how many backups to keep.

Incremental backups

Store only the files that changed, with a fresh full backup every few runs. Every backup still keeps the complete database.

Copies off the server

Google Drive, Dropbox, OneDrive, pCloud, Amazon S3 and S3-compatible services, FTP, FTPS, SFTP, WebDAV, Nextcloud or another folder.

One-click restore

Restore from any stored copy. The archive is read in full before anything changes, and files are written safely.

Test a backup

Reads every archive and imports the database into temporary tables to prove it restores, without touching your site.

Move to a new host

Restore a backup on another site and addresses, server paths and table prefixes are converted, including inside saved settings.

Optional encryption

AES-256 encryption with your own password, off by default. A separate tool decrypts archives without WordPress.

Split archives

Break large backups into parts of any size for hosts and storage services with file or upload limits.

Backup before updates

Make a backup right from the Updates, Plugins and Themes screens before you update anything.

Uploads that recover

If your cloud storage is down, the backup still finishes on the server and the upload is tried again every hour for 7 days.

Alerts

Email notifications, plus optional webhook alerts for Slack, Discord or any JSON endpoint, on success, failure or both.

Built for big sites

Work runs in short slices that resume on their own, uploads are chunked, and full WP-CLI commands are included.

Restore with confidence

Every backup in one list

See when each backup ran, what it holds and where its copies are stored. Restore, download or test any of them from the same row.

  • Restore the whole site, or only chosen parts, single plugins or themes, or single database tables.
  • Upload an archive from your computer in chunks, past PHP upload limits.
  • Lock important backups so they are never deleted.
The Backups page listing scheduled and manual backups with Restore, Download and More buttons

Set it and forget it

Schedules that clean up after themselves

Keep the latest few backups, or keep daily, weekly and monthly copies by age. Older backups from each schedule are removed for you.

Schedules use WordPress cron by default, and the built-in instructions show how to add a server cron job so they run right on time.

The Schedules page with a nightly incremental site backup and an hourly database backup

Your storage, your accounts

Keep copies where you already store things

Add as many storage locations as you like and choose which backups go to each one. Saved passwords and keys are encrypted on your site, and the backup folder on your server blocks web access.

The Add storage screen showing server folder, FTP, SFTP, Amazon S3, WebDAV, Dropbox, Google Drive, OneDrive and pCloud

Google Drive

Two ways to connect Google Drive

Sign in on google.com/device with a short code. You never paste passwords into your site.

The Add Google Drive storage form showing the easy connection and the option to use your own Google app

Easy connection

Nothing to set up. Scheduled backups still run as often as you choose and stay on your server, then go to Google Drive together once a day. Backups you start yourself upload right away.

Your own Google app

The most reliable cloud connection, with no daily limit. It takes about 10 minutes to set up once, and the plugin walks you through every step.

Either way, Steadfast Backup asks only for access to the files it creates in your Drive. It cannot see, open or change anything else you keep there. Sign-in tokens are stored encrypted in your own site's database and are sent only to Google. Nothing goes to Geek By Choice.

Steadfast Backup's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.

Read the Steadfast Backup privacy policy for the full details.

In detail

How Steadfast Backup protects your WordPress site

A closer look at every part of the plugin: what goes into a backup, when backups run, where copies are kept, how a restore works and how to move a site. Everything described here is in the free plugin.

What a WordPress backup includes

Each manual backup and each schedule can be a Full backup (files and database), Database only or Files only. A file backup is made of parts, and you choose which parts to include:

PartWhat it holds
WordPress core fileswp-admin, wp-includes and the core files in the site root
Pluginswp-content/plugins and wp-content/mu-plugins
Themeswp-content/themes
Media uploadswp-content/uploads
Other folders in wp-contentEverything else in wp-content, such as languages
Other files in the site rootNon-WordPress files and folders beside WordPress

wp-config.php is always stored in the archive. A restore keeps the current site's wp-config.php, so a restore never changes your database credentials.

Leave out what you do not need

Exclude files with simple patterns, one per line, such as wp-content/uploads/videos or *.zip. A built-in option skips caches, logs and the archives of other backup plugins, so backups do not grow with copies of copies. You can also skip single files above a size you choose.

A database dump you can rely on

Every table with your site's prefix is included, plus views. The dump keeps table structure, AUTO_INCREMENT values, binary data, NULLs, zero dates and emoji. Large tables are read in batches, so a dump that is interrupted resumes exactly where it stopped. Large log tables can be left out.

Estimate size, under Back up now, reports the size of the database and of the files your settings include, and compares it with the free space on your server. The finished archive is usually 30 to 70 percent smaller after compression.

Scheduled WordPress backups

A schedule sets what to back up, how often, where to store it, whether to store only changed files and how many of its backups to keep. Add as many schedules as you like, for example an hourly database backup and a nightly full backup.

How oftenOptions
Every hourAt a minute you choose
Every few hoursEvery 2 to 23 hours
Twice a dayAt a time and twelve hours later
Every dayAt a time you choose
Every weekDay of the week and time
Every monthDay 1 to 31 and time; on shorter months it runs on the last day
CustomAny five-field cron expression, such as 0 3 * * 1-5 for 03:00 Monday to Friday

Times follow your site's time zone, including daylight saving changes. If a schedule comes due while another job is running, it waits in a queue and starts when that job ends. Run now starts a schedule right away with all of its settings.

Run schedules on time

WordPress runs scheduled tasks when someone visits the site. On quiet sites, add a server cron job. The Schedules page shows the exact address and WP-CLI command for your site, protected by a private key.

Retention that cleans up

Keep the latest N backups, or keep by age: the newest backup of each of the last 7 days, 4 weeks and 6 months by default. Separate limits cover manual backups, pre-update backups and server copies. Locked backups are never deleted.

Recommended setups

SiteSchedulesKeep
Personal blog or portfolioFull, every week, to one remote serviceThe latest 8
Business or brochure siteFull, every day, to one remote service plus this serverBy age: 7 daily, 4 weekly, 6 monthly
Busy blog, membership or forumDatabase every 6 hours, plus a daily incremental full backup, to two remote servicesDatabase: the latest 28. Files: 14 daily, 8 weekly, 12 monthly
Online shopDatabase every hour, plus a daily incremental full backup, to two remote servicesDatabase: the latest 48. Files: 14 daily, 8 weekly, 12 monthly
Large media siteDaily incremental full backup, a full backup every 14, remote storage onlyBy age: 14 daily, 8 weekly, 6 monthly

Storing copies with two different companies, for example Google Drive and Backblaze B2, protects you if one account is closed, locked or hacked.

Incremental backups that save time and space

Turn on Back up only changed files in a schedule and each backup stores only the files that are new or changed since that schedule's previous backup. Every incremental backup still contains the complete database, so a database restore never needs more than one archive.

  • Every file backup records an index of all files with their size and modification time. The next backup compares against it to find what changed.
  • The index also lists files that were deleted, so a restore does not bring them back.
  • Full backup every N backups (2 to 100, default 7) starts a fresh chain, so a restore never depends on a long line of archives.
  • Restoring combines the chain for you: the full backup first, then each incremental backup in order. The Restore dialog shows how many backups it combines, and every archive is checked before anything changes.
  • Retention never deletes a backup that a kept incremental backup builds on. If one is missing everywhere, the backup is marked Broken chain and its database can still be restored.

For a large media library, incremental backups turn a nightly multi-gigabyte upload into a few megabytes of new photos.

Back up WordPress to Google Drive, Dropbox, OneDrive, Amazon S3 and more

Every backup can go to this server, to any number of storage locations, or both. When a backup goes to remote storage only, the archive is built on the server, uploaded, and then removed from the server. Uploads are sent in chunks and resume after interruptions, and each location has a Test button that writes, reads and deletes a small file to confirm the settings.

Google Drive

Sign in with a short code on google.com/device. The plugin can reach only the files it creates. The easy connection uploads scheduled backups once a day; your own Google app has no daily limit.

Dropbox

Connects with your own Dropbox app using App folder access, so the plugin sees only its own folder. Uploads use resumable upload sessions. The form lists each setup step with links.

Microsoft OneDrive

Connects with your own app registration in Microsoft Entra, for personal or work and school accounts. Large archives upload in resumable upload sessions.

pCloud

Connects with your own pCloud app and uploads in chunked upload sessions. Sign-in tokens refresh automatically.

Amazon S3 and S3-compatible

Amazon S3, Backblaze B2, Cloudflare R2, Wasabi, DigitalOcean Spaces, Linode, Vultr, MinIO or any other S3-compatible service. Multipart uploads, a storage class choice such as STANDARD_IA, and unfinished uploads are cleaned up so you are not billed for leftover parts.

SFTP

Sign in with a password or a private key, including keys with a passphrase. The SFTP library is bundled, so no PHP extension is needed, and interrupted uploads resume.

FTP and FTPS

Plain FTP or explicit TLS (FTPS), with passive mode for most firewalls. Large archives resume from where an upload stopped.

WebDAV, Nextcloud and ownCloud

On Nextcloud, chunked uploads handle archives of any size and resume after interruptions. Other WebDAV servers receive one streamed upload per archive.

Another folder on the server

Store archives on a mounted disk or in a folder outside the web root.

Find backups from another site

A small description file beside each archive lets another site connected to the same storage find and import its backups with Find backups in storage.

When cloud storage is down

Each upload is tried three times during the backup. If it still fails, the backup finishes and stays on your server, and the upload is tried again every hour for 7 days. The Backups page shows the next try with a Try now link. After 7 days of failures you get an email and a webhook alert, and the server copy is kept.

Restore WordPress from a backup with one click

Select Restore on the Backups page, choose Database, Files or both, choose where to restore from if the backup is stored in several places, and confirm. The restore is built so a bad archive is rejected before your site changes:

  1. A backup stored only in the cloud is downloaded and its SHA-256 checksum is compared with the one recorded at backup time.
  2. Every archive is read to the end, so a damaged, incomplete or wrongly decrypted archive is rejected before anything changes.
  3. The database is imported into temporary tables and each table's row count is checked. Your live tables stay in use meanwhile.
  4. The site enters maintenance mode. Each file is written beside its target and swapped in only once it is complete.
  5. The new tables are renamed into place in one step, maintenance mode ends, caches are cleared and permalinks are refreshed.

Restore only what you need

Choose file parts such as Media uploads, single plugins or themes, or single database tables such as wp_options. Every other table, including users, stays untouched.

What a restore keeps

Your current wp-config.php, the installed copy of Steadfast Backup and your backup folder. A backup made with an older version is restored by the current one.

The restore runs through a small standalone engine, because WordPress itself is replaced while it runs. It accepts only requests that carry a one-time token and is removed when the restore ends.

Recover from common WordPress problems

An update broke the site

Restore the Before update backup made right before the update. If the dashboard shows a critical error, rename the broken plugin's folder by FTP or your host's file manager, sign in and restore.

A page or setting was deleted

Restore only the tables involved, such as wp_posts and wp_postmeta for pages or wp_options for settings. Comments, orders and users added since then stay in place.

The site was hacked

Restore a full backup from before the attack, from remote storage rather than the server. Then change every password and storage key, and update everything.

The host closed your account

Install WordPress and Steadfast Backup anywhere, connect the same cloud storage, choose Find backups in storage and restore.

Media files are missing

Restore Files only with just Media uploads checked. The database and everything else stay as they are.

You need one file

Download the backup and open it with 7-Zip, Archive Utility or tar. Every file sits at the same path it has on your site.

Migrate WordPress to a new host or domain

Steadfast Backup moves a site with the same restore you use every day, whether you are changing hosts, changing domains or taking a site from your computer to a live server.

  1. On the old site, make a Full backup and store it in the cloud, or download it.
  2. On the new host, install a fresh WordPress and Steadfast Backup.
  3. Bring the backup over: connect the same storage and choose Find backups in storage, upload the archive on the Backups page, or copy it by FTP and choose Rescan this server.
  4. Select Restore. The dialog shows the old and new addresses. Confirm, then sign in with an administrator account from the old site.

During the restore, every old address is replaced with the new one in every table, in plain, JSON-escaped and URL-encoded forms, for http, https and protocol-relative links, along with the old server path. String lengths inside PHP serialized data are corrected, including nested arrays and objects, so page builder data and widget settings survive the move. When the new site uses a different table prefix, tables and prefix-bound keys such as wp_user_roles are renamed to match.

Upload a backup sends the archive in chunks sized to your server's upload limit, so archives of any size upload through the browser. Sites built locally with Local, XAMPP or MAMP move the same way, and http://mysite.local becomes your live https address everywhere.

Create and update a staging site

A staging site is a private copy where you try updates or a redesign before visitors see them. Restore a live backup onto a fresh WordPress on a subdomain such as staging.example.com and the address is changed for you. Each site keeps its own Steadfast Backup settings and schedules.

When pushing changes back, restore only what you changed: chosen plugins and themes as files, or only the content tables you edited, so comments, orders and new users on the live site are kept.

Test a backup before you need it

A backup you have never restored is a hope, not a plan. More, Test this backup proves a backup restores without changing your site:

  1. Downloads the backup if it is stored only remotely and checks its SHA-256 checksum.
  2. Reads every archive to the end, including all parts and every backup of an incremental chain.
  3. Checks that the database dump is complete.
  4. Imports the whole dump into temporary tables and compares each table's row count with the count recorded at backup time.
  5. Removes the temporary tables and shows Test passed or Test failed on the Backups page.

Optional encrypted backups and split archives

Encryption is off by default. Turn it on in Settings, Security with a password of at least 8 characters, and every new archive is encrypted in full: files, database, manifest and index.

How it is encrypted

  • AES-256-GCM in 1 MiB chunks, each authenticated, so any change, reordering or truncation is detected.
  • The key comes from your password with PBKDF2-HMAC-SHA256, 600,000 iterations and a random salt per archive.
  • The password is stored encrypted on your site, so schedules, tests and restores there run without asking.

Open it anywhere

The included command-line tool joins split parts and decrypts in one step, without WordPress:

php tools/sfb-decrypt backup.tar.gz.enc backup.tar.gz

Nobody, including Geek By Choice, can open an encrypted backup without its password, so keep a copy somewhere other than your site.

Split archives for hosting limits

Split archives into parts of any size in megabytes when a host, cPanel File Manager, the WordPress uploader or a storage service limits file size. Each part uploads as its own file, the checksum covers all parts joined together, and Upload a backup accepts every part at once. Outside WordPress, join them with cat on Linux and macOS or copy /b on Windows.

Built for shared hosting and large sites

Web hosts limit how long one PHP request may run. Steadfast Backup splits every backup and restore into short slices, 20 seconds by default and always below your host's limit. Each step saves its position, so a slice stopped by the host resumes where it stopped.

  • After each slice, the next one starts with a background request. If your host blocks those, the open admin page continues the job, and a watchdog resumes it otherwise.
  • Progress is shown live while a job runs, and a running backup can be cancelled.
  • With WP-CLI, jobs run in one process with no time limit.
  • Requires room on the server for one compressed archive while it uploads.

Automatic backup before plugin, theme and WordPress updates

Turn on Settings, Before updates, and a backup is made before every update you start from the dashboard: Dashboard, Updates, and the Plugins and Themes screens, including one-click Update now links and bulk updates. A progress window makes the backup first, then continues with the update.

Choose Full or the faster Database only, where to store it and how many to keep. Further updates within 15 minutes in the same browser tab proceed without another backup. Automatic background updates and WP-CLI updates are covered by your schedules, or by running wp steadfast backup first.

Backup alerts by email, Slack and Discord

Email

Get an email when a backup or restore fails, and optionally when one succeeds, at one or more addresses. Messages include the site, job, result, size, storage locations, warnings and the last lines of the log.

Webhooks

Post alerts to a Slack incoming webhook, a Discord webhook or any address that accepts JSON, such as Zapier, Make, n8n, ntfy or Home Assistant. Covers backups, uploads, restores, backup tests and scheduled runs.

WooCommerce and busy sites

A database restore puts every chosen table back to the moment of the backup, which on a shop also removes orders placed since then. Steadfast Backup lets you restore only the tables you need and leave order and customer tables untouched. The built-in guide lists the WooCommerce order, customer and product tables, including High-Performance Order Storage. Restoring files is always safe for orders, since orders live only in the database.

For shops, an hourly database schedule plus a daily incremental full backup keeps the gap between backups small without large uploads.

WP-CLI commands for developers

Every action is available from the command line. Commands run in one process with no time limits, which suits system cron jobs, deployment scripts and very large sites.

wp steadfast backup --type=db --note="before import"
wp steadfast backup --to=local,<location-id> --incremental
wp steadfast restore <id> --files-only --components=uploads --yes
wp steadfast restore <id> --db-only --tables=wp_options --yes
wp steadfast test-backup <id>
wp steadfast list --format=json
wp steadfast status
wp steadfast sync <location-id>
wp steadfast cron
wp steadfast retry-uploads

Also included: decrypt, cancel, delete, storage and test. Developers can add storage drivers, exclusion patterns and actions after a backup or restore through WordPress hooks, all documented in the plugin's reference.

WordPress multisite backups

  • The plugin is network activated and runs on the main site only, for super admins.
  • Backups contain the tables of every site in the network and all files, including wp-content/uploads/sites.
  • Restore parts of single sites by choosing their tables, for example wp_2_posts and wp_2_postmeta for site 2.
  • A network database restore is accepted only on a multisite install at the same address, which protects you from mixing up networks.

Security and privacy

  • Storage passwords, keys and tokens are encrypted in your own database.
  • The backup folder blocks web access on Apache, LiteSpeed and IIS. On nginx, one line in the server settings does the same, and the System check reports whether the folder can be reached.
  • Downloads stream only through a signed-in admin request.
  • Access lock limits the plugin to chosen administrators. Others do not see its menu, notices or pages.
  • Every screen and request requires an administrator and a security token. Cloud sign-ins use PKCE and a one-time state value.
  • No usage statistics, no accounts and no license checks. Nothing is sent to Geek By Choice.

Read the Steadfast Backup privacy policy for exactly what is stored and where.

Open your backups with standard tools

Backups are ordinary gzip-compressed tar archives that open with tar -xzf, 7-Zip or any archive tool, so your data is never locked inside the plugin.

Inside the archiveContents
.sfb/manifest.jsonPlugin, WordPress, PHP and database versions, site addresses, table prefix, contents and table row counts
.sfb/database.sqlThe SQL dump, which also imports with the mysql client
.sfb/index.txtThe list of every file at backup time, used by incremental backups
wp-admin/, wp-includes/, wp-content/Your site files at their normal paths

Switching from another backup plugin? Install Steadfast Backup while the old one is still active, make and test a first backup, add your schedules, then turn the old plugin's schedules off. Keep the old plugin while you might still need its archives, since only it can restore them.

Set up WordPress backups in a few minutes

  1. In your dashboard, open Plugins, Add Plugin, search for Steadfast Backup, then install and activate it.
  2. Open Steadfast Backup and select Back up now for a first backup on your server.
  3. On the Storage page, add a cloud service and select Test.
  4. On the Schedules page, add a schedule that sends backups to that storage.
  5. Turn on Settings, Before updates.
  6. On the Backups page, choose More, Test this backup, and wait for Test passed.

Requirements

WordPress5.6 or newer, tested on 7.1
PHP7.4 through 8.5, with zlib and mysqli
DatabaseMySQL 5.6 or newer, or MariaDB 10.1 or newer
Cloud storagePHP curl; FTP needs the PHP ftp extension
EncryptionPHP OpenSSL with AES-256-GCM, standard on PHP 7.4 and newer

Step-by-step instructions for every storage service, restore and site move are inside the plugin under Settings, Docs, with a search box.

Frequently asked questions

Is Steadfast Backup really free?

Yes. Every feature on this page is in the free plugin. There is no Pro version, no account and nothing to unlock.

What do I need to run it?

WordPress 5.6 or newer and PHP 7.4 through 8.5, with MySQL 5.6 or MariaDB 10.1 or newer. It works on single sites and multisite networks.

Does the plugin send my data anywhere?

Only to the storage locations you add and the email or webhook addresses you enter. Nothing is sent to Geek By Choice.

How do I back up WordPress to Google Drive?

On the Storage page, choose Add storage, Google Drive, then Save and connect. Open google.com/device, enter the code shown and allow access. Then choose Google Drive in a schedule or under Back up now.

Why do my hourly backups reach Google Drive only once a day?

The easy Google Drive connection uploads scheduled backups once a day. Every backup still runs on time and stays on your server until then, and the daily upload sends all of them. Backups you start yourself upload right away. For every backup to reach Drive as soon as it finishes, connect with your own Google app.

What are incremental backups?

Backups that store only the files that changed since the previous backup, with a new full backup every few runs. Each one still holds the complete database, and a restore combines the chain for you.

What if my cloud storage is down during a backup?

The backup still finishes and stays on your server. The upload is tried again every hour for 7 days, and you are emailed if it still fails.

Can I restore just one plugin, theme or database table?

Yes. Under Choose what to restore, pick file parts, single plugins or themes, or single database tables. Everything you leave unchecked stays as it is.

Do restores change my database credentials?

No. The current site's wp-config.php is always kept, so the database connection stays the same.

How do I move a site to a new host?

Install WordPress and Steadfast Backup on the new host, upload the archive on the Backups page or connect the same storage location and choose Find backups in storage, then choose Restore. Addresses and table prefixes are converted automatically.

Can I open a backup without the plugin?

Yes. Each backup is a standard .tar.gz archive. The database is in .sfb/database.sql and site files keep their normal paths. Encrypted or split backups become a plain .tar.gz with the included decrypt tool.

What happens if I lose my encryption password?

Backups made with it cannot be opened by anyone, including Geek By Choice. Keep a copy of the password somewhere other than your site.

Which updates trigger a pre-update backup?

Updates started from the dashboard: Dashboard, Updates and the Plugins and Themes screens. Automatic background updates and WP-CLI updates are covered by your schedules.

Will large backups finish on a host that stops long requests?

Yes. Work is split into slices that fit your host's time limit and resume automatically. With WP-CLI, jobs run in one process with no time limit.

Does deleting the plugin delete my backups?

Backups in remote storage are never deleted on uninstall. Backups on your server and the plugin's settings are removed only when Delete data on uninstall is turned on.

Can it restore backups made by other backup plugins?

No. Steadfast Backup restores its own archives. Keep your old plugin until Steadfast Backup has made and tested enough backups of its own.

Where is the documentation?

Inside the plugin. Every setting has a click-open help tip, and the Docs tab under Settings has a searchable guide covering setup, every storage service, restores, recovery and site moves.

Found a problem?

Tell us what happened and we will look into it. The plugin also has a Report a problem button in its footer.

Report a problem