WO
WorldSlim
2.0.1A lightweight chunk save optimization plugin for Paper servers. WorldSlim reduces your world file size by automatically cleaning up chunks that players have barely visited.
2.0.1latestWorldSlim 2.0.1Apr 29, 2026 WorldSlim 2.0.1
Minor release. Quality-of-life improvements on top of 2.0.0. Drop-in upgrade — no manual steps required from 2.0.0.
Two focused changes that make 2.x easier to operate: configs auto-update across versions, and/worldslim chunknow explains exactly why each chunk is kept or deleted. ---What's New
Config Migration
Adds aconfig-versionfield toconfig.yml. On every plugin reload, the migrator walks the jar's default config and copies any missing keys into your on-disk file. - User-edited values are preserved (yourmin-inhabited-time: 1500stays1500) - Existing comments survive the load + save round-trip - New keys arrive with their default comments attached - Original file is backed up toconfig.yml.bak.v<old>before any mutation - If migration fails for any reason, the original is restored from backup automatically This means future updates that introduce new config sections (e.g. v2.1 will addworlds.overrides) will not require manual edits — your existing config gets the new fields appended on first reload, with their defaults and documentation intact.
The previous output (one line "would be kept: yes/no") only looked at/worldslim chunk— Full Decision TreeInhabitedTimeand gave misleading answers. The new output shows every signal that affects the cleanup decision plus four verdicts mirroring the actual runtime behavior:
The decision logic is taken directly from=== Current chunk decision path === [123, -456] @ world --- State signals --- managed (registry): yes managed (PDC): no pre-existing (PDC): no force-save (registry): no force-save (PDC): no loaded (now): yes InhabitedTime: 340 ticks (17s) < 1200 threshold aggressive mode: OFF --- Verdicts --- > Current (loaded): KEEP (loaded chunks are always protected) > Hypothetical unloaded, aggressive=OFF: DELETE (low InhabitedTime, no force-save, not loaded) > Hypothetical unloaded, aggressive=ON: DELETE (low InhabitedTime, no force-save, not loaded) > ChunkUnloadListener: BLOCK SAVE (low InhabitedTime, NMS unsaved=false)ChunkCleaner.rewriteRegionFileandChunkUnloadListener.onChunkUnload, so what you see here is what would actually happen at cleanup or unload time. The plugin's actual chat output is localized (Simplified Chinese in 2.0.x); the structure shown above mirrors it 1:1. ---Compatibility
- From 2.0.0: drop-in. Migration only adds theconfig-version: 2marker; nothing else changes because v2.0.0 already had all the current fields. - From 1.x: drop-in. Migration auto-injectscleanup.aggressive,autosave-shield.*, andlogging.*with their defaults and comments. Yourconfig.yml.bak.v1keeps the original file safe. - Server forks: unchanged from 2.0.0 — Paper / Purpur / Folia / Leaves / Leaf 1.21.x all supported. Requires Minecraft 1.21.x and Java 21. ---Verification
End-to-end tested on Leaf 1.21.11 with a synthesized v1 config (noconfig-version, noaggressive, noautosave-shield, nologging): | Check | Result | |-------|--------| | 6 user-edited values preserved | Yes | | 8 missing fields injected with defaults | Yes | | Comments preserved on existing keys | Yes | | Comments attached to newly-added keys | Yes | | Backup written toconfig.yml.bak.v1| Yes | |/worldslim chunkdecisions matchChunkCleanerruntime | Yes | ---Reporting Issues
When filing a bug, please include: -/worldslim diagnosescreenshot -/worldslim chunkoutput for an affected chunk - Latest log fromplugins/WorldSlim/logs/- Server type and version (Paper / Leaf / etc.)2.0.0-betaWorldSlim 2.0.0-betaApr 20, 2026 WorldSlim 2.0.0-beta
Beta release — architectural overhaul. Back up
Major rewrite to properly handle MC 1.18+ chunk behavior. 1.0.x worked by intercepting chunk unloads, but modern MC keeps chunks loaded much longer and autosave writes them to disk before any unload event fires. This version rebuilds the architecture around that reality. ---plugins/WorldSlim/before upgrading from 1.x.What's New
File-Based Chunk Registry
Managed and force-save chunk states are now stored inplugins/WorldSlim/data/instead of the chunk's PersistentDataContainer. Why it matters: Leaf / Moonrise silently strips Bukkit PDC data when chunks are saved — on 1.0.x this caused the cleaner to see every chunk as "pre-existing" and delete nothing. The registry survives restarts and doesn't depend on server fork behavior. - In-memoryConcurrentHashMapwith O(1) lookups - Async flush every 30 seconds, synchronous flush on shutdown - Crash-safe: lost marks degrade to pre-existing (never accidentally deleted) - Works identically on Paper, Purpur, Folia, Leaves, and LeafAutosaveShield
A background task that periodically resets the NMSunsavedflag on loaded low-inhabited managed chunks, so autosave skips them. - Runs every 2 seconds by default (configurable) - Targets only chunks that are managed + low InhabitedTime + not force-saved - On supported cores (Paper, Purpur), it achieves zero disk writes for pure-exploration chunks - Limited effect on Moonrise (it has its own dirty tracking); pair with aggressive mode belowAggressive Mode
Setcleanup.aggressive: trueinconfig.ymlto restore pre-1.0.6 behavior: any chunk below the InhabitedTime threshold without force-save gets cleaned, regardless of managed status. - Recommended for fresh servers — cleanup rate jumps back above 90% - Not recommended for established worlds with builds on briefly-visited chunks (signs, dust, fast stops) — those may have low InhabitedTime and would be deletedDiagnostics
- `/worldslim diagnose [here]` — full runtime snapshot (event counts, marking sources, unload decisions, cleanup breakdown, registry totals). Addhereto inspect the chunk you're standing in. - `/worldslim scan` — dumps the NBT structure of your current region file so you can verify whether PDC actually persists on your server fork. - File logger atplugins/WorldSlim/logs/worldslim-YYYY-MM-DD.log, daily rotation, level-configurable. ---Fixes
- Paper 1.20.5+ NBT key compatibility — chunk PDC was renamed fromBukkitValuestoChunkBukkitValues; 1.0.x never recognized it. The parser now accepts both. - Main-thread deadlock —getLoadedChunks()could block forever and latch the "cleanup in progress" state. 5-second timeout added; timeouts safely skip the world. - Registry / disk drift — removal marks are now deferred until the region rewrite atomically commits. Aborted rewrites no longer corrupt the registry. - Windows region-file loss — three-tier fallback switched to a backup-rename pattern; any failure is now recoverable. - NPE on post-rewrite timeout — the loaded-chunks recheck no longer crashes when the callback times out. - `/worldslim scan` server freeze — removed the synchronousWorld.save()call that stalled the server for seconds. - `/worldslim cleanup` misleading message — now correctly reports "cleanup skipped: another run is in progress" instead of falsely claiming completion. - Large-world cleanup slowdowns — removed per-region main-thread round-trip; saves hundreds of synchronization bounces per run. ---Compatibility
| Server | PDC Persistence | Registry | AutosaveShield | |--------|-----------------|----------|----------------| | Paper 1.21.x ||
|
| | Purpur 1.21.x |
|
|
| | Folia 1.21.x |
|
|
partial | | Leaves 1.21.x |
|
|
| | Leaf 1.21.x |
stripped |
load-bearing |
limited | Requires Minecraft 1.21.x and Java 21. ---
Upgrade from 1.x
1. Back upplugins/WorldSlim/(config + any future data). 2. Replace the jar withWorldSlim-2.0.0-beta+mc1.21.x.jar. 3. Restart the server. The plugin will append new config fields (cleanup.aggressive,autosave-shield.*,logging.*) to your existingconfig.yml. 4. On fresh worlds, setcleanup.aggressive: truefor best cleanup rate. 5. On established worlds, keepaggressive: falseand trust the registry to track new chunks going forward. ---Reporting Issues
When filing a bug, please include: -/worldslim diagnosescreenshot -/worldslim scanoutput from the affected world - Latest log fromplugins/WorldSlim/logs/- Server type and version (Paper / Leaf / etc.)1.0.6WorldSlim 1.0.6Apr 20, 2026 Fixed data-loss bug from v1.0.5 and earlier on existing worlds. Fixes: Force-save PDC flag is now permanent (was one-time, causing ChunkCleaner to delete force-saved chunks after first save cycle) Pre-existing chunks (generated before plugin install) are now permanently protected from cleanup via a new managed-chunk tag New chunks are marked via ChunkPopulateEvent and only those are subject to cleanup Known issues (addressed in v2.0.0-beta): Leaf/Moonrise strips chunk PDC on save; managed tag was lost after restart Paper 1.20.5+ renamed BukkitValues to ChunkBukkitValues; NBT parser missed it ChunkCleaner could deadlock waiting for main-thread callback on busy servers1.0.5WorldSlim 1.0.5Apr 20, 2026 Added container-open trigger to protect looted structure chunks. Features at this version: InhabitedTime-based chunk cleanup (region rewrite) Force-save triggers: block place/break, entity damage, item pickup/drop, container open Configurable trigger ranges Known issue: Reports of data loss when installed on existing worlds and restarted — fixed in v1.0.6+ via pre-existing chunk protection.1.0.4WorldSlim 1.0.4Apr 20, 2026 Incremental improvement release.1.0.3WorldSlim 1.0.3Apr 20, 2026 Incremental improvement release.1.0.2WorldSlim 1.0.2Apr 20, 2026 Incremental improvement release.1.0.1WorldSlim 1.0.1Apr 20, 2026 Early release of WorldSlim chunk save optimization plugin. Features: InhabitedTime-based chunk cleanup Force-save triggers on block place/break Targets Minecraft 1.21.x on Paper-based servers.1.0.0WorldSlim-1.0.0+mc1.21.xFeb 6, 2026 WorldSlim v1.0.0 — Initial Release
First public release of WorldSlim, a chunk save optimization plugin for Paper 1.21.x.Features
- Automatic cleanup of low-activity chunks by rewriting region files - Configurable inhabited time threshold (default: 1200 ticks / 60 seconds) - Scheduled cleanup at configurable intervals (default: 30 minutes) - Smart chunk protection triggers: - Block place / break - Entity damage - Item pickup / drop - All triggers support configurable chunk radius - Per-world enable/disable settings - Async processing — zero TPS impact - Built-in statistics tracking (chunks scanned, cleaned, space saved) - Commands: /worldslim (alias: /ws) with subcommands: status, stats, chunk, cleanup, reload, reset - Debug mode for detailed cleanup loggingRequirements
- Paper 1.21.x - Java 21+
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta
LuckPerms
A permissions plugin/mod for Minecraft servers.
2.8MSueta
ItemSwapper
Inventory update concept for hotswapping items.
2.1MSueta
SkinsRestorer
🎨 Ability to restore/change skins on servers! (Offline and Online Mode)
1.6MSueta