server.properties is the main configuration file of a Minecraft Java server. The settings most worth knowing: view-distance and simulation-distance control performance, online-mode controls account verification, white-list controls who can join, and difficulty plus gamemode define the experience. Edit the file with the server stopped, or use in-game commands where they exist; the server only reads the file at startup.

This guide walks through the settings grouped by what they affect, with the 1.21.4 defaults and honest advice on which ones to touch.

Tested on: Minecraft Java Edition 1.21.4, vanilla server jar and Paper. The file lives in the server root and is regenerated with defaults if deleted. Lines starting with # are comments. Paper and Fabric servers use the same file, plus their own configs on top.

How the file works

The server reads server.properties once, at startup. Changing a value while the server is running does nothing until restart, with two practical exceptions: the whitelist has live commands (/whitelist), and /difficulty changes difficulty at runtime. Everything else means a restart.

Keys are kebab-case, values follow the key=value format with no spaces around =. An empty value means "unset", not zero. If the server fails to start after an edit, check for typos first: an unknown key is ignored silently, but a malformed line can reset the file section to defaults.

If you have not set up the server itself yet, start with the complete server setup guide and come back here to tune.

Performance settings: the ones that matter most

view-distance=10 sets how many chunks the server sends to each player in every direction. This is the single biggest memory and bandwidth lever you have. Chunk count grows with the square of the radius, so going from 10 to 16 nearly triples the loaded area per player. Lowering it to 8 on a busy server is a legitimate performance fix; raising it above 12 needs RAM headroom, see how much RAM your server needs.

simulation-distance=10 sets how far from a player the world actually ticks: crops grow, mobs move, redstone runs. Chunks between simulation distance and view distance are visible but frozen. Lowering simulation distance helps tick lag far more than lowering view distance, because it cuts entity and block updates, not just rendering data. A common server tuning is view-distance=12 with simulation-distance=8: players see far, the server ticks less.

max-players=20 is the player cap. It barely affects performance by itself; what costs resources is what players do and how spread out they are. Set it to your real group size so the player list stays honest.

network-compression-threshold=256 sets the packet size in bytes above which packets are compressed. The default is fine for almost everyone. Setting it lower trades CPU for bandwidth, setting -1 disables compression entirely. Only worth touching if you know your bottleneck.

sync-chunk-writes=true forces chunk saves to be written synchronously, which is safer against corruption on power loss but slower on weak disks. Hosts with proper hardware sometimes set this to false; on a rented server leave it alone unless your host recommends otherwise.

Security and access settings

online-mode=true verifies every joining player against Mojang's account servers. Leave it on. Setting it to false lets anyone join with any username, including impersonating your admins, and player data becomes tied to unverified names. The only legitimate modern reason to disable it is running behind a proxy (Velocity/BungeeCord) that does the verification itself, or a Geyser crossplay setup where Floodgate handles Bedrock authentication.

white-list=false and enforce-whitelist=false: the whitelist is the right way to run a private server. white-list=true blocks non-listed players from joining; enforce-whitelist=true additionally kicks anyone online who is not on the list the moment you reload it. Full setup, including ops and permission levels, is in our whitelist and permissions guide.

spawn-protection=16 makes a square radius around the world spawn unbreakable for non-ops. Set 0 to disable. It protects only blocks, not chests or entities, and confuses new players who cannot dig at spawn, which is why many servers disable it and protect spawn with a plugin instead.

op-permission-level=4 sets what /op grants, from 1 (bypass spawn protection) to 4 (everything including /stop). On a friends server the default is fine. On anything public, consider level 3 so trusted moderators cannot shut the server down or run /save-off.

enable-command-block=false turns command blocks on or off server-wide. Off by default because command blocks run with elevated permissions. Enable it for adventure maps and datapack-heavy worlds; see how to install datapacks for the related setup.

enforce-secure-profile=true requires players to have Mojang-signed chat keys. Leaving it on means chat reporting works as Mojang intends; turning it off allows clients without signed chat. Most servers leave the default.

Gameplay settings

gamemode=survival and force-gamemode=false: default game mode for new players, and whether returning players are forced back into it. Adventure map servers set force-gamemode=true so visitors cannot keep creative mode from a previous session.

difficulty=easy is worth changing on day one: most survival servers want normal or hard. Peaceful removes hostile mobs entirely. This one has a live command, /difficulty hard, which also writes the file.

hardcore=false: hardcore locks difficulty to hard and puts dead players into spectator. There is no un-dying; be sure before enabling it on a long-term world.

pvp=true toggles player-versus-player damage globally. Note that fire, TNT, and other indirect kills are not fully covered; true PvP protection on public servers needs a plugin.

allow-flight=false controls whether the server kicks players it detects flying in survival. Mods with flight (jetpacks, Create contraptions, elytra mods behave fine) often need this set to true, otherwise legitimate players get kicked for "Flying is not enabled". Modded servers: turn it on. Vanilla public servers: leave it off as a cheap anti-cheat layer.

spawn-monsters=true toggles hostile mob spawning server-wide. As of recent 1.21 versions this is the remaining spawn toggle in the file; passive mob spawning is governed by the world and game rules rather than separate properties entries.

allow-nether=true enables the Nether dimension. Disabling it makes nether portals do nothing, which some skyblock and minigame servers want.

player-idle-timeout=0 kicks players after N minutes AFK. 0 disables. Worth setting on small-slot public servers; on friends servers people park AFK at farms deliberately, so leave it at 0 unless AFK players cause lag.

World generation settings

These apply only when the world is first created. Changing them later does not regenerate anything.

level-seed= sets the world seed, empty means random. level-type=minecraft\:normal picks the generator: flat, large_biomes, amplified are the other vanilla options (the backslash before the colon is required in the file). generate-structures=true toggles villages, fortresses, trial chambers. max-world-size=29999984 caps the world border radius in blocks; the default is the full world.

How the seed translates into terrain, and why two servers with the same seed produce identical worlds, is covered in our seeds and world generation explainer.

Settings you can safely ignore

For completeness, the entries that almost never need attention: motd (the server list text, change it, it is cosmetic), server-port=25565 (change only with a reason, then update your port forwarding), query.port and enable-query (legacy server info protocol, leave off), enable-jmx-monitoring (JVM profiling hook, off), rate-limit=0 (packet rate kick threshold, default off), entity-broadcast-range-percentage=100 (how far entities render to clients, lowering to 75 is a mild client-side smoothness win on crowded servers), max-tick-time=60000 (watchdog that kills a frozen server; some modded servers set -1 to survive long world generation pauses), log-ips=true (whether player IPs appear in logs), and hide-online-players=false (hides the player list from server pings).

If your goal is a server that runs smoothly rather than a perfectly tuned config file: set view-distance and simulation-distance consciously, pick difficulty, enable the whitelist, leave online-mode alone, and spend the saved time on actual lag profiling when something stutters.

FAQ

Where is server.properties located? In the server's root folder, next to the server jar. It is created on first startup. On a rented server, look for "Config Files" or "File Manager" in the panel.

Do I need to restart the server after editing server.properties? Yes, for almost every setting. The file is read once at startup. Exceptions with live commands: /difficulty and the /whitelist family.

What is the difference between view-distance and simulation-distance? View distance is how far players can see; simulation distance is how far the world actually runs (mobs, crops, redstone). Chunks beyond simulation distance but within view distance are visible and frozen. Lowering simulation distance helps server lag more.

Is it safe to set online-mode=false? No, not on an open server: anyone can join under any name, including your admin names. It is only legitimate behind a verifying proxy or a Geyser/Floodgate crossplay setup.

Why does my server kick players for flying when they are not cheating? allow-flight=false plus any mod mechanic the server reads as flight (contraptions, jetpacks, even laggy elytra movement). Set allow-flight=true on modded servers.


Updated for Minecraft 1.21.4 on June 11, 2026. When a new version ships, defaults are re-checked and this log is updated.