Production-ready backup plugin for Paper / Spigot targeting Minecraft 1.21 through 1.21.11.
- Fully asynchronous backup pipeline (no blocking file I/O/compression on main thread)
- Modular service architecture:
BackupManagerCompressionService(strategy pattern)StorageServiceRetentionServiceSchedulerService
- Scheduling modes:
- fixed interval
- cron
- idle/no-player windows
- scheduled restart with backup
- startup/shutdown trigger flags
- Player controls:
- kick players at backup start
- block joins while backup runs
- require empty server
- wait-for-empty timeout
- Full snapshot backups by default (incremental disabled by default)
- Restore command with confirmation + partial scopes (
worlds,plugins,config,all) - Retention enforcement:
- max count
- max age
- max total size
- Integrity options:
- SHA-256 checksum
- post-backup verification
- Safety checks:
- disk space threshold
- partial backup cleanup
- overlap prevention
- Config auto-updater for missing keys (with backup on large migrations)
- Modrinth update checker
- Optional FastStats integration toggle
- Audit logging to
plugins/BetterBackups/backup.log
/backup now- run a backup now/backup list- list backups/backup delete <id>- delete backup/backup restore <id> [all|worlds|plugins|config] [confirm]- restore backup/backup reload- reload config and scheduler
backup.runbackup.restorebackup.listbackup.admin
- Run pre-backup commands and
save-allon main thread. - Optionally run
save-off. - Stage files to temporary folder.
- Compress staged data.
- Atomically move archive to final storage.
- Write metadata/manifest, run retention, post commands, optional
save-on.
- Native ZIP support is always available.
- Compression type is now selected automatically from
backup.compression.level:0-2->tar3-6->zip7-9->7z
- Optional external binary for
tar/7z:- Preferred: set per-format paths:
backup.compression.tar_binary_pathbackup.compression.seven_zip_binary_path
- Legacy fallback path:
backup.compression.binary_path, or - Enable startup download with
backup.compression.auto_download_binary_on_startup: true - Provide download URLs:
backup.compression.tar_download_urlbackup.compression.seven_zip_download_url
- Preferred: set per-format paths:
- Automatic fallback to ZIP when external compression is unavailable.
- Build:
./gradlew build
- Copy
build/libs/BetterBackups.jarintoplugins/. - Start server once to generate config (or use bundled config).
- Configure
src/main/resources/config.ymlvalues for your server workload.
- Restore is destructive by nature; always use explicit confirmation and test restores on a staging server first.
- Incremental restore applies the backup chain from the last full backup to the selected backup.