← Guides · updated 2026-08-02

Pre-tuned server configs: exactly what we change and why

Most Minecraft servers lag long before the hardware runs out — the usual culprit is vanilla entity AI (villagers, pathfinding) chewing through the single main tick thread. The fixes are well known in the server-admin community: a handful of config keys in spigot.yml and Paper's world defaults, a couple of server.properties keys, and the right garbage-collector flags for the JVM. But if you've never run a server before, you shouldn't have to learn that the hard way.

So every new server that runs on a JVM starts with that tuning already in place — Paper, Purpur, Vanilla, Forge, NeoForge, Fabric, and the modpacks that run on those loaders. It comes in two halves. Aikar's GC flags and two server.properties keys go to all of them. The config files below (spigot.yml, bukkit.yml, Paper's world defaults, purpur.yml) are seeded on Paper and Purpur only, because the other cores don't read them. A Pumpkin server gets none of it — it's a Rust core, so there is no JVM to tune — and neither does a Velocity proxy, which has no world of its own. Everything the preset does is on this page — no hidden changes.

What's in server.properties

Key Stock Ours What it does
simulation-distance 10 6 How far from each player the server keeps ticking the world at all: a radius in chunks, not a diameter, and entities, blocks and fluids are not updated outside it, entities in the spawn chunks at world spawn excepted (see the trade-off note below). So this number caps the area that can be doing tick work, and that cap grows with its square. It is also the one key here you can notice: past 6 chunks mobs stop moving and stop being visible to you, and farms and circuits stand still. The property is new in Minecraft 1.18, so the "Stock 10" above is the 1.18-and-later default: pick an older release in the create form and the game has no such setting, and our 6 does nothing there.
sync-chunk-writes true false Chunk writes stop being forced to disk on every write — the stock game opens region files in synchronous mode "to prevent data loss and corruption after crash", and lets a dedicated server turn that off with this key. Invisible in play. On the cores where the key is live — Vanilla, Fabric, Forge, NeoForge — the trade-off is that a hard kill can cost the newest chunks. On Paper and Purpur it changes nothing at all; see the note right below.

Both are ordinary settings — open Settings in the panel and change either one. We set them once, at creation.

sync-chunk-writes is a no-op on Paper and Purpur, and we set it there anyway. Paper's own reference says this property "has no effect on Paper by default, unless the corresponding system property is also set to true", and that system property — Paper.enable-sync-chunk-writes — is unset by default. We never set it. So on a Paper or Purpur server our false is not a change: those cores were not doing synchronous chunk writes to begin with, and our default therefore adds no risk of losing the newest chunks there. We still write the value so that one preset reads the same on every core. (Purpur is a drop-in replacement for Paper, built on top of Paper — we found no Purpur statement about this key either way, so this is our reading of the fork relationship, not a Purpur source.)

Change these two in Settings rather than by hand in server.properties. A property that has a value in Settings is written into that file every time the container starts, so the panel's value wins and a hand-edit of that one key is gone on the next boot — on a metered server, that's the next wake. These two always have a value on a new JVM server, because we set them at creation. A property you have never set in Settings works the other way round: we pass nothing for it, and whatever the file says stands. Some keys are ours anyway, and a hand-edit of one of those is replaced on the next start: accepts-transfers, which we force to true on every start (on Paper, Purpur and Vanilla servers from Minecraft 1.20.5 up) so a woken server can accept the transfer packet we send it and put the waiting player through — behind a Velocity proxy we send that player through a normal reconnect instead; and enable-rcon and rcon.password, which we set ourselves, because the panel console, the save-flush before a backup, and the TPS/MSPT readings all go over RCON.

Also note that setting a field back to default in the panel is not the same as restoring the stock value. An empty field is not sent at all: we stop managing that key, and server.properties keeps the last value written into it — ours. To get the stock behaviour back, pick the stock value explicitly: on for sync-chunk-writes, 10 for simulation-distance.

