Paper performance settings worth changing
The handful of settings in Paper, Spigot and Bukkit config files that make the biggest difference on a small server — and what each one changes in game.
Paper is already much faster than Vanilla out of the box, and on a small server its defaults are fine. But it also ships a long list of settings that trade a little Vanilla behaviour for a lot of performance. This guide covers the ones that matter, the values most servers use, and — just as important — what each one changes for players, so you can decide what you are willing to give up.
Everything here also applies to Purpur, which is Paper with more settings on top.
Where the files are
Paper reads four layers of config, from the server’s root folder:
bukkit.yml— spawn limits and spawn rates.spigot.yml— entity activation ranges, item merging, and older performance settings.config/paper-global.yml— settings for the whole server.config/paper-world-defaults.yml— settings for every world. Most of what follows lives here.
A world can override the defaults with its own paper-world.yml inside its folder, but you rarely need to. Older Paper versions (before 1.19) used a single paper.yml instead; the setting names were different, so check that the guide you are following matches your version.
All of these files are YAML: indentation is made of spaces and it matters. Edit them from the Files tab, keep each setting lined up with its neighbours, and restart the server afterwards.
Biggest wins first
Before touching any file, check the two settings that dwarf everything else: view-distance and simulation-distance in server.properties. View distance vs simulation distance explains why. Then, in order of how much they usually help:
Make spawner mobs brainless
In spigot.yml, under world-settings: default:, set nerf-spawner-mobs: true. Mobs from monster spawners then have no AI — they do not move or pathfind, they just fall and wait. Spawner-based XP farms work exactly as before (the mobs still drop loot and XP when killed), and they stop costing pathfinding every tick.
Players will notice only if they build a spawner farm that relies on mobs walking somewhere on their own. Water-stream farms still work, because water pushes them.
Faster despawning of junk items
In paper-world-defaults.yml, under entities: spawning:, the alt-item-despawn-rate setting lets specific items despawn sooner than the usual five minutes. Mining produces thousands of cobblestone and netherrack nobody picks up:
enabled: trueitems:then one line per item, for examplecobblestone: 300andnetherrack: 300— the number is in ticks, so 300 is 15 seconds.
Nothing valuable should go on that list. Players lose only the junk they were leaving behind anyway.
Merge items and XP orbs from further apart
In spigot.yml, merge-radius: controls how close two dropped stacks or XP orbs must be before they merge into one entity. Fewer entities is less work every tick. Values around item: 3.5 and exp: 4.0 are common. The only visible change is that drops visibly snap together, and XP arrives in fewer, bigger orbs.
Lower entity activation ranges
Also in spigot.yml, entity-activation-range: sets how close a player has to be before a mob gets a full AI update. Outside the range, mobs tick far less often. Lowering animals and monsters a little (to 24 or so) and misc to 8 cuts a lot of work on servers with big farms. Go too low and mobs near the edge of view visibly freeze and then jump — if players notice, raise it again.
Cap entity collisions
In paper-world-defaults.yml, collisions: max-entity-collisions: (default 8) is how many other entities each entity checks for pushing per tick. Animal pens with dozens of cows packed together spend a surprising amount of time pushing each other. 2 is a common value; packed animals jostle a little less, and nothing else changes.
Optimise explosions
environment: optimize-explosions: true in paper-world-defaults.yml caches the expensive part of explosion maths. The result is the same; it is simply faster, which matters for TNT dupers and creeper farms.
Use a faster redstone engine
misc: redstone-implementation: can be VANILLA (default), EIGENCRAFT or ALTERNATE_CURRENT. Alternate Current is much faster for large redstone dust lines. The catch: it updates dust in a different order, so a small number of timing-sensitive contraptions — some flying machines, some piston doors — behave differently. On a casual server, switch to ALTERNATE_CURRENT. On a technical-Minecraft server, leave it at Vanilla.
Stop players walking into unloaded chunks
chunks: prevent-moving-into-unloaded-chunks: true stops a player (or a ridden boat or horse) entering a chunk before it is loaded. Without it, someone moving very fast forces the server to load or generate chunks synchronously, which causes a hitch for everyone. Players see a brief rubber-band at worst.
Limit projectiles saved per chunk
chunks: entity-per-chunk-save-limit: sets how many entities of a type are saved in one chunk. Skeleton farms and snowball fights can leave thousands of arrows and snowballs lying around that load back every time the chunk does. Setting arrow: 16, snowball: 8, experience_orb: 16 and similar for other projectiles quietly drops the excess when the chunk unloads.
Spawn limits — use carefully
bukkit.yml has spawn-limits: (Vanilla’s mob caps: monsters: 70, animals: 10, water-animals: 5, water-ambient: 20, ambient: 15 and so on) and ticks-per: (how often each category tries to spawn). Lowering monsters to 50 or so, or setting ticks-per: monster-spawns: 2, reduces how many mobs exist at once.
This is the one change players really notice: fewer mobs at night, and mob farms that produce less. On a building-focused server it is worth it; on a server with competitive farm builders, leave it alone and use entity activation ranges instead.
Settings that sound good but often are not
- Disabling the hopper move event (
hopper: disable-move-event: true) is a large win on hopper-heavy servers — but some protection and logging plugins listen to that event to stop players stealing through hoppers. If you run one, leave it on. - Not ticking armour stands (
entities: armor-stands: tick: false) saves work on servers with hundreds of decorative stands, but stands then stop reacting to water and pistons, which breaks a few builds. - Changing tick rates (
tick-rates:) for grass spread, mob spawners or containers can save a little, but the gains on a small server are tiny, and the side effects — grass spreading slowly, spawners spawning less often — are visible.
Change one thing at a time
If you edit ten settings and something feels wrong, you will not know which one did it. Change one or two, restart, play for a day, then do the next. And measure before and after: mspt in the console on Paper shows how long ticks take, and anything comfortably under 50 ms means the server is keeping up. Why is my Minecraft server lagging? explains the numbers.