---
title: "Minecraft server.properties: The Complete Reference"
description: "Every server.properties key for Minecraft Java 26.2 — type, default, range and what each does, grouped by job, plus the settings that moved to game rules."
url: "https://www.gameserverkings.com/knowledge-base/minecraft/server-properties-reference/"
category: "Minecraft"
category_url: "https://www.gameserverkings.com/knowledge-base/minecraft/"
published: "2026-08-19T04:33:07.330Z"
updated: "2026-08-19T06:39:04.925Z"
source_format: "markdown"
site: "GameServerKings"
---

# Minecraft server.properties: The Complete Reference

`server.properties` is the main configuration file for a Minecraft Java Edition server. It holds 69 settings covering world generation, player access, view distance, ports, remote administration and resource packs. This page documents every one of them — type, default, valid range and what it actually does — grouped by the job it does rather than alphabetically, so you can find the setting you need without knowing its name first.

For first boot, the EULA and connecting to your server, start with [Getting started with your Minecraft server](/knowledge-base/minecraft/java-getting-started/). For the commands referenced throughout this page, see [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/).

> [!NOTE] This reference is current for Java Edition 26.2
> The key list, types and defaults below are those of **26.2**, the current release. Java Edition renumbered its releases in 2026, so versions now look like `26.2` rather than `1.x` — [Getting started](/knowledge-base/minecraft/java-getting-started/) explains the numbering. Keys are added and removed almost every drop; section 13 lists the ones older guides still tell you to set. Bedrock Edition uses a different and incompatible `server.properties` with its own key set — that file is documented separately in [Minecraft Bedrock server.properties: The Complete Key Reference](/knowledge-base/minecraft/bedrock-server-properties/).

## 1. How the File Works

`server.properties` lives in your server's working directory — the root folder you see in the panel's **File Manager**. It is plain UTF-8 text in Java properties format: one `key=value` pair per line, `#` starts a comment, and every value is stored as a string even when the server reads it back as a number or a boolean.

![server.properties open in the panel's file editor](<https://cdn.gskinternal.com/articles/images/minecraft-server-properties.png>)

The server rewrites the file on every startup. That process is worth understanding, because it explains most of the confusion people have with this file:

1. If the file exists, existing values are read out of it. **Comments are discarded.**
2. Any key that is missing, or has a value the server cannot parse, is reset to its default.
3. Keys the server does not recognise are left exactly as they are and written straight back out.
4. The file is written back out in UTF-8, with a fresh timestamp comment on line two.

> [!WARNING] Changes need a restart, and a typo will not announce itself
> Editing `server.properties` while the server is running does nothing — the file is read once at startup. Restart from the panel after any change. And a misspelled key usually produces **no error message at all**: the server does not recognise it, so it is never applied — but step 3 above means it is not removed either. It sits in the file across restart after restart, looking exactly like a setting that is working. So "is my line still there?" is not a useful test, because it always will be; check the spelling against the tables on this page instead. An invalid *value* is more visible: some are quietly reset to the default on the next rewrite, and some print an error to the console at startup.

A few characters are escaped with a backslash when the server writes the file. You will see this most often on `level-type`:

``` title="server.properties — escaped colon"
level-type=minecraft\:normal
```

That backslash is written by the server itself and is correct. Leave it alone — `minecraft:normal` without the escape is also read correctly, and the server will re-add the backslash on the next rewrite either way.

> [!IMPORTANT] `server-port` is managed by the panel
> Your server is bound to the port allocated in the panel's **Network** tab, and the panel keeps `server-port` in sync on boot. Do not edit it by hand. If you need a different or an additional port, allocate it in the panel. This is also why your connection address is often not the Java default of `25565`.

## 2. World Generation and the World File

These are read when a world is **created**. Changing `level-seed`, `level-type` or `generator-settings` on a world that already exists has no effect on terrain that has already generated — you need a new world, or a new `level-name`, for them to matter.

| Key | Type | Default | What it does |
|---|---|---|---|
| `level-name` | string | `world` | The world folder name, and the name of the world. If a valid world exists at this path it is loaded; otherwise a new one is generated here. Accepts a relative or an absolute path. Changing it is the standard way to swap between worlds without deleting anything |
| `level-seed` | string | *blank* | The world seed. Blank generates a random one. Only used at world creation |
| `level-type` | string | `minecraft:normal` | The world preset. The `minecraft:` namespace may be omitted. Valid values: `minecraft:normal`, `minecraft:flat`, `minecraft:large_biomes`, `minecraft:amplified`, `minecraft:single_biome_surface` |
| `generator-settings` | string | `{}` | JSON customising world generation. What it accepts depends on `level-type` — for `minecraft:flat` it defines the layers |
| `generate-structures` | boolean | `true` | Whether structures such as villages, temples and strongholds generate in new chunks. Note that dungeons still generate even when this is `false` |
| `max-world-size` | integer (1–29999984) | `29999984` | Distance in blocks from world centre to the world border. Values above the default do nothing — it is the hard engine limit. Lowering it caps how far `/worldborder` can be pushed |
| `hardcore` | boolean | `false` | Enables hardcore mode on created worlds: difficulty is locked to hard and death is permanent |

> [!TIP] Use `level-name` to switch worlds instead of deleting them
> Setting `level-name=world2` makes the server generate and load a fresh world in a `world2` folder, leaving the original `world` folder untouched on disk. Point it back to `world` to return. This is far safer than deleting a world folder, and it is the cleanest way to test a new seed. Take a backup first regardless — see [Managing your Minecraft server](/knowledge-base/minecraft/performance-and-backups/).

## 3. Gameplay Defaults

| Key | Type | Default | What it does |
|---|---|---|---|
| `gamemode` | string | `survival` | The game mode new players join in. Valid values: `survival`, `creative`, `adventure`, `spectator`. Legacy numbers `0`–`3` are silently converted |
| `force-gamemode` | boolean | `false` | `false` — players rejoin in whatever mode they logged out in. `true` — every player is switched to `gamemode` on join, every time |
| `difficulty` | string | `easy` | Mob damage, hunger and poison behaviour. Valid values: `peaceful`, `easy`, `normal`, `hard`. Legacy numbers `0`–`3` are silently converted |
| `spawn-protection` | integer | `16` | Radius of the build-protected area around world spawn, as a square of side `2x+1`. `16` protects 33×33 blocks; `1` protects 3×3; `0` disables it. Only players at permission level 1 or higher can build inside it. If no ops are set, spawn protection disables itself automatically |

## 4. Players, Access and Permissions

| Key | Type | Default | What it does |
|---|---|---|---|
| `max-players` | integer (0 – 2³¹−1) | `20` | Concurrent player cap. On a rented server this is bounded by your slot purchase. Ops with `bypassesPlayerLimit` set in `ops.json` can join a full server |
| `white-list` | boolean | `false` | Whether the whitelist is enforced. When on, only players listed in `whitelist.json` may connect. Ops are whitelisted automatically. **This default changes in 26.3 — see section 12** |
| `enforce-whitelist` | boolean | `false` | What happens to players already online when the whitelist is reloaded. `false` — they stay connected. `true` — anyone not on the list is kicked |
| `online-mode` | boolean | `true` | Whether connecting players are verified against Mojang's account database. Leave this `true`. Setting it `false` ("cracking" the server) lets anyone join under any username, including someone claiming to be you |
| `enforce-secure-profile` | boolean | `true` | Requires players to have a Mojang-signed public key. With it off, all chat is unsigned and unreportable, and clients show a warning when connecting |
| `prevent-proxy-connections` | boolean | `false` | Kicks players whose ISP/AS as seen by the server differs from the one Mojang's authentication server reports — a rough VPN and proxy filter |
| `accepts-transfers` | boolean | `false` | Whether the server accepts players sent by another server's transfer packet. `false` rejects the transfer and disconnects the player. Relevant if you run a multi-server network |
| `op-permission-level` | integer (0–4) | `4` | The permission level written into `ops.json` when you run `/op`. It is the default for **newly created** ops, not a server-wide ceiling — existing operators keep the level already stored against them |
| `function-permission-level` | integer (1–4) | `2` | The permission level that datapack functions run at. Raise it only if a datapack genuinely needs level 3 or 4 commands |
| `allow-flight` | boolean | `false` | Whether survival-mode flight from a client mod is tolerated. `false` kicks players who stay airborne for roughly five seconds. Has no effect in creative mode, and no effect on elytra or levitation |

> [!IMPORTANT] `white-list=true` alone does not kick anyone
> Turning the whitelist on stops *new* non-whitelisted connections, but players already online stay connected until they disconnect. Set `enforce-whitelist=true` as well if you want the list applied to the players who are already in the world. Manage entries with `/whitelist add`, `/whitelist remove` and `/whitelist reload` — see [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/).

The five permission levels themselves (`0` operator, `1` moderator, `2` gamemaster, `3` admin, `4` owner), which commands each unlocks, and how to edit a per-player `level` in `ops.json` are documented in [Minecraft Op Permission Levels: 0 to 4 Explained](/knowledge-base/minecraft/op-permission-levels/). For the commands themselves, see [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/).

## 5. Moderation, Anti-Spam and Idle Handling

| Key | Type | Default | What it does |
|---|---|---|---|
| `player-idle-timeout` | integer | `0` | Minutes a player may idle before being kicked. `0` never kicks. The idle timer resets on almost any deliberate action — moving items, using an item, swinging, chatting, interacting, updating a sign |
| `chat-spam-threshold-seconds` | integer | `10` | Budget for the automatic chat-spam kick, decremented once per tick (1/20 s). Raise it to be more permissive; `0` disables the kick entirely. Added in 26.2 |
| `command-spam-threshold-seconds` | integer | `10` | The same mechanism for commands rather than chat messages. `0` disables it. Added in 26.2 |
| `rate-limit` | integer | `0` | Maximum packets a player may send before being kicked. `0` disables the limit. A blunt instrument — legitimate clients on a poor connection can trip a low value |
| `enable-code-of-conduct` | boolean | `false` | When `true`, the server looks for a `codeofconduct` subfolder next to `server.properties` and shows joining players the file matching their language. Files are named `<language_code>.txt`, for example `en_us.txt`. If the player's language has no file, `en_us.txt` is used; if that is missing too, any available file is shown |

## 6. Performance and Ticking

These are the settings that actually move the needle on tick rate. For diagnosing *why* a server is slow before you start changing numbers, see [Managing your Minecraft server](/knowledge-base/minecraft/performance-and-backups/).

| Key | Type | Default | What it does |
|---|---|---|---|
| `view-distance` | integer (3–32) | `10` | How much world data the server sends each client, as a chunk radius. This is the server-side ceiling — a client asking for more is capped here |
| `simulation-distance` | integer (3–32) | `10` | Chunk radius within which entities, redstone and crops actually tick. Entities outside it are neither updated nor visible. This is usually the more expensive of the two |
| `entity-broadcast-range-percentage` | integer (10–1000) | `100` | How far away entities are sent to clients, as a percentage of the normal distance. `50` halves it. Lower values cut bandwidth and client load on entity-heavy servers |
| `max-tick-time` | integer (−1, or 0 – 2⁶³−1) | `60000` | Milliseconds a single tick may take before the watchdog declares the server crashed, kills it, and exits with code 1. `-1` disables the watchdog entirely |
| `max-chained-neighbor-updates` | integer | `1000000` | Cap on consecutive block-neighbour updates before further ones are skipped. A guard against redstone contraptions locking the tick. Negative values disable the limit |
| `pause-when-empty-seconds` | integer | `60` | Seconds with no players online before the server pauses ticking. Cuts idle CPU to almost nothing. Set it high, or to a value you are sure exceeds your gaps, if you rely on farms or timers running while nobody is on |
| `sync-chunk-writes` | boolean | `true` | Writes chunk data synchronously, which protects against world corruption on a crash at the cost of I/O throughput. Leave it on |
| `region-file-compression` | string | `deflate` | Compression for region files. Valid values: `deflate`, `lz4`, `none`. `lz4` trades disk space for less CPU per chunk write. Chunks are not automatically recompressed when changed, so switching algorithms on an existing world applies gradually rather than all at once |

> [!TIP] Lower `simulation-distance` before `view-distance`
> They look interchangeable and are not. `view-distance` mostly costs bandwidth and client memory; `simulation-distance` costs server CPU on every single tick, because it decides how many entities and blocks are being simulated. Dropping simulation to `6` while leaving view at `10` keeps the world looking the same size to players while cutting a large slice of the tick cost.

> [!CAUTION] Do not disable the watchdog to "fix" crashes
> Setting `max-tick-time=-1` stops the server killing itself after a 60-second tick, but a tick that long means something is badly wrong — a corrupted chunk, a runaway contraption or a broken plugin. Disabling the watchdog hides the symptom and lets a wedged server sit there accepting connections it cannot serve. Profile it instead.

## 7. Networking and Ports

| Key | Type | Default | What it does |
|---|---|---|---|
| `server-port` | integer (1 – 65534) | `25565` | The TCP port the server listens on. **Managed by the panel — do not edit by hand** |
| `server-ip` | string | *blank* | Which local IP address to bind to. Blank binds to all available addresses, which is what you want. Leave it empty |
| `network-compression-threshold` | integer | `256` | Packets of this many bytes or more are compressed. `-1` disables compression; `0` compresses everything. Values below 64 are pointless because Ethernet pads short frames to 64 bytes anyway, and going above the typical 1500-byte MTU is not recommended |
| `use-native-transport` | boolean | `true` | Uses Linux-optimised packet send/receive paths. Leave it on — your server is running on Linux |

## 8. Server List and Status

| Key | Type | Default | What it does |
|---|---|---|---|
| `motd` | string | `A Minecraft Server` | The line shown under your server's name in the client's multiplayer list. Supports colour and formatting codes and non-ASCII characters. Keep it to 59 characters or fewer — longer MOTDs can make the server list report a communication error |
| `enable-status` | boolean | `true` | Whether the server answers status pings. Set to `false` and the server shows as offline in the client list while still accepting connections normally |
| `hide-online-players` | boolean | `false` | Omits the player list from status responses. The player count still shows; the names do not |
| `bug-report-link` | string | *blank* | URL used for the client's `report_bug` server link. Left blank, no link is offered |

## 9. Remote Access: RCON, Query, JMX and the Management Protocol

Four separate remote-administration mechanisms, all off by default. On a rented server you rarely need any of them — the panel's **Console** tab already gives you authenticated command access — but they are here when you want to script against the server.

### RCON

| Key | Type | Default | What it does |
|---|---|---|---|
| `enable-rcon` | boolean | `false` | Enables RCON, a TCP protocol for running console commands remotely |
| `rcon.port` | integer (1 – 65534) | `25575` | TCP port RCON listens on |
| `rcon.password` | string | *blank* | RCON password. If RCON is enabled and this is blank, RCON refuses to start — a deliberate safeguard |
| `broadcast-rcon-to-ops` | boolean | `true` | Whether output from RCON commands is echoed to online operators |

> [!CAUTION] RCON is unencrypted
> Every byte between an RCON client and the server travels in plain text, including the password on connect. Anyone able to observe the traffic can capture it and take full control of your server. Only use RCON over localhost or an otherwise trusted private network, never across the open internet, and never reuse a password you use elsewhere. If you just want to run commands remotely, use the panel console instead.

### Query

| Key | Type | Default | What it does |
|---|---|---|---|
| `enable-query` | boolean | `false` | Enables the UDP query protocol, which reports the MOTD, game type, version, map name, current and maximum player counts, the plugin list and the full list of online player names. Used by server-list sites and status bots |
| `query.port` | integer (1 – 65534) | `25565` | UDP port query listens on. Note the default matches `server-port`, and that on a rented server the panel allocation governs which ports you can actually use |

### JMX Monitoring

| Key | Type | Default | What it does |
|---|---|---|---|
| `enable-jmx-monitoring` | boolean | `false` | Exposes an MBean named `net.minecraft.server:type=Server` with `averageTickTime` and `tickTimes` attributes, in milliseconds. Enabling it here is only half the job — the JVM also needs its own JMX flags before anything is reachable |

### Management Protocol

Added across the 1.21.9 and 1.21.11 development cycles, the Minecraft Server Management Protocol is a JSON-RPC 2.0 API over WebSocket for managing a server programmatically. It is a newer and better-designed alternative to RCON: authenticated with a bearer token and TLS-encrypted by default.

| Key | Type | Default | What it does |
|---|---|---|---|
| `management-server-enabled` | boolean | `false` | Enables the management API |
| `management-server-host` | string | `localhost` | Host the API binds to |
| `management-server-port` | integer | `0` | Port the API listens on. `0` means a random port is chosen at startup — set a fixed number if you intend to connect to it |
| `management-server-secret` | string | *blank* | The bearer token clients must present. Exactly 40 alphanumeric characters. **Left blank, the server generates one and writes it back into `server.properties` on startup** |
| `management-server-allowed-origins` | string | *blank* | Comma-separated list of origins permitted to connect. Requests without a matching `Origin` header are rejected with 401. **Left empty, no browser client can connect at all.** Entries need not be valid URLs or domains |
| `management-server-tls-enabled` | boolean | `true` | Whether the API uses TLS. **The server will not start if TLS is on and no keystore is configured** |
| `management-server-tls-keystore` | string | *blank* | Path to the TLS keystore. Must be PKCS12 format |
| `management-server-tls-keystore-password` | string | *blank* | Keystore password. Can also be supplied, in descending priority, by the `MINECRAFT_MANAGEMENT_TLS_KEYSTORE_PASSWORD` environment variable or the `-Dmanagement.tls.keystore.password=` JVM argument — both preferable to writing a password into a config file |
| `status-heartbeat-interval` | integer | `0` | How often the management server sends heartbeat notifications to connected clients. `0` disables heartbeats |

> [!WARNING] Enabling the management server can stop the server booting
> `management-server-tls-enabled` defaults to `true`, and a TLS-enabled management server with no keystore configured **refuses to start the whole server**. If you turn `management-server-enabled=true` and your server then fails to boot, this is why. Either provide a PKCS12 keystore via `management-server-tls-keystore`, or set `management-server-tls-enabled=false` and keep the API bound to `localhost`. Note also that `management-server-allowed-origins` is written into the generated file but is not yet listed in the wiki's own property table — it is documented on the protocol page instead.

## 10. Resource Packs and Datapacks

| Key | Type | Default | What it does |
|---|---|---|---|
| `resource-pack` | string | *blank* | Direct download URL for a server resource pack. Players are prompted to accept it on join. Maximum size 250 MiB. Download success or failure is logged by the *client*, not the server, so a broken URL produces nothing in your console |
| `resource-pack-sha1` | string | *blank* | SHA-1 digest of the pack, lowercase hex. Strongly recommended: it lets clients verify and cache the pack. A mismatch prints `Invalid sha1 for resource-pack-sha1` in the console at startup |
| `resource-pack-id` | string (UUID) | *blank* | Optional hyphenated UUID identifying the pack to clients |
| `resource-pack-prompt` | string | *blank* | Custom message shown on the resource-pack prompt when `require-resource-pack` is on. Expects chat-component JSON syntax and may span multiple lines. Blank uses the default wording |
| `require-resource-pack` | boolean | `false` | Disconnects players who decline the resource pack |
| `initial-enabled-packs` | string | `vanilla` | Comma-separated datapacks enabled at world creation. Experimental feature packs must be listed explicitly to be turned on |
| `initial-disabled-packs` | string | *blank* | Comma-separated datapacks to leave disabled at world creation |

> [!NOTE] The `initial-` pack settings only apply at world creation
> Both `initial-enabled-packs` and `initial-disabled-packs` are read once, when the world is generated. On an existing world, manage datapacks with `/datapack enable` and `/datapack disable` instead — covered in [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/).

## 11. Logging, Console Output and Text Filtering

| Key | Type | Default | What it does |
|---|---|---|---|
| `log-ips` | boolean | `true` | Whether player IP addresses appear in console output and log files. Set to `false` if you would rather not have player IPs sitting in your logs |
| `broadcast-console-to-ops` | boolean | `true` | Whether console command output is relayed to online operators |
| `text-filtering-config` | string | *blank* | Configuration for the chat filtering mechanism. Used internally by Realms; not documented by Mojang and not intended for general use |
| `text-filtering-version` | integer | `0` | Format version for `text-filtering-config`. Valid values are `0` and `1` |

## 12. The `white-list` Default Is Changing in 26.3

`white-list` currently defaults to **`false`** — a new server accepts anyone. That is the correct value for 26.2, the current release.

A change to make `white-list` default to **`true`** landed in **26.3 Snapshot 2**. As of 18 August 2026, **26.3 has not been released**: the latest release is 26.2 (16 June 2026) and 26.3 is still in snapshots, currently 26.3 Snapshot 9. The wiki lists this change under *Upcoming*, and the file generated by 26.2 still writes `white-list=false`.

> [!IMPORTANT] Do not rely on this yet, but do plan for it
> Nothing changes on your server today. But when 26.3 ships, a **freshly generated** `server.properties` will have the whitelist on by default, and a new server will reject everyone who has not been added. Existing servers are unaffected — step 1 of the regeneration process copies your existing value forward, so a file that already says `white-list=false` keeps saying it. The servers that will be caught out are new ones, and any server whose `server.properties` is deleted or reset. Set the value explicitly rather than leaving it to the default, and this cannot surprise you either way.

## 13. Removed Keys: What Older Guides Still Get Wrong

Most `server.properties` guides on the web are years out of date. Putting a removed key in the file does nothing at all — the server does not recognise it, so it is never applied. It is not removed either: the line survives every rewrite and sits in your file indefinitely, which is a large part of why these settings keep getting copied from one guide to the next. There is no warning.

Four settings were not deleted but **moved to game rules**, which live inside the world save rather than in a config file. Game rules apply immediately and persist across restarts, with no reboot needed:

| Old `server.properties` key | Removed in | Replacement |
|---|---|---|
| `pvp` | 1.21.9 | `/gamerule pvp false` |
| `enable-command-block` | 1.21.9 | `/gamerule command_blocks_work false` |
| `allow-nether` | 1.21.9 | `/gamerule allow_entering_nether_using_portals false` |
| `spawn-monsters` | 1.21.9 | `/gamerule spawn_monsters false` |

All four game rules default to `true`. For one of them that is a behaviour change worth noticing: the old `enable-command-block` property defaulted to `false`, so command blocks were off until you enabled them, whereas `command_blocks_work` is on unless you turn it off.

> [!WARNING] `enableCommandBlocks` is the wrong name — it was renamed twice
> This one catches almost everybody, including guides written after the change. 1.21.9 first introduced the rule as `enableCommandBlocks`, then renamed it to `commandBlocksEnabled` later in the same development cycle, and 1.21.11 renamed it again to **`command_blocks_work`** when all game rules moved into a registry and switched from camelCase to snake_case. Only the last of those three works on a current server. If you are still running 1.21.9 or 1.21.10, the four rules are spelled `pvp`, `commandBlocksEnabled`, `allowEnteringNetherUsingPortals` and `spawnMonsters`. The full renamed list, including the three rules whose meaning was **inverted** along with the rename, is in [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/).

These keys were removed outright, with no replacement setting:

| Removed key | Removed in | Notes |
|---|---|---|
| `spawn-animals` | 1.21.2 | Controlled passive mob spawning. Nothing replaced it |
| `spawn-npcs` | 1.21.2 | Controlled villager spawning. Removed in the same snapshot as `spawn-animals`, and almost always omitted from the guides that do mention `spawn-animals` |
| `snooper-enabled` | 1.18 | Sent anonymous statistics to Mojang. The snooper service is gone |
| `max-build-height` | 1.17 | Build height is now a property of the world's dimension type |
| `previews-chat` | 1.19.3 | Chat preview, introduced and withdrawn within 1.19 |
| `announce-player-achievements` | 1.12 | Became the `announceAdvancements` game rule, which 1.21.11 renamed again to `show_advancement_messages` |

`debug` and `texture-pack` also appear in very old guides. Neither exists any more — `texture-pack` was superseded by `resource-pack`.

## 14. The Full Default File

This is exactly what Java Edition 26.2 generates on first startup, with all 69 keys at their defaults. Two values are placeholders here: `management-server-secret` is randomly generated per server, and line 2 carries the file's generation timestamp.

``` title="server.properties — 26.2 defaults"
#Minecraft server properties
#[Generation date and time]
accepts-transfers=false
allow-flight=false
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
bug-report-link=
chat-spam-threshold-seconds=10
command-spam-threshold-seconds=10
difficulty=easy
enable-code-of-conduct=false
enable-jmx-monitoring=false
enable-query=false
enable-rcon=false
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=
initial-enabled-packs=vanilla
level-name=world
level-seed=
level-type=minecraft\:normal
log-ips=true
management-server-allowed-origins=
management-server-enabled=false
management-server-host=localhost
management-server-port=0
management-server-secret=[Random text]
management-server-tls-enabled=true
management-server-tls-keystore=
management-server-tls-keystore-password=
max-chained-neighbor-updates=1000000
max-players=20
max-tick-time=60000
max-world-size=29999984
motd=A Minecraft Server
network-compression-threshold=256
online-mode=true
op-permission-level=4
pause-when-empty-seconds=60
player-idle-timeout=0
prevent-proxy-connections=false
query.port=25565
rate-limit=0
rcon.password=
rcon.port=25575
region-file-compression=deflate
require-resource-pack=false
resource-pack=
resource-pack-id=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=10
spawn-protection=16
status-heartbeat-interval=0
sync-chunk-writes=true
text-filtering-config=
text-filtering-version=0
use-native-transport=true
view-distance=10
white-list=false
```

## 15. Recommended Starting Points

There is no universally correct configuration, but these are sane departures from the defaults for three common cases. Everything not listed stays at its default.

``` title="Small private server for friends"
white-list=true
enforce-whitelist=true
difficulty=normal
view-distance=10
simulation-distance=10
pause-when-empty-seconds=60
```

``` title="Busy public survival server"
max-players=60
view-distance=8
simulation-distance=6
entity-broadcast-range-percentage=75
network-compression-threshold=256
sync-chunk-writes=true
spawn-protection=32
```

``` title="Modpack server"
view-distance=8
simulation-distance=6
max-tick-time=180000
region-file-compression=lz4
pause-when-empty-seconds=300
```

> [!TIP] Change one thing at a time
> `server.properties` values interact, and several of them cost tick time in ways that are not obvious until the server is full. Change one setting, restart, and watch the result before changing the next. If you are tuning to fix a performance problem rather than to set the server up, profile first — [Managing your Minecraft server](/knowledge-base/minecraft/performance-and-backups/) covers finding the actual cause, which is very often a plugin or an entity pile-up rather than anything in this file.

## 16. FAQ

### Where is server.properties on a rented server?

In the root of your server's file tree. Open your [rented Minecraft server](/games/minecraft/) in the panel, go to the **File Manager**, and `server.properties` is in the top-level listing next to `eula.txt` and your world folder. Edit it there, save, and restart.

### Why did my change not take effect?

Three common causes, in order of likelihood. You did not restart — the file is read once at startup and never again. The key was misspelled, in which case it is never read at all and simply sits there looking correct, or the value was invalid, in which case the server may have reset it to the default. Or the setting only applies at world creation, which is true of `level-seed`, `level-type`, `generator-settings` and both `initial-*-packs` keys.

### Why did my comments disappear?

The server discards comments when it rewrites the file on startup, keeping only its own two header lines. There is no way to preserve your own — keep notes somewhere else.

### How do I whitelist players?

Set `white-list=true`, restart, then add players from the panel console with `whitelist add PlayerName` (no leading slash in the console). Add `enforce-whitelist=true` if you also want non-whitelisted players who are already online to be kicked. See [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/) for the full whitelist command set, and [Minecraft Whitelist and Ban Management](/knowledge-base/minecraft/whitelist-and-ban-management/) for running the list day to day — editing `whitelist.json` directly, offline UUIDs, and bans.

### Does `pvp=false` still work?

No. `pvp` was removed from `server.properties` in 1.21.9 and is now a game rule. Run `/gamerule pvp false` in-game as an op, or `gamerule pvp false` from the panel console once the world has generated.

### Should I set `online-mode=false`?

No. It disables Mojang account verification, which means anyone can connect claiming to be any username — including yours, with your op permissions. It exists for servers with no internet access. Every legitimate use case people reach for it to solve, such as a proxy network, has a proper solution that keeps verification intact.

### How many players can `max-players` actually take?

The setting itself accepts any positive integer, but the real limit is CPU and RAM, and on a rented server your slot allocation. The settings that decide how many players a given machine can carry are `view-distance` and `simulation-distance`, not `max-players` — see section 6.

### Can I edit server.properties while the server is running?

You can edit it, but the server will overwrite your changes with its in-memory values the next time it writes the file, and it will not read yours in the meantime. Stop the server, edit, then start it.

## 17. What to Read Next

- [Getting started with your Minecraft server](/knowledge-base/minecraft/java-getting-started/) for first boot, the EULA, version numbering and connecting
- [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/) for the full command and game rule reference, including `/whitelist` and `/gamerule`
- [Minecraft Op Permission Levels: 0 to 4 Explained](/knowledge-base/minecraft/op-permission-levels/) for `op-permission-level`, `function-permission-level` and what each level unlocks
- [Managing your Minecraft server](/knowledge-base/minecraft/performance-and-backups/) for performance tuning, profiling and backups
- [How to install plugins for Minecraft Java Edition](/knowledge-base/minecraft/java-plugins/) for Paper, Spigot and Purpur servers
- [How to install mods for Minecraft Java Edition](/knowledge-base/minecraft/java-mods/) for Forge, Fabric and NeoForge servers
- [Setting up CrossPlay for Minecraft](/knowledge-base/minecraft/geyser-crossplay/) to let Bedrock players join a Java server
- [Minecraft Bedrock server.properties: The Complete Key Reference](/knowledge-base/minecraft/bedrock-server-properties/) for the separate, incompatible Bedrock key set
- [Setting up your Bedrock Minecraft server](/knowledge-base/minecraft/bedrock/) for Bedrock first boot and day-to-day operation

Primary source for every key, type and default on this page: the [official Minecraft Wiki `server.properties` article](https://minecraft.wiki/w/Server.properties), cross-checked against Mojang's [version manifest](https://piston-meta.mojang.com/mc/game/version_manifest_v2.json) for release status, and the wiki's [Game rule](https://minecraft.wiki/w/Game_rule) and [Minecraft Server Management Protocol](https://minecraft.wiki/w/Minecraft_Server_Management_Protocol) articles. Verified 18 August 2026 against Java Edition 26.2.

---

Made with 💜 by GameServerKings
