Minecraft Guide
• Updated Sep 17, 2026
Minecraft server.properties: Complete Reference
server.properties is the settings file for a Java Edition server. It lives in the folder you start the jar from and is created on the first run. Every start, the server re-reads it, replaces missing or invalid values with defaults and rewrites it, stripping any comments you added. Nothing takes effect until the server restarts. Defaults below are what a current server generates; where one changed between versions the row says so, following the official server.properties documentation.
Identity and visibility
| Property | Default | What it does | When to change it |
motd | A Minecraft Server | Line under your server name in the multiplayer list. Color codes work. | Always. Over 59 characters can break the list entry. |
enable-status | true | Whether the server answers server-list pings. | False looks offline but still accepts joins. |
hide-online-players | false | Whether player names ride along in the status reply. | True to keep the player list private. |
bug-report-link | blank | URL behind the report_bug server link. | Only with your own issue tracker. |
Players and access
| Property | Default | What it does | When to change it |
max-players | 20 | Concurrent player slots. | Raise with RAM and CPU, never alone. |
white-list | false before 26.3, true from 26.3 | Whether whitelist.json gates joins. Ops are exempt. | On for private servers. |
enforce-whitelist | false | Also kicks online players missing from the list on reload. | With white-list, on strict servers. |
online-mode | true | Verifies every join against the Minecraft account database. | Leave true. See the warning below. |
op-permission-level | 4 | Level granted by /op (0 to 4). | Lower to limit new ops. |
function-permission-level | 2 | Level functions run at (1 to 4). | Datapacks needing higher commands. |
force-gamemode | false | Forces the default game mode on every join. | Creative and adventure servers. |
player-idle-timeout | 0 (never) | Minutes idle before a kick. | Busy servers short on slots. |
spawn-protection | 16 | Protected square around spawn, side 2x+1, ops only inside. | 0 to let players build at spawn. Absent until the first join; off if there are no ops. |
broadcast-console-to-ops | true | Sends console command output to online ops. | Off with a large staff team. |
enable-code-of-conduct | false | Shows rules from the codeofconduct folder. Added 1.21.9. | Public servers wanting rules accepted. |
chat-spam-threshold-seconds | 10 | Chat allowance before an automatic kick; 0 never kicks. Added 26.2. | Raise for chatty communities. |
command-spam-threshold-seconds | 10 | The same limit for commands. Added 26.2. | Raise on command-heavy servers. |
World generation
| Property | Default | What it does | When to change it |
level-name | world | World folder. Loaded if it exists, generated if not. | To swap between stored worlds. |
level-seed | blank (random) | Seed used when the world is generated. | Before the world exists, never after. |
level-type | minecraft:normal | Preset: normal, flat, large_biomes, amplified, single_biome_surface. | Before the world exists, never after. |
generator-settings | {} | JSON customizing the preset, mainly flat worlds. | With level-type, at creation only. |
generate-structures | true | Whether villages and the like generate. Dungeons ignore it. | Rarely. Applies to every new chunk. |
max-world-size | 29999984 | Blocks from center to the world border. Higher values do nothing. | Lower to cap world size on disk. |
initial-enabled-packs | vanilla | Data packs switched on at world creation. | To enable experimental features. |
initial-disabled-packs | blank | Data packs left off at creation. | Rarely. |
Gameplay
| Property | Default | What it does | When to change it |
gamemode | survival | Mode for a first-time player: survival, creative, adventure, spectator. | Creative builds, adventure maps. |
difficulty | easy | peaceful, easy, normal or hard. Peaceful stops hostile spawns. | Most survival servers use normal or hard. |
hardcore | false | Hardcore on worlds created with it on; death bans the player. | At world creation only. |
allow-flight | false | Whether a survival player may stay airborne without a kick. | On when a plugin or mod grants flight. |
Performance and view distance
| Property | Default | What it does | When to change it |
view-distance | 10 | Chunk radius of world data sent to clients (3 to 32). | Lower this first for a memory problem, since it decides how much world is loaded and sent. |
simulation-distance | 10 | Chunk radius that is actually ticked (3 to 32). | Lower to cut tick cost; distant farms stop. |
entity-broadcast-range-percentage | 100 | Percentage of the normal range entities are sent at (10 to 1000). | Lower with heavy mob counts. |
max-tick-time | 60000 | Milliseconds per tick before the watchdog kills the server; -1 disables it. | Raise on modpacks that stall loading chunks. |
max-chained-neighbor-updates | 1000000 | Consecutive block updates before the rest are skipped; negative disables. | Only against redstone lag machines. |
sync-chunk-writes | true | Synchronous chunk writes, so a crash cannot corrupt them. | Leave on. |
region-file-compression | deflate | Chunk compression: deflate, lz4 or none. Added 1.20.5. | lz4 for faster saves, bigger files. |
pause-when-empty-seconds | 60 | Seconds empty before the server stops ticking. Added 1.21.2. | Raise so farms run with nobody online. |
Networking and security
| Property | Default | What it does | When to change it |
server-port | 25565 | TCP port the server listens on. | Several servers on one machine. |
server-ip | blank | Address to bind to. Blank binds all of them. | Leave blank on a normal host. |
network-compression-threshold | 256 | Byte size above which packets are compressed; -1 off, 0 everything. | Raise on a LAN only. |
use-native-transport | true | Optimized packet handling on Linux. | Leave on. |
rate-limit | 0 (off) | Packets allowed before a kick. | Packet floods only; false kicks are common. |
prevent-proxy-connections | false | Kicks players whose network differs from the authenticated one. | Leave off if players use VPNs. |
enforce-secure-profile | true | Requires a signed chat key. | Off on secure profile join errors. |
accepts-transfers | false | Whether transfers from another server are accepted. | Multi-server networks. |
log-ips | true | Whether player IPs appear in console and logs. | Off to keep logs free of personal data. |
text-filtering-config | blank | Chat filter config used internally by Realms. | Never. |
text-filtering-version | 0 | Format version for that config; 0 or 1. | Never. |
Remote management and monitoring
| Property | Default | What it does | When to change it |
enable-rcon | false | Remote console over TCP, unencrypted. | For panels and bots, on localhost. |
rcon.password | blank | RCON password. RCON refuses to start while blank. | Always set a long one. |
rcon.port | 25575 | TCP port RCON listens on. | Change it, never expose it publicly. |
broadcast-rcon-to-ops | true | Sends RCON command output to online ops. | Off with frequent automation. |
enable-query | false | Status protocol for uptime and player-count tools. | If your monitoring needs it. |
query.port | 25565 | UDP port query listens on. | With enable-query, on a clash. |
enable-jmx-monitoring | false | Exposes tick times over JMX; needs JVM flags too. | Deep performance work only. |
management-server-enabled | false | Minecraft Server Management Protocol. Added 1.21.9. | Only for tooling that speaks it. |
management-server-host | localhost | Address it binds to. | Leave on localhost. |
management-server-port | 0 | Port it binds to. | With the management server on. |
management-server-secret | blank | Forty character client token, generated when blank. | To pin a known value. |
management-server-tls-enabled | true | TLS for the management server. | It will not start without a keystore. |
management-server-tls-keystore | blank | Path to the TLS keystore. | Required when TLS is on. |
management-server-tls-keystore-password | blank | Keystore password; an environment variable works too. | Prefer the environment variable. |
status-heartbeat-interval | 0 (off) | Management server heartbeat interval. | If clients need heartbeats. |
Resource pack
| Property | Default | What it does | When to change it |
resource-pack | blank | Direct download URL, up to 250 MiB. | Any server shipping custom assets. |
resource-pack-sha1 | blank | Lowercase SHA-1 that verifies and caches the pack. | Always, and on every pack change. |
resource-pack-id | blank | UUID identifying the pack to clients. | Optional, useful when swapping packs. |
resource-pack-prompt | blank | Custom prompt text, chat component syntax. | To explain why the pack is needed. |
require-resource-pack | false | Disconnects players who decline the pack. | Maps that break without it. |
Properties that moved out of the file
The dead line usually stays in your file. The server ignores a key it no longer recognises and writes the file back out with that key still in it, so an existing server upgraded past these versions keeps a pvp=false line that does nothing at all. You get no warning, no error and no clue. A missing line only tells you the file was generated fresh by a newer build, which is the case where nobody was confused anyway. If a setting here refuses to take effect, assume the line is stale rather than wrong.
If a guide says to edit one of these, that guide predates the change. The first four are now game rules, changeable at runtime.
| Old property | Removed in | Use instead |
pvp | 1.21.9 | Game rule pvp |
allow-nether | 1.21.9 | Game rule allow_entering_nether_using_portals |
enable-command-block | 1.21.9 | Game rule command_blocks_work |
spawn-monsters | 1.21.9 | Game rule spawn_monsters |
spawn-animals | 1.21.2 | No direct replacement |
spawn-npcs | 1.21.2 | No direct replacement |
The settings behind most support tickets
| Setting | Symptom | What is happening |
online-mode | Invalid session, or failed to verify username | The join was not verified. Also seen when authentication is down, or when a proxy in front disagrees. |
white-list | You are not white-listed on this server | The name is missing. Add it with /whitelist add, then /whitelist reload. From 26.3 the whitelist is on by default, so a new server locks everyone out. |
server-port | Connection refused, or a timeout on the address that used to work | The port changed but the firewall, port forward or SRV record still points at the old one. |
max-players | The server is full | Slots are capped here. Ops with the bypass flag still get in, which is why staff see no problem. |
view-distance, simulation-distance | Cannot keep up, rubber banding, slow chunk loads | Both multiply work per player. view-distance ships chunks, simulation-distance ticks them. Drop simulation-distance first for a tick-rate problem, since it decides how much is being simulated. Distant farms stop when you do. |
level-type, level-seed | New seed entered, same old world | Generation settings live inside the world, not here. The file is read only when the world folder does not exist yet. |
difficulty, hardcore | No hostile mobs, or hardcore never applies | peaceful suppresses hostile spawns entirely. hardcore is written into the world at creation, so switching it on later does nothing. |
Warning about online-mode: online-mode=false stops the server checking who is connecting. Anyone can type any username, including yours or an op's, and get that player's inventory, permissions and home. It does not make unlicensed clients safe to admit, it removes the only check that ties a username to an account. Keep it true. The one legitimate case is a backend server reachable only through a proxy that verifies players itself and is firewalled. If a login error sent you here, read cannot verify secure profile and common startup errors first.
Settings that only apply to a brand new world
level-seed, level-type, generator-settings, hardcore, initial-enabled-packs and initial-disabled-packs are read when the world folder is created, then stored in the world. Editing them later changes nothing and reports no error, which is why the seed you typed never shows up. To apply them, point level-name at a folder that does not exist yet. spawn-protection is the opposite case: it is absent from a fresh file and appears only after the first player joins. See the world management guide.
What is not in this file
- Memory and JVM settings.
-Xmx and -Xms belong to the start command. See Aikar's flags and modpack sizing.
- Plugin and mod settings. Those live in
plugins/, config/, spigot.yml and paper-global.yml, and depend on your server software, compared in the software comparison.
- Ranks and permissions. Anything past op level comes from a plugin, usually LuckPerms.
- Player lists.
ops.json, whitelist.json and the two ban lists are separate files, edited in game with commands.
- Game rules.
keep_inventory, mob_griefing and, since 1.21.9, pvp and command_blocks_work are set with /gamerule. Note the snake_case: 1.21.11 renamed every game rule from camelCase, so older guides give names a current server rejects.
- EULA acceptance.
eula.txt, which the server refuses to start without.
- Bedrock clients. A Java server needs Geyser; Bedrock Dedicated Server has its own file.
Related guides
Looking for managed Minecraft server hosting? Supercraft runs Minecraft dedicated servers with daily backups, instant setup, and 4 region options.