Performance
Optimize the Paper configuration of your Minecraft server
Paper creates its configuration files on the first start. The defaults stay close to the normal game, so farms and redstone behave as players expect. On a busy server a few changes take a lot of work off the main thread.
This guide lists the keys by file, with the default and a value that is safe for a survival server. Values marked as changing gameplay are the ones to announce to your players.
In short
To optimize Paper, edit four files in the Files tab: config/paper-world-defaults.yml, config/paper-global.yml, spigot.yml and bukkit.yml. The settings with the most effect are entity activation range, mob spawn limits, despawn ranges, the redstone implementation, hopper timing and the per-chunk limits for projectiles. Change one group at a time, restart, and compare TPS on a busy evening before you change the next.
Where the Paper configuration files are
| File | Folder | Applies to |
|---|---|---|
paper-global.yml | config | The whole server: chunk loading rates, threads, packet limits |
paper-world-defaults.yml | config | Every world, unless a world has its own override |
paper-world.yml | Each world folder, such as world | That one world; only the keys you put in it |
spigot.yml | Top folder | Entity activation, tracking, merging, hoppers, per world under world-settings |
bukkit.yml | Top folder | Mob spawn limits and spawn timing, chunk clean-up, autosave |
Open them in the Files tab. Purpur reads all of these too, plus its own purpur.yml. For the differences between the server types, see Paper, Purpur or Spigot.
- Make a backup in the Backups tab, so a broken file is one restore away.
- Change one group of settings.
- Save the file and restart the server. Paper reads these files at start.
- Check the console for config errors, then compare TPS with the evening before.
YAML files use spaces for indents, never tabs. A wrong indent can stop the file from loading, and the console names the line.
Entity activation range in spigot.yml
Mobs further from a player than the activation range tick less often: they stand still until something wakes them. This is one of the biggest savings on a server with many animals and villagers.
world-settings:
default:
entity-activation-range:
animals: 24
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 24
flying-monsters: 32| Key | Default | Safe value |
|---|---|---|
animals | 32 | 24 |
monsters | 32 | 24 |
raiders | 64 | 48 |
misc | 16 | 8 |
water | 16 | 8 |
villagers | 32 | 24 |
Changes gameplay: farms that need mobs to move, such as some mob grinders, work slower when the player stands far away. Very low ranges make mobs stand still close enough for players to see it.
Mob spawn limits in bukkit.yml and Paper
bukkit.yml sets how many mobs of each kind may exist in the area around players. Fewer mobs means fewer entities to tick.
spawn-limits:
monsters: 50
ticks-per:
monster-spawns: 2spawn-limits.monstersis 70 by default. 50 is still a dangerous night, with fewer mobs to tick.ticks-per.monster-spawnsis 1, so the server tries to spawn monsters every tick. 2 halves those attempts.ticks-per.animal-spawnsis 400 by default and can stay.
config/paper-world-defaults.yml has the same limits under entities.spawning.spawn-limits and ticks-per-spawn. Their default is -1, which means: use the value from bukkit.yml. Set a number there only to give one world other limits.
Leave entities.spawning.per-player-mob-spawns at true. It spreads spawns over players, so one player's mob farm does not use up the spawns for everyone else.
Entity collisions and per-chunk entity limits in paper-world-defaults.yml
collisions:
max-entity-collisions: 2
chunks:
entity-per-chunk-save-limit:
arrow: 16
ender_pearl: 8
experience_orb: 16
fireball: 8
small_fireball: 8
snowball: 8| Key | Default | Safe value | Effect |
|---|---|---|---|
collisions.max-entity-collisions | 8 | 2 | Crowded mobs check fewer neighbours to push |
chunks.entity-per-chunk-save-limit.arrow | -1 (no limit) | 16 | Only 16 arrows per chunk are saved; the rest disappear on unload |
chunks.entity-per-chunk-save-limit.experience_orb | -1 | 16 | Stops chunks full of orbs near XP farms |
chunks.entity-per-chunk-save-limit.snowball and others | -1 | 8 | Same idea for projectiles |
The save limit only applies when a chunk is saved and unloaded. It does not remove anything in loaded chunks, so players do not see items vanish in front of them.
Despawn ranges and item despawn time
Mobs further than the hard despawn range from every player are removed at once. Between the soft and the hard range they despawn at random. In Paper each mob category has its own pair:
entities:
spawning:
despawn-ranges:
monster:
soft: default
hard: 96default uses the normal game values, 32 soft and 128 hard for monsters. A hard range of 96 removes far monsters sooner, so new ones can spawn near players.
Item despawn in spigot.yml and Paper
item-despawn-rateinspigot.ymlis 6000 ticks, which is five minutes, the same as the normal game. Lowering it to 4000 clears dropped items after about three and a half minutes. This changes gameplay: players who die have less time to fetch their items.entities.spawning.alt-item-despawn-rateinpaper-world-defaults.ymlsets a shorter time for listed items only. Turn it on withenabled: trueand list items such ascobblestone: 300, so cheap blocks from mining vanish after 15 seconds while tools and armour keep the full five minutes.
Item and XP merging in spigot.yml
Dropped items of the same type that lie close together merge into one stack. Fewer stacks means fewer entities. The radius is set per world in spigot.yml, in blocks:
world-settings:
default:
merge-radius:
item: 2.5
exp: 3.0Check the current values in your file first. A larger radius merges more, which helps near mob farms and big explosions. It also makes items jump towards each other, which some item sorters do not expect. For exp, -1 keeps the normal game behaviour. On Paper, entities.behavior.only-merge-items-horizontally: true in paper-world-defaults.yml stops items from merging through floors.
Redstone and hoppers on Paper
| File and key | Default | Safe value | Effect |
|---|---|---|---|
paper-world-defaults.yml, misc.redstone-implementation | VANILLA | ALTERNATE_CURRENT | Large redstone builds update far fewer blocks |
spigot.yml, ticks-per.hopper-transfer | 8 | 8 | Ticks between item moves; the normal game speed |
spigot.yml, ticks-per.hopper-check | 1 | 8 | How often an empty hopper looks for items above it |
paper-world-defaults.yml, hopper.cooldown-when-full | true | true | A full hopper waits before trying again |
paper-world-defaults.yml, hopper.disable-move-event | false | false, unless no plugin needs it | true skips a plugin event on every item move |
ALTERNATE_CURRENT gives the same results as the normal game for almost all builds, but can change the order in which some contraptions fire. Test your players' main farms after switching. EIGENCRAFT is the third option.
Raising hopper-check makes empty hoppers react a few ticks later, which players rarely notice. Leave hopper-transfer at 8, because a different value changes the speed of every item sorter. Set hopper.disable-move-event to true only when no plugin uses hopper events; protection and shop plugins often do.
Explosions and TNT
environment.optimize-explosionsinpaper-world-defaults.ymlisfalse.truecaches parts of the blast calculation and makes TNT and creepers much cheaper. Blast results stay practically the same.max-tnt-per-tickinspigot.ymlis 100. Lower it to 50 if players build TNT cannons that drop the TPS; extra TNT waits for the next tick.
Chunk loading and saving settings
| File and key | Default | What it does |
|---|---|---|
paper-global.yml, chunk-loading-basic.player-max-chunk-send-rate | 75.0 | Chunks per second sent to each player |
paper-global.yml, chunk-loading-basic.player-max-chunk-load-rate | 100.0 | Chunks per second loaded from disk for each player |
paper-global.yml, chunk-loading-basic.player-max-chunk-generate-rate | -1.0 (no limit) | New chunks per second generated for each player |
paper-world-defaults.yml, chunks.delay-chunk-unloads-by | 10s | Keeps chunks loaded briefly after a player leaves them |
paper-world-defaults.yml, chunks.max-auto-save-chunks-per-tick | 24 | Spreads autosave over many ticks |
paper-world-defaults.yml, chunks.prevent-moving-into-unloaded-chunks | false | true stops players who outrun chunk loading |
bukkit.yml, chunk-gc.period-in-ticks | 600 | How often unused chunks are unloaded |
On a fresh world with many explorers, set player-max-chunk-generate-rate to a number such as 40 to stop one player on an elytra from taking all the generation time. On a world that is already pre-generated, the limit hardly matters. Setting prevent-moving-into-unloaded-chunks to true holds fast players at the edge of loaded land until it catches up.
Paper settings per world
To give one world other values, create paper-world.yml in that world's folder, such as world_nether, and put only the keys you want to change in it. Every other key comes from paper-world-defaults.yml.
entities:
spawning:
spawn-limits:
monster: 40For spigot.yml, add a section with the world's folder name under world-settings, next to default. Restart after either change. When TPS is still low after these settings, reduce lag shows how to find the build or plugin behind it.
Questions from Minecraft server owners
What is the best Paper config for performance?
Start with a lower entity activation range, monster spawn limit 50, optimize-explosions: true, ALTERNATE_CURRENT redstone and per-chunk save limits for arrows and orbs. Then test one change at a time.
Where is paper-world-defaults.yml?
In the config folder in the top folder of the server. Paper creates it on the first start.
Do Paper config changes need a restart?
Yes. Save the file and restart the server. Reload commands for these files are not reliable.
Will these settings break my farms?
Most do not. Lower activation ranges slow mob farms when nobody stands close, and a shorter item despawn time affects item drops. Announce those two to your players.
Is ALTERNATE_CURRENT safe for redstone?
For nearly all builds, yes. It updates fewer blocks, but some contraptions that rely on exact update order can fire differently. Test the important farms after switching.
Can I set Paper settings for one world only?
Yes. Put a paper-world.yml with only the changed keys in that world's folder, and use a section with the world name under world-settings in spigot.yml.
Checked against the configuration files that Paper for Minecraft Java 1.21.11 writes, October 2026. Written by the Cheapest Minecraft Hosting team, first published , updated .