Minecraft Server Configuration Guide

Minecraft Server Properties: Every Setting That Matters, Explained

Published 2026-10-05 13 min read Minecraft: Java Edition 26.3

A Minecraft Java Edition server keeps its settings in one plain-text file, server.properties, in the folder the server is started from. Next to it sit a few JSON files for operators, the whitelist and bans, and eula.txt. This guide explains the settings people search for most, what they really do, the ones that changed recently, how much memory to give Java, where Paper keeps its extra settings, and the mistakes that cost server owners an evening.

Which version this covers. We downloaded the official Java Edition 26.3 server (released 15 September 2026) from Mojang and ran it on Linux. Every default below is copied from the file it wrote, and where we write "in our test" we tried it on that server. Meanings come from the Minecraft Wiki's server.properties page. Settings move between versions, so if your file looks different, check which version you run.

Bedrock Edition is a different program
Bedrock servers run Mojang's Bedrock Dedicated Server, which has its own server.properties with different settings and uses UDP port 19132 by default. Nothing below applies to it.

Before the First Start: eula.txt and Java

Start the server jar once (java -jar server.jar nogui). It writes a default server.properties and an eula.txt containing eula=false, then stops with "You need to agree to the EULA in order to run the server. Go to eula.txt for more info." Read the Minecraft EULA at https://aka.ms/MinecraftEULA (the link is in the file), change the line to eula=true, and start it again. On the second start it generates the world and the JSON files.

The server needs a recent Java. Mojang's version file for 26.3 asks for Java 25, and in our test the server refused to start on Java 21 with an UnsupportedClassVersionError. If you see that error, the server is fine: install a newer Java.

How the File Works

One setting per line, key=value, lines starting with # are comments. On every start the server reads the file, fills in any missing key with its default, and writes the file back out, which is why your own comments disappear. It also escapes some characters, so the default world type appears as level-type=minecraft\:normal; the backslash is normal.

Changes take effect on the next start. In our test, stop did not rewrite the file, so an edit made while the server was running survived until the next start. One thing did overwrite it: a console command that changes a setting stored in the file. We edited motd and max-players while the server ran, then typed whitelist off; the server immediately wrote the whole file from what it had in memory, and both edits were gone. The safe habit is to stop the server, edit, then start it.

The Settings That Matter

