JPBackup
Scheduled world and plugin backups with S3 upload and restore for Paper servers.
Downloads open soon.
Features
- Scheduled backups of worlds and plugin folders, with compression
- Keeps the newest backups and a total size limit
- Copy to another folder or upload to S3-compatible storage
/backup listand restore in game- Announcements and a Discord webhook
Requirements
- Paper 26.1 or newer (Java 25)
Installation
- Put
JPBackup-<version>.jarin your server'spluginsfolder. - Restart the server.
plugins/JPBackup/is created with the config and messages. - Change what you want in the files, then reload or restart.
Type /jp as an operator to see every JP plugin you have installed, its version and which optional plugins it found.
Commands
| Command | Description | Permission |
|---|---|---|
/backup <now|list|status|restore|delete|reload>Aliases: /backups, /jpbackup | Make, list and restore backups. | jpbackup.admin |
Permissions
| Permission | Default | Description |
|---|---|---|
jpbackup.admin | operators | Use /backup. |
Configuration
All files are in plugins/JPBackup/. Files: config.yml, messages.yml.
When you update the plugin, new options are added to your config.yml by themselves, with their comments. Your own settings stay as they are, and the old file is kept as config.old-v<number>.yml.
Languages: English, Spanish, Portuguese, French and German. Set language: in config.yml (en, es, pt, fr or de).
Default config.yml
# Used to add new options to this file after an update. Don't change it.
config-version: 1
# ╔══════════════════════════════════════════════════════════════════╗
# ║ JPBackup · config.yml ║
# ╚══════════════════════════════════════════════════════════════════╝
# Zip backups of your worlds and plugin data, on a schedule or with /backup now.
# The worlds are saved first and auto-save pauses while the files are copied; zipping
# happens in the background, so players do not notice. Apply with /backup reload.
#
# /backup now [note] make one now
# /backup list the newest backups
# /backup restore <name> [all] put a backup back on the next restart (asks twice).
# Without "all" only the worlds are restored.
# The current files are moved to backups/replaced-<time>.
# /backup cancelrestore changed your mind
# /backup delete <name> /backup status
# Language of the messages: en (messages.yml), es, pt, fr or de (lang/<code>.yml).
# Your own language: copy a file in the lang folder to lang/<code>.yml, translate it
# and set its code here (for example it for lang/it.yml).
language: en
# Replace messages.yml with the new design when the plugin is updated.
# Your old file is kept as messages.old-vX.yml. false = never touch it.
auto-update-style: true
# Where backups go. A relative path starts in the server folder.
backup-folder: backups
schedule:
enabled: true
# Times of day (24h, server time) to make a backup.
times: ['04:00']
# Also every X minutes (0 = only at the times above).
every-minutes: 0
# Do not make scheduled backups while nobody is online.
skip-when-empty: false
# How many backups to keep (the oldest are deleted). 0 = keep all.
keep: 10
# Also delete the oldest when all backups together are bigger than this (GB). 0 = no limit.
max-total-gb: 0
# 0 = no compression (fast, big), 9 = smallest (slow). 5 is a good middle.
compression-level: 5
include:
# Every world folder (the nether and end are inside the main world folder on Paper 26).
worlds: true
# The plugins folder: configs and data of every plugin.
plugins: true
# Other files or folders, relative to the server folder.
extra: [server.properties, ops.json, whitelist.json, banned-players.json, banned-ips.json]
# Left out of every backup. "folder/**" = a whole folder, "*.log" = by extension.
exclude:
- 'plugins/*/libraries/**'
- 'plugins/dynmap/web/tiles/**'
- 'plugins/BlueMap/web/maps/**'
- 'plugins/spark/**'
- '*.log'
- '*.log.gz'
- 'logs/**'
- 'cache/**'
- 'libraries/**'
# Also copy every backup to this folder (e.g. another drive or a mounted network share).
# Empty = no copy.
copy-to: ''
# Upload every backup to S3 or an S3-compatible storage:
# AWS S3: endpoint https://s3.<region>.amazonaws.com
# Backblaze B2: endpoint https://s3.<region>.backblazeb2.com
# Cloudflare R2: endpoint https://<account-id>.r2.cloudflarestorage.com, region auto
s3:
enabled: false
endpoint: 'https://s3.amazonaws.com'
region: us-east-1
bucket: my-minecraft-backups
access-key: ''
secret-key: ''
# Folder inside the bucket.
folder: 'minecraft/'
# Tell players with this permission when a backup starts and ends. '' = everyone.
announce: true
announce-permission: 'jpbackup.admin'
# Post a line in a Discord channel after every backup (channel settings > Integrations).
discord-webhook: ''Support
Guides and the docs of every JP plugin are on the JP Plugins website. Questions, bugs or ideas? Join the JP Plugins Discord.
License
JPBackup is free to use on any server, including servers that make money, but it is not open source. Don't reupload, sell or share modified copies of it. The full terms are in LICENSE.txt, which is also inside the jar.