BTFU — Back The Files Up

Descripziun

BTFU stands for Back The Files Up. Officially. Whatever else you think it might stand for says more about you than about us.

BTFU gives you git-style checkpoints for a whole WordPress site — files and database together — from a single button in the admin bar.

Take a snapshot, attach a note, break something, roll back. Hover the admin bar to see every snapshot with its note, timestamp, and size.

This is a development tool. It warns loudly if it thinks it is running in production.

It is also destructive by design. A restore overwrites your files and database; anything changed since the snapshot is lost unless you keep the automatic safety snapshot. BTFU’s snapshots live on the same server as the site — before you rely on it, have an independent, off-server backup from your normal backup tool.

Why another backup plugin?

Backup plugins protect you from disasters. This protects you from yourself, five minutes ago. It is built for the loop developers actually live in: snapshot, experiment, compare, roll back, repeat.

  • One click, one note. „before checkout refactor“ — attached to the exact state it describes.
  • Hardlinked snapshots. The second snapshot costs only what changed. Twenty snapshots of a 2 GB site is nowhere near 40 GB.
  • Honest sizes. Every snapshot shows its unique size — the bytes you actually get back by deleting it — because with shared storage, apparent size is a lie.
  • Every restore is undoable. An automatic safety snapshot is taken before any restore. Rolling back can itself be rolled back.
  • A standalone rescue script. Restores the site from the command line — or, password-gated, the browser — even when WordPress is a white screen. It is the same code path as normal restores, so it can never quietly rot.
  • Exclude what you don’t need. File patterns (rsync-style, plus a .btfuignore file) and database tables (structure-only, with core tables locked out — see FAQ).
  • WP-CLI. wp btfu snap "note", list, restore, verify, prune, doctor, selftest.

Restores are resumable: files AND database are imported in time-budgeted
chunks, so even large sites restore without hitting a request timeout.

What it deliberately does NOT do

  • Multisite (refuses to activate — a half-captured network is worse than none)
  • Move snapshots between sites/domains (serialized-data search-replace is out of scope)
  • Scheduled backups, offsite storage — this is a checkpoint tool, not a backup product

Disclaimer

Copyright © 2026 John Kirker Inc. All rights reserved.

BTFU is destructive. It overwrites and deletes files and database tables,
and restoring a snapshot can irreversibly lose current data. It is provided
„AS IS“, with NO WARRANTY of any kind. Use with caution — at your own risk and
peril. It is not intended for production use. By installing or using it you
accept all risk and, to the maximum extent permitted by law, waive all claims
against John Kirker Inc. and the author. Keep independent backups. The full
disclaimer and limitation of liability ship with the plugin as DISCLAIMER.txt.

Privacy

BTFU makes no external requests of any kind — no telemetry, no
update pings, no third-party services. The only HTTP request it ever performs
is a one-off fetch of this site’s own URL to verify the snapshot store is not
web-readable. All snapshots stay on this server. Uninstalling preserves
snapshots unless you explicitly opt in to deleting them; generated rescue
scripts are always removed on uninstall.

Maletgs dal visur

Installaziun

  1. First, make sure you have an independent, off-server backup. BTFU is destructive and its snapshots live on the same disk as the site.
  2. Upload the plugin and activate it.
  3. Click BTFU in the admin bar Back it up now…
  4. Optional but recommended: visit BTFU Settings, set a rescue password, and generate a rescue script. Save its URL somewhere outside this site.

FAQ

Where do snapshots live?

In a .btfu-store-<random> directory — outside the web root when possible, otherwise inside wp-content guarded by .htaccess/web.config and verified by an actual HTTP canary check (nginx ignores .htaccess, so we prove protection instead of assuming it).

Why can’t I exclude wp_posts from the database?

Core tables cross-reference each other by ID. Restoring posts without postmeta produces silent corruption, not a smaller backup. Non-core tables (analytics, logs, queues) can be excluded — they are stored structure-only, restore leaves their live data untouched, and strict-mode restores will never drop them.

What happens if a restore goes wrong?

A safety snapshot is taken automatically before every restore, so you can roll back the rollback. If WordPress itself won’t load, the rescue script restores from the CLI: php btfu-rescue-xxxx.php --list then --restore <id>.

Does deleting a snapshot free its full size?

No — and the UI never claims it does. Snapshots share unchanged files via hardlinks. Each snapshot’s listed „unique“ size is what deleting it actually reclaims.

Is it safe on a live site?

It’s designed for development. It will run in production, but it warns you persistently, and you should listen to it.

Do I still need real backups?

Yes. BTFU snapshots live on the same server as the site — they protect you from your own changes, not from disk failure, a compromised server, or a hosting disaster. Keep your normal off-server backups, and have one before your first restore.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“BTFU — Back The Files Up” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

0.10.0

  • First-run setup wizard: walks you through the risk, an environment check, your first baseline snapshot, and optional auto-snapshots. Re-runnable from BTFU Setup.
  • Automatic snapshots before plugin/theme/core updates (opt-in, off by default) — the moment you most wish you had a checkpoint. Bounded by their own retention rule.
  • Compare page: pick two snapshots and see file adds/modifications/deletions and per-table database row changes — with a one-click „restore from A“ on any changed path. (Also wp btfu diff.)
  • Diff: see exactly what changed between two snapshots — files (added/modified/deleted) and database (per-table row deltas). wp btfu diff <a> <b> [--files].
  • Selective restore: files only, database only, both, or a single file/folder (WP-CLI --skip-files/--skip-db/--only=<path>, the admin-bar dialog for files/database, and the rescue script).

0.9.1

  • Now requires PHP 8.2+ (PHP 7.4–8.1 are end-of-life; BTFU will not support EOL PHP).
  • Restore dialog: explicit overwrite warning, and a prominent alert when restoring without a safety snapshot.
  • Clearer guidance everywhere to keep an independent, off-server backup.
  • New: wp btfu selftest — one-command end-to-end health check (snapshot verify delete round-trip), exits non-zero on failure.
  • Hardening: a single store-wide operation lock now prevents a snapshot, restore, prune, import, or delete from running while another is in progress (it self-heals if a process crashes). wp btfu doctor reports any operation in progress.
  • Directory listing icon, banner, and screenshots.

0.9.0

  • Initial release: snapshots (rsync/PHP engines), restores (single shared engine with standalone rescue script), hardlinked storage, admin bar UI with notes and size pills, file + database excludes, retention/pruning with pinning, WP-CLI commands, production guards.