Setting Default What it does
view-distance 10 How many chunks around each player the server sends to the client, as a radius (3 to 32). A player's own render distance can't go beyond it.
simulation-distance 10 How many chunks around each player are actually ticked: mobs move, crops grow, redstone and furnaces run. Radius, 3 to 32.
max-players 20 How many players can be online at once. An operator whose ops.json entry has "bypassesPlayerLimit": true can join a full server.
difficulty easy peaceful, easy, normal or hard.
gamemode survival The default game mode: survival, creative, adventure or spectator. Returning players keep the mode they left in.
force-gamemode false true puts every player back in the default game mode each time they join.
hardcore false Hardcore mode for a newly created world.
online-mode true Checks every joining player against Mojang's account servers. Leave it on; see the pitfalls.
white-list true Only players in whitelist.json can join. On by default since 26.3 (it used to be off). Operators don't need to be on the list.
enforce-whitelist false With true, players already online who are not on the whitelist are kicked when the whitelist is reloaded.
spawn-protection 16 Non-operators can't break or place blocks near the world spawn. The protected square's side is 2 × value + 1 blocks, so 16 protects 33 × 33. 0 turns it off; it is also off while the server has no operators.
motd A Minecraft Server The line under your server's name in the multiplayer list. Colour and formatting codes work; keep it under about 59 characters.
level-seed empty (random) The seed used when the world is generated. Only used for a new world.
level-type minecraft:normal The world preset for a new world: minecraft:normal, minecraft:flat, minecraft:large_biomes, minecraft:amplified or minecraft:single_biome_surface.
level-name world The folder the world is saved in. Point it at a different folder and the server uses (or creates) that world.
allow-flight false With false, a Survival player who flies can be kicked for it. Set true if your mods or plugins give players flight.
max-tick-time 60000 The watchdog: if a single server tick takes longer than this many milliseconds, the server considers itself crashed and shuts down. -1 disables the watchdog.
pause-when-empty-seconds 60 After this many seconds with nobody online, the server pauses the world.
server-port 25565 The game port, TCP. The one port players need.
server-ip empty The address to listen on. Empty means all addresses; leave it empty unless you know you need it.
enable-rcon false Remote console over the network. Needs rcon.password as well.
rcon.port 25575 The RCON port, TCP.
rcon.password empty The RCON password. With it empty, RCON doesn't start even if enabled.
enable-query false The GameSpy4 "query" protocol that server lists and status tools use, on UDP query.port (default 25565).
network-compression-threshold 256 Packets of this many bytes or more are compressed. -1 turns compression off, 0 compresses everything.
sync-chunk-writes true Writes chunks to disk synchronously. Safer after a crash or power loss, at some cost in disk speed.
entity-broadcast-range-percentage 100 How far away entities are sent to players, as a percentage of the normal distance (10 to 1000). Lower means less network traffic and less client lag, but mobs pop in later.
enforce-secure-profile true Only players with a Mojang-signed chat key can join. With false, chat is unsigned and can't be reported, and players get a warning when they connect.
pvp is no longer in server.properties
Since Java Edition 1.21.9, pvp, spawn-monsters, allow-nether and enable-command-block are game rules, not properties, and spawn-animals and spawn-npcs were removed in 1.21.2. A pvp=false line in an older guide does nothing on a current server. Use the game rule instead: in our test gamerule pvp reported true, and gamerule pvp false is the replacement for the old line.

View Distance vs Simulation Distance

These two are the main performance controls, and they do different jobs. view-distance is how far players can see: the server loads those chunks and sends them, which costs memory, disk reads and upload bandwidth. simulation-distance is how far the world is alive: inside it the server ticks mobs, farms, redstone and furnaces, which costs CPU.

Both are a radius around each player, so the area grows with the square. At 10, each player has a 21 × 21 square of 441 chunks; at 6 it is 13 × 13, 169 chunks. Players far apart multiply that. If the server lags, lower simulation-distance first (6 is a common choice): players still see far, and only nearby farms and mobs run. Lower view-distance if memory or your upload speed is the limit.

ops.json, whitelist.json and the Ban Lists

After the first full start, the server folder holds four JSON files. Manage them with console commands rather than by hand: in our test op and whitelist add looked the player up and wrote the file immediately.

File Command What it holds
ops.json op / deop <name> Operators, each with UUID, name, level (1 to 4; new ops get op-permission-level, default 4) and bypassesPlayerLimit.
whitelist.json whitelist add / remove <name> Players allowed to join while white-list=true, by UUID and name.
banned-players.json ban / pardon <name> Banned accounts.
banned-ips.json ban-ip / pardon-ip Banned IP addresses.

Our ops.json entry looked like this:

[ { "uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5", "name": "Notch", "level": 4, "bypassesPlayerLimit": false } ]

Each entry carries the account's UUID, which the commands look up for you. If you edit whitelist.json while the server runs, run whitelist reload so the server reads it again.

Java Memory: -Xmx and -Xms

You set the server's memory on the Java command line:

java -Xms2G -Xmx4G -jar server.jar nogui

-Xmx is the most memory Java's heap may grow to, -Xms is how much it starts with. In our test, a fresh 26.3 world with nobody online started fine with -Xmx1G. Players, more view distance, big farms and mods all need more.

More is not always better. The heap isn't all the memory Java uses: the program code, threads and network buffers live outside it. Give -Xmx all of your machine's RAM and there is nothing left for that or for the operating system, so the machine starts swapping or the system kills the server. And memory doesn't make a slow server fast: the world is ticked on one main thread (Server thread in the log), so lag usually comes from CPU work, which simulation distance, entity counts and redstone drive, not from a heap that is too small. Give the server what it needs plus some margin, and leave the rest for the machine.

Vanilla, Paper and Fabric

All three read the same server.properties. In our test, Fabric's file had exactly the vanilla keys, and Paper's added one, debug.

Plugins and mods are not interchangeable: a Paper plugin doesn't load on Fabric, and a Fabric mod doesn't load on Paper.

Ports

Port Protocol What for
25565 TCP The game (server-port). The only port players need; forward this one.
25565 UDP Query (query.port), only with enable-query=true.
25575 TCP RCON (rcon.port), only with enable-rcon=true and a password.

Players connect to your address with no port when the server uses 25565. On any other port, they type it after a colon, for example play.example.com:25566.

Classic Pitfalls

1. Friends can't join a brand-new 26.3 server

Since 26.3, white-list=true is the default, so a new server only lets in its operators. Add your friends with whitelist add <name>, or set white-list=false if the server is meant to be open. A server you upgraded keeps whatever its file already said.

2. Turning online-mode off

With online-mode=false, our server warned at startup: "SERVER IS RUNNING IN OFFLINE/INSECURE MODE! ... it also opens up the ability for hackers to connect with any username they choose." Anyone can then join under any name, including an operator's. Leave it on, unless the server is cut off from the internet.

3. An edit that vanished

A console command that changes a stored setting (for example whitelist on/off) rewrites server.properties from memory and wipes edits made since the server started. Stop the server before editing.

4. Changing the difficulty with a command

In our test, difficulty hard changed the running game but not the file. After a restart the server was back on easy, the value in server.properties. Change the file if you want it to last.

5. Changing level-seed on an existing world

The seed is only used to create a world. We changed level-seed and restarted, and seed still reported the original. For a new world with that seed, change level-name (or move the old world folder away).

6. Using view-distance as the lag fix

CPU lag usually comes from what is simulated, so lower simulation-distance first. A high view-distance costs memory and bandwidth; a high simulation-distance costs CPU.

7. Settings from an old guide that do nothing

pvp, spawn-monsters, allow-nether and enable-command-block are game rules on a current server, and spawn-animals/spawn-npcs are gone. Lines for them in the file have no effect.

8. RCON on the internet

RCON is not encrypted, so the password crosses the network in the clear. Don't forward 25575; use it from the same machine or your own network. With an empty password, RCON won't start at all ("No rcon password set in server.properties, rcon disabled!").

9. Giving Java every gigabyte you have

Java needs memory outside the heap, and the operating system needs some too. Leave headroom, and look for lag in the CPU before adding RAM.

10. Bedrock players on a Java server

Bedrock Edition (consoles, phones, the Windows Bedrock version) can't connect to a Java server without a bridge, and a Bedrock server is a different program with different settings.

Skip the Hand-Editing

NodeMesh runs your Minecraft server on your own PC or server. Its Config tab edits server.properties as form fields grouped by topic, and its Players tab adds players to whitelist.json and ops.json by username, with operator levels 1 to 4.

The Mods tab switches a server between Vanilla, Paper, Fabric and Forge without recreating it, keeping the world, server.properties, the whitelist, ops and bans. It searches Modrinth for Fabric and Forge mods and, on Paper, Modrinth or Hangar for plugins, filtered to your Minecraft version, and takes a .jar upload for anything else.

You can upload a singleplayer world as a .zip and it becomes the server's world; the current world is backed up first. And when nobody is playing, Sleep stops the server cleanly after a save, and Wake starts it again from the panel.

Run your Minecraft server without editing files

Host Minecraft on your own hardware. NodeMesh's Config tab edits server.properties, and its Mods tab installs mods and plugins.

Start hosting with NodeMesh