The ownership rule: seeded once, then the files are yours

The files below are seeded on Paper and Purpur only. We write them once, when the server is created, before its first boot. After that:

What's in spigot.yml

Key Stock Ours What it does
entity-activation-range.animals 32 24 Entities farther than this from any player stop running AI
entity-activation-range.monsters 32 24 Same, for hostiles
entity-activation-range.villagers 32 16 The biggest lever — idle villagers (trading halls!) are the classic tick-killer
entity-activation-range.misc 16 8 Items, arrows, etc.
entity-activation-range.water 16 8 Squid, fish, dolphins
entity-activation-range.tick-inactive-villagers true false Villagers outside the range stop ticking entirely
merge-radius.item 2.5 3.0 Dropped items merge from slightly farther away — fewer item entities

What's in config/paper-world-defaults.yml

Key Stock Ours What it does
misc.redstone-implementation VANILLA ALTERNATE_CURRENT A faster redstone engine with near-identical behavior
misc.update-pathfinding-on-block-update true false Mobs stop recomputing paths on every block change
collisions.max-entity-collisions 8 2 Fewer collision checks inside dense mobs/farms
tick-rates.behavior.villager.validatenearbypoi -1 60 Villagers re-scan their points of interest less often; trading is unaffected
tick-rates.sensor.villager.secondarypoisensor 40 100 Same idea, different sensor
tick-rates.container-update 1 3 Container/hopper update packets every 3 ticks instead of every tick
tick-rates.grass-spread 1 4 Grass spreads slightly slower — purely cosmetic

On Minecraft 1.18 and older, Paper used a single paper.yml instead — these keys apply from 1.19 up. The seeded file is simply ignored by older versions and activates if you later upgrade.

What's in bukkit.yml

Key Stock Ours What it does
settings.connection-throttle 4000 -1 Disables the per-IP reconnect throttle, so a group reconnecting to a just-woken server doesn't get "Connection throttled!" — this matters on TrueTick because sleeping servers wake on join

Purpur only: purpur.yml

Key Ours What it does
world-settings.default.dab.enabled true DAB ("dynamic activation of brain") ticks entity AI less often the farther the entity is from any player — the single biggest entity-AI lever Purpur has

JVM: Aikar's flags

New servers on every JVM core also run with Aikar's flags — the community-standard G1GC garbage-collector tuning for Minecraft servers. This affects only GC pause behavior, never gameplay. It is also the one part of this page that reaches servers which don't carry the preset — see the last section.

What we deliberately did NOT touch

Honest trade-off

Most of what's above is invisible in play. Two things are not:

Everything else is imperceptible in normal play.

We changed our mind about one thing. Until preset v2 shipped, this page said we deliberately left simulation-distance alone because it's player-visible. It still is — that's the bullet above. We set it to 6 on new servers anyway, on the mechanism: it is a radius in chunks, and, spawn-chunk entities aside, entities, blocks and fluids outside it are not updated at all, so the radius caps the area that can be doing tick work — and that cap grows with its square. And it is a default, not a ceiling. view-distance — the one you actually see as render distance — we still do not touch, and servers created before this change kept their existing simulation-distance.

Servers that don't carry the preset

The preset never goes back and rewrites a server that already exists. Nothing in the tables above was applied to yours retroactively: your config files are as you left them, and simulation-distance stays wherever you have it. This section is about every server without the preset, not only the old ones — a Vanilla, Fabric, Forge or modpack server created before v2 never got one either, because v1 covered Paper and Purpur only.

One part does reach those servers: Aikar's flags. Those live in the container's start command rather than in any file of yours, so nothing you own is rewritten — an existing JVM server picks them up the next time it starts, and a running server keeps running until then. Pumpkin and Velocity servers get nothing, same as new ones.

Want the rest applied to an older server? The tables above are the complete recipe, or ask us on Discord and we'll walk through it with you.

Skip the setup: spin up a server with guaranteed CPU and live TPS — see pricing.