hytale-gfs-backup-1.0.1.jar
4 Feb 2026
CurseForge · Hytale mod
Smart tiered backup retention for Hytale servers.
Quick answer
WorldKeeper hytale-gfs-backup-1.0.1.jar targets Hytale. Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer. No required dependencies listed for this file.
Where it goes
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Put Hytale mods on the world host or dedicated server. Singleplayer runs a local server too; Hytale does not use separate client mods.
hytale-gfs-backup-1.0.1.jar. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional project dependencies. Check the creator notes before changing an existing world.
Before you install it
Built for WorldKeeper hytale-gfs-backup-1.0.1.jar. Pick another file and the loader, install side or required mods may change.
Use hytale-gfs-backup-1.0.1.jar. It targets Hytale; another release may target a different game build or dependency set.
This file does not list any required mods. Do not add a library just because a different file uses it.
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Use the “Get this file” button beside hytale-gfs-backup-1.0.1.jar. It opens that exact file at the source.
About this project
Smart tiered backup retention for Hytale servers.
The default Hytale backup system (AdminUI) takes a backup every X minutes and keeps the last Y copies. With a typical config of every 30 minutes keeping 10 backups, you get 5 hours of restore history. If a problem goes unnoticed overnight, your oldest backup is already corrupted.
WorldKeeper uses a tiered retention strategy (Grandfather-Father-Son) that keeps frequent recent backups and older restore points:
| Tier | Default Interval | Default Retention | Coverage |
|---|---|---|---|
| Snapshots | 30 min | 12 backups | Last 6 hours |
| Dailies | Daily | 7 backups | Last 7 days |
| Archives | Weekly | 4 backups | Last 4 weeks |
Total: 23 backups (~7 GB at 304 MB/backup) covering up to 4 weeks of history.
New backups always start as Snapshots. The oldest Snapshot is promoted to a Daily when it's 24+ hours old, and the oldest Daily is promoted to an Archive when it's 7+ days old. Excess backups in each tier are deleted automatically. All intervals and retention counts are configurable.
# Install the Hytale Server API to your local Maven repo (one-time setup)
mvn install:install-file \
-Dfile=/path/to/HytaleServer.jar \
-DgroupId=com.hypixel.hytale \
-DartifactId=Server \
-Dversion=0.0.1 \
-Dpackaging=jar
# Build the mod
mvn clean package
Output: target/hytale-gfs-backup-1.0.0.jar
# Copy to server mods folder
cp target/hytale-gfs-backup-1.0.0.jar /path/to/Server/mods/
# Restart the Hytale server
On first startup, WorldKeeper creates its config at mods/com.gfsbackup_WorldKeeper/config.json.
WorldKeeper runs independently from the built-in AdminUI backup system. Running both means two systems writing backups to the same backups/ folder. WorldKeeper logs a warning at startup if it detects AdminUI backups are still enabled.
To disable AdminUI backups, edit Server/AdminUI/Backup.json:
{
"enabled": false
}
All settings are in mods/com.gfsbackup_WorldKeeper/config.json. Created with defaults on first run.
{
"enabled": true,
"backupFolder": "backups",
"worldFolder": "universe",
"tiers": {
"son": {
"enabled": true,
"intervalMinutes": 30,
"retentionCount": 12,
"description": "30-minute backups for 6 hours"
},
"father": {
"enabled": true,
"intervalMinutes": 1440,
"retentionCount": 7,
"description": "Daily backups for 7 days"
},
"grandfather": {
"enabled": true,
"intervalMinutes": 10080,
"retentionCount": 4,
"description": "Weekly backups for 4 weeks"
}
},
"hooks": {
"preBackup": [
"say [WorldKeeper] Starting backup..."
],
"postBackup": [
"say [WorldKeeper] Backup complete!"
]
},
"webServer": {
"enabled": true,
"port": 8081,
"allowRestore": false,
"allowedIPs": []
},
"advanced": {
"serverSaveBeforeBackup": true,
"deleteEmptyBackups": true,
"asyncBackup": true
}
}
| Key | Default | Description |
|---|---|---|
enabled |
true |
Master switch for the entire mod |
backupFolder |
"backups" |
Directory for backup ZIPs, relative to Server/ |
worldFolder |
"universe" |
World directory to back up, relative to Server/ |
The config uses son, father, grandfather internally. These map to Snapshots, Dailies, and Archives in the web UI.
| Key | Description |
|---|---|
enabled |
Enable/disable this tier |
intervalMinutes |
How often backups run (son tier drives the scheduler) |
retentionCount |
Max backups to keep in this tier |
| Key | Default | Description |
|---|---|---|
enabled |
true |
Enable the web UI |
port |
8081 |
HTTP port for the web UI |
allowRestore |
false |
Allow restoring backups from the web UI |
allowedIPs |
[] |
IP whitelist (empty = allow all) |
| Key | Default | Description |
|---|---|---|
serverSaveBeforeBackup |
true |
Flush world to disk before backup |
deleteEmptyBackups |
true |
Delete backups with 0 bytes |
asyncBackup |
true |
Run backups asynchronously |
Access the dashboard at http://localhost:8081 (or your configured port).
allowRestore is enabled)| Endpoint | Method | Description |
|---|---|---|
/api/backups |
GET | List all backups with stats and config |
/api/backups/create |
POST | Trigger a manual backup |
/api/backups/download/:filename |
GET | Download a backup ZIP |
/api/backups/restore/:filename |
POST | Restore a backup (requires allowRestore) |
/api/backups/delete/:filename |
DELETE | Delete a backup |
Hooks run server commands or system commands before and after each backup.
say or / are executed as server commands| Variable | Description |
|---|---|
{{backup_file}} |
Full path to the backup ZIP |
{{backup_filename}} |
Filename only (e.g. 2026-02-01_09-31-10.zip) |
{{backup_tier}} |
Tier name (SON, FATHER, GRANDFATHER) |
{{backup_size}} |
File size in bytes |
{
"hooks": {
"preBackup": [
"say [WorldKeeper] Starting world backup..."
],
"postBackup": [
"say [WorldKeeper] Complete!",
"/usr/local/bin/notify-discord.sh 'Backup done: {{backup_filename}} ({{backup_tier}})'"
]
}
}
Backups are ZIP archives of the universe/ directory containing worlds, chunks, player data, warps, and memories.
Manual restore process:
Server/universe/ directoryServer/ (it recreates the universe/ folder)The web UI restore feature (when enabled via allowRestore) extracts backups to a temp-restore/ directory for safety. You still need to manually swap folders and restart.
Storage depends on your world size. With a ~304 MB world:
| Profile | Snapshots | Dailies | Archives | Total |
|---|---|---|---|---|
| Default | 12 (3.6 GB) | 7 (2.1 GB) | 4 (1.2 GB) | ~7 GB |
| Aggressive | 6 (1.8 GB) | 3 (0.9 GB) | 2 (0.6 GB) | ~3.3 GB |
| Conservative | 24 (7.3 GB) | 14 (4.3 GB) | 8 (2.4 GB) | ~14 GB |
src/main/
├── java/com/gfsbackup/hytale/
│ ├── GFSBackupPlugin.java # Plugin lifecycle
│ ├── config/
│ │ ├── BackupConfig.java # Config POJO
│ │ └── ConfigManager.java # JSON load/save
│ ├── backup/
│ │ ├── BackupManager.java # Backup create/restore/delete
│ │ ├── ZipUtility.java # ZIP compression + checksums
│ │ └── HookExecutor.java # Pre/post hook execution
│ ├── retention/
│ │ ├── BackupTier.java # SON/FATHER/GRANDFATHER enum
│ │ ├── BackupMetadata.java # Per-backup metadata
│ │ ├── BackupIndex.java # Index persistence
│ │ └── RetentionPolicy.java # GFS promotion + cleanup
│ ├── scheduler/
│ │ └── BackupScheduler.java # ScheduledExecutorService timer
│ └── web/
│ ├── WebServer.java # Embedded Jetty setup
│ └── servlets/ # REST API handlers
└── resources/
├── manifest.json # Hytale mod manifest
├── default-config.json # Default config template
└── webapp/ # Web UI (HTML/CSS/JS)
WorldKeeper runs an HTTP server with no authentication. Anyone who can reach the port can view, create, download, and delete your backups. Treat it accordingly.
The single most important thing: do not expose port 8081 (or whatever you configure) to the internet. Your firewall should block it from external traffic. If you need remote access, use one of:
ssh -L 8081:localhost:8081 user@your-server, then open http://localhost:8081 locallyWorldKeeper supports an optional IP whitelist. By default the list is empty, which means all IPs are allowed. If you add IPs to the list, only those addresses can access the web UI — everything else gets a 403 Forbidden and is logged as a warning.
To lock it down to localhost only:
{
"webServer": {
"allowedIPs": ["127.0.0.1"]
}
}
To allow specific IPs:
{
"webServer": {
"allowedIPs": ["127.0.0.1", "192.168.50.10"]
}
}
Note: The whitelist checks exact IP matches. It does not support CIDR ranges — list each IP individually, or use a reverse proxy for more complex rules.
| Endpoint | Risk |
|---|---|
POST /api/backups/create |
Disk exhaustion via backup spam |
DELETE /api/backups/delete/* |
All backups wiped |
GET /api/backups/download/* |
World data exfiltrated |
POST /api/backups/restore/* |
Restore triggered (if allowRestore is on) |
allowRestore set to false unless you actively need itThis mod was built using Claude Code. We've included the artifacts from that process so you can see how it went and adapt it for your own projects:
MIT
Project description from CurseForge.
Recent files
4 Feb 2026
Looking for an older file? The official CurseForge project page is in Resources.