This article is a reference: it neutrally explains which configuration files Paper has and what each section does. For concrete recommendations ("what should I set?"), see the companion article Optimize your Paper server: improve TPS & fix lag.
The configuration files at a glance
Since Paper 1.19, the former single paper.yml has been split into several files in the config/ folder:
| File | Scope |
|---|---|
config/paper-global.yml | Server-wide – applies to the whole server |
config/paper-world-defaults.yml | Default values for all worlds |
<world>/paper-world.yml | Per world – overrides the defaults for that one world only |
Who wins on conflicts?
Besides Paper's files there are other configs. For overlapping settings, this rough order applies – the later/more specific layer wins:
server.properties → bukkit.yml → spigot.yml → paper-world-defaults.yml → paper-world.yml
(vanilla base) (Bukkit) (Spigot) (Paper defaults) (per world)
server.properties= vanilla base values (e.g.view-distance,difficulty)spigot.yml= Spigot settings (e.g.entity-activation-range,merge-radius)- Paper = the most fine-grained layer;
paper-world.ymlbeats the defaults
_version field at the top of each file drives Paper's automatic migration – never change it by hand. Paper manages it itself and updates the files across version jumps.Ground rules before any change
- Stop the server – don't edit config files while it's running
- YAML syntax: indent with spaces only, never tabs
- Make a backup of the
config/files and the world before changing anything - After starting, check the log file for warnings
The inheritance principle (often done wrong)
Out of the box, Paper sets no per-world overrides – there are only the defaults at first. To configure a single world differently, create a paper-world.yml there and copy in only the value you want to change – not the whole file.
- Standard worlds:
<worldfolder>/paper-world.yml - Custom dimensions (data packs):
world/dimensions/<namespace>/<key>/paper-world.yml
Example – enable lootables.auto-replenish for one world only:
# only in world_the_end/paper-world.yml
lootables:
auto-replenish: true
Two-world example with different mob limits:
# world/paper-world.yml (main world: fewer monsters)
entities:
spawning:
spawn-limits:
monster: 50
# world_nether/paper-world.yml (Nether: more monsters allowed)
entities:
spawning:
spawn-limits:
monster: 100
Every value you don't override still comes from paper-world-defaults.yml.
paper-global.yml – the sections
Server-wide settings. This table neutrally describes what each section is responsible for:
| Section | Responsible for |
|---|---|
block-updates | Disabling certain block ticks: disable-noteblock-updates, disable-tripwire-updates, disable-chorus-plant-updates, disable-mushroom-block-updates |
chunk-loading-basic | Base chunk-loading rates per player: player-max-chunk-load-rate, -send-rate, -generate-rate |
chunk-loading-advanced | Finer chunk behaviour: auto-config-send-distance, player-max-concurrent-chunk-loads/-generates |
chunk-system | Threading of the chunk system: io-threads, worker-threads, gen-parallelism |
collisions | enable-player-collisions – whether players push each other |
packet-limiter | Protection against packet floods (anti-crash) |
player-auto-save | Interval/rate of player-data saving |
proxies | BungeeCord / Velocity; in a proxy setup online-mode lives on the proxy, not the backend |
spam-limiter | Limiting chat/action spam |
timings / console | Diagnostic timings and console behaviour |
unsupported-settings | Experimental/risky switches (use with care) |
misc | Miscellaneous: max-joins-per-tick, compression-level, region-file-cache-size |
anticheat / obfuscation | Hide item components from other players (anti-cheat protection) |
Via unsupported-settings and the world settings you can also, among other things, disable the Nether and toggle certain vanilla bug fixes (e.g. MC-159283, MC-163962).
paper-world-defaults.yml – the sections
Default values for worlds (overridable per world via paper-world.yml):
| Section | Responsible for |
|---|---|
anticheat.anti-xray | X-ray protection: engine-mode (1 = replace blocks, 2/3 = hide real blocks), hidden-blocks, replacement-blocks |
chunks | max-auto-save-chunks-per-tick, delay-chunk-unloads-by, entity-per-chunk-save-limit |
entities.spawning | spawn-limits, ticks-per-spawn, per-player-mob-spawns, despawn-ranges (soft/hard) |
entities.behavior | mobs-can-always-pick-up-loot, disable-chest-cat-detection, zombie-villager-infection-chance |
entities.armor-stands / markers | Behaviour of armour stands and marker entities |
collisions | max-entity-collisions, fix-climbing-bypassing-cramming-rule |
hopper | cooldown-when-full, disable-move-event |
lootables | auto-replenish and refresh intervals for loot chests |
redstone-implementation | VANILLA, ALTERNATE_CURRENT or EIGENCRAFT |
tick-rates | Tick intervals: mob-spawner, sensor, behavior (incl. villagers!), container-update |
environment | optimize-explosions, disable-thunder, disable-ice-and-snow, treasure-maps |
unsupported-settings | e.g. fix-invulnerable-end-crystal-exploit |
spawn | keep-spawn-loaded, keep-spawn-loaded-range |
scoreboards, maps, fishing-time-range | Scoreboard, map and fishing behaviour |
Verifying & safeguarding changes
- Some values can be re-read with
/paper reload– when in doubt, restart the server - After starting, check the log file for YAML errors and warnings
- Always back up before config changes – a single indentation typo can stop a world from loading
- Full, version-current reference: docs.papermc.io – Global and World
Where to next
- Concrete recommendations & fixing lag: Optimize your Paper server: improve TPS & fix lag
- Getting started: Optimizing Minecraft server performance
- No server yet? How to create a Minecraft server