Paper config optimization: safe settings to reduce lag
Tune paper-world-defaults.yml, spigot.yml and bukkit.yml for better performance on your Paper server, with safe values and the trade-offs explained.
Updated · 2 min read
Paper has many settings that trade a little vanilla accuracy for better performance. The safe approach is to change a few well-understood settings, restart, and measure with spark, rather than copying a huge "optimized" config you do not understand.
Where the files are
| File | Applies to |
|---|---|
config/paper-global.yml | Server-wide Paper settings. |
config/paper-world-defaults.yml | Default settings for every world. |
world/paper-world.yml (in each world folder) | Overrides for one world only. |
spigot.yml | Spigot settings, including entity activation range. |
bukkit.yml | Spawn limits and spawn rates. |
Take a snapshot before editing, stop the server, change values in the file manager, then start it again. Keep the indentation exactly as it is.
paper-world-defaults.yml
Only the relevant parts are shown. Find each key in its existing section and change the value.
chunks:
delay-chunk-unloads-by: 10s
entity-per-chunk-save-limit:
arrow: 16
experience_orb: 16
snowball: 8
ender_pearl: 8
fireball: 8
small_fireball: 8
collisions:
max-entity-collisions: 2
environment:
optimize-explosions: true
misc:
redstone-implementation: ALTERNATE_CURRENT
tick-rates:
mob-spawner: 2
What each does:
- entity-per-chunk-save-limit: caps how many of these projectiles are saved in a chunk, which prevents chunks bloated with arrows or XP orbs.
-1means no limit. - max-entity-collisions: how many collisions an entity processes per tick. Lower values help crowded mob farms. Very low values can slightly change how packed mobs push each other.
- optimize-explosions: faster explosion calculations. Helps TNT and creeper-heavy servers.
- redstone-implementation:
ALTERNATE_CURRENTandEIGENCRAFTare faster thanVANILLA. They can break rare contraptions that depend on vanilla update order, so keepVANILLAon technical redstone servers. - mob-spawner: how often spawner blocks tick.
2halves their cost and slows spawner farms slightly.
spigot.yml
world-settings:
default:
entity-activation-range:
animals: 16
monsters: 24
misc: 8
water: 8
villagers: 16
merge-radius:
item: 3.5
exp: 4.0
- entity-activation-range: entities further than this from a player tick less often. Lower values save a lot of CPU but can affect far-away farms.
- merge-radius: merges nearby dropped items and XP orbs into fewer entities.
bukkit.yml
spawn-limits:
monsters: 50
animals: 8
water-animals: 3
water-ambient: 10
ambient: 5
ticks-per:
monster-spawns: 2
Lower spawn limits mean fewer mobs per player. Going too low makes the world feel empty and breaks mob farms, so reduce gradually.
server.properties
simulation-distance and view-distance usually matter more than any of the above. A simulation distance of 4 to 6 and a view distance of 7 to 10 is a common balance.
What not to do
- Do not copy an entire config from another server or an old guide. Key names change between Paper versions, and outdated settings can be ignored or cause errors.
- Do not change many settings at once. If something breaks, you will not know which one did it.
- Do not chase TPS that is already 20. If spark shows the server is healthy, extra tuning only costs vanilla behaviour.
Measure the result
Run spark before and after your changes and compare MSPT under similar player counts. See how to use spark and TPS and MSPT explained.
For details on every option, see the Paper configuration docs.