---
title: "Minecraft Bedrock server.properties: The Complete Key Reference"
description: "Every server.properties key for Bedrock Dedicated Server 1.26.44.3 — values, defaults and effects — plus the Java keys that do nothing on Bedrock."
url: "https://www.gameserverkings.com/knowledge-base/minecraft/bedrock-server-properties/"
category: "Minecraft"
category_url: "https://www.gameserverkings.com/knowledge-base/minecraft/"
published: "2026-08-19T04:44:09.975Z"
updated: "2026-08-19T07:00:08.708Z"
source_format: "markdown"
site: "GameServerKings"
---

# Minecraft Bedrock server.properties: The Complete Key Reference

Bedrock Dedicated Server (BDS) reads a file called `server.properties`, the same filename Java Edition uses. That is where the similarity ends. The two editions ship **completely different key sets**, and only eleven key names appear in both. Every other Java setting you paste into a Bedrock `server.properties` is read, not recognised, and silently ignored — no error, no warning, no effect.

This page documents every key the current Bedrock Dedicated Server accepts: name, valid values, default, and what it actually changes. For first boot, connecting and day-to-day operation see [Setting up your Bedrock Minecraft server](/knowledge-base/minecraft/bedrock/). For the Java Edition file, which is a different document entirely, see [Minecraft server.properties: The Complete Reference](/knowledge-base/minecraft/server-properties-reference/).

> [!NOTE] This reference is current for Bedrock Dedicated Server 1.26.44.3
> Every value below was read out of the `server.properties` and `bedrock_server_how_to.html` files shipped inside the official BDS 1.26.44.3 archive, the build served by Mojang's download API as of **18 August 2026**. It corresponds to Bedrock Edition **26.44**, released 14 August 2026. Bedrock adds and removes keys frequently, so check the comments in your own copy of the file if a key here is missing on your server.

## 1. How the File Works

The format is one `key=value` per line, and lines starting with `#` are comments. The `server.properties` inside Mojang's own BDS download is heavily commented — every key carries a short description and its allowed values — and that copy is worth keeping open while you work.

> [!IMPORTANT] The file on your server here will not look like that
> Our Bedrock egg generates `server.properties` fresh when the server installs, so the copy you open in the File Manager arrives with **41 active lines and no comments at all**. Nothing is missing and nothing is broken — the keys are simply bare. Use this page, or the commented copy inside Mojang's BDS download, rather than expecting your own file to explain itself.

The file holds **68 recognised keys** in total:

| Where it appears | Count | Meaning |
|---|---|---|
| Active lines in the shipped file | 41 | Set to their default; edit in place |
| Commented out in the shipped file | 25 | Optional. Uncomment to use, otherwise the default applies |
| Documented but not present at all | 2 | `enable-packet-rate-limiter` and `server-authoritative-block-breaking`. Add the line yourself |

A commented-out key is not a disabled key. It is a key running on its default. Uncommenting `#enable-profiler=true` and leaving the value alone changes nothing; you have to uncomment it *and* set the value you want.

> [!IMPORTANT] Bedrock has no `/reload` — every change needs a restart
> Java's `/reload` has no working equivalent on BDS. The server has to be restarted for a `server.properties` change to take effect. The single exception is the console command `changesetting`, which can flip `allow-cheats` and `difficulty` on a running server — and it does **not** write your choice back to the file, so the value reverts on the next restart unless you also edit the file.

Most keys are read on every startup. `level-seed` is the exception: it is only consulted when the world is first generated, so changing it on an existing world does nothing.

## 2. World and Gameplay

| Key | Values | Default | Effect |
|---|---|---|---|
| `level-name` | Any string, no semicolon and no characters illegal in a filename | `Bedrock level` | Names the world, and names its folder under `worlds/` |
| `level-seed` | Any string | *(empty)* | World generation seed. Empty means random. **Read at world creation only** |
| `gamemode` | `survival`, `creative`, `adventure` | `survival` | Game mode new players start in |
| `force-gamemode` | `true`, `false` | `false` | When `false`, the server never overrides the game mode saved with the world, even if you change `gamemode` afterwards. Set `true` to make a post-creation `gamemode` change actually apply |
| `difficulty` | `peaceful`, `easy`, `normal`, `hard` | `easy` | World difficulty |
| `allow-cheats` | `true`, `false` | `false` | Whether commands can be used at all. With this off, even an operator cannot run slash commands |
| `texturepack-required` | `true`, `false` | `false` | Forces clients to accept the world's texture packs before joining |

> [!TIP] `allow-cheats` is the setting people miss
> Making somebody an operator does not give them commands if `allow-cheats` is `false`. It is a world-level switch that sits above the permission system, and it is off by default. If `/gamemode` returns nothing at all for an operator, this is almost always why.

## 3. Players and Access

| Key | Values | Default | Effect |
|---|---|---|---|
| `max-players` | Any positive integer | `10` | Player cap. Higher values cost performance |
| `online-mode` | `true`, `false` | `true` | Requires every player to be authenticated with Xbox Live. Clients connecting to a remote (non-LAN) server are always required to authenticate regardless of this setting |
| `allow-list` | `true`, `false` | `true` | Restricts joining to players listed in `allowlist.json` |
| `default-player-permission-level` | `visitor`, `member`, `operator` | `member` | Role assigned to a player joining for the first time |
| `allow-player-joining` | `true`, `false` | `true` | When `false`, nobody can join unless a script explicitly permits it via `AsyncPlayerJoinBeforeEvent`. Commented out by default |
| `player-idle-timeout` | Any non-negative integer (minutes) | `30` | Kicks players idle for this long. `0` disables the timeout |
| `chat-restriction` | `None`, `Dropped`, `Disabled` | `None` | `Dropped` silently discards chat and tells players the feature is off. `Disabled` hides the chat UI entirely from non-operators |
| `disable-player-interaction` | `true`, `false` | `false` | Tells clients to ignore other players when interacting with the world. Not server-authoritative |
| `disable-custom-skins` | `true`, `false` | `false` | Blocks skins made outside Minecraft's own store and in-game assets — the usual lever against offensive custom skins |
| `disable-persona` | `true`, `false` | `false` | Marked "Internal Use Only" in Mojang's own documentation. Leave it alone |

> [!WARNING] `allow-list` now defaults to `true` — a fresh server locks everybody out
> This default changed. Bedrock Dedicated Server shipped `allow-list=false` for years and flipped to `allow-list=true` in the **26.30** release; BDS 1.26.23.1 still shipped `false`, and 1.26.30.5 shipped `true`. On a current build, an untouched server accepts nobody until you add them. Players who try get **"You're not invited to play on this server."** The fix is to add yourself, not to disable the list — see [Bedrock Allowlist and Permissions](/knowledge-base/minecraft/bedrock-allowlist-and-permissions/).

## 4. Networking and Ports

| Key | Values | Default | Effect |
|---|---|---|---|
| `server-port` | Integer 1–65535 (values under 1024 are reserved in practice) | `19132` | IPv4 port |
| `server-portv6` | Integer 1–65535 | `19133` | IPv6 port. Ignored when `transport=nethernet` |
| `transport` | `raknet`, `nethernet` | `raknet` | Network transport. See below |
| `server-ip` | An IPv4 or IPv6 literal, or empty | *(empty)* | Local bind address. Empty binds all interfaces. **Only used when `transport=nethernet`** |
| `server-udp-ports` | See below | *(empty)* | Constrains the UDP port window and can publish a NAT mapping. **Only used when `transport=nethernet`** |
| `enable-lan-visibility` | `true`, `false` | `true` | Responds to LAN server discovery |
| `compression-threshold` | Integer 0–65535 | `1` | Smallest raw network payload that gets compressed. A CPU-versus-bandwidth trade |
| `compression-algorithm` | `zlib`, `snappy` | `zlib` | Network compression algorithm |
| `enable-packet-rate-limiter` | `true`, `false` | `false` | Applies the per-packet-type rate limits configured in `packetlimitconfig.json`. Not present in the shipped file — add the line |

Bedrock is a **UDP** game. Java is TCP. That single difference explains most of the port confusion between the two editions.

> [!WARNING] `enable-lan-visibility` grabs 19132 and 19133 even when you moved the port
> With `transport=raknet`, leaving LAN visibility on makes the server bind the **default** ports 19132 and 19133 as well as the ones you set in `server-port` and `server-portv6`. On a shared host that is a port conflict waiting to happen, and it is the reason two Bedrock servers on one machine can refuse to start even with different ports configured. Turn it off if you are not relying on LAN discovery.

### The `nethernet` transport

`transport` selects how clients reach the server, and the two values behave very differently:

- **`raknet`** — the traditional Bedrock UDP transport, and the default. The server listens directly on `server-port` and `server-portv6`, and clients connect to that address and port. This is how every earlier release worked.
- **`nethernet`** — a WebRTC-based transport. The server opens a single dual-stack **TCP** socket on `server-port` for an HTTP-based signalling handshake, then negotiates a separate UDP connection with each client for gameplay traffic.

`server-ip` and `server-udp-ports` only do anything in `nethernet` mode. `server-udp-ports` either restricts the local UDP allocation window (`49152-49200`) or publishes a NAT mapping in the form `[ip:]external[-external]:internal[-internal]`, for example `19132-19232:32000-32100` to bind locally on 32000–32100 while advertising 19132–19232 to clients. Ranges on both sides of the colon must be the same length. Multiple entries can be comma-separated, and the key may appear on more than one line to accumulate entries.

Because the NetherNet handshake speaks HTTP over TCP, Mojang's own documentation recommends putting a reverse proxy in front of `server-port` on an internet-facing server to enforce request and rate limits; only signalling traffic passes through it, while gameplay flows directly over the negotiated UDP connection.

## 5. Performance

| Key | Values | Default | Effect |
|---|---|---|---|
| `view-distance` | Integer, 5 or greater | `32` | Maximum chunks a player can see. The single biggest performance lever |
| `tick-distance` | Integer 4–12 | `4` | How many chunks around each player actually simulate |
| `max-threads` | Any positive integer | `8` | Thread cap. `0` or removing the key lets the server use as many as it can |
| `client-side-chunk-generation-enabled` | `true`, `false` | `true` | Lets clients generate visual chunks beyond interaction distance, offloading work from the server |
| `server-build-radius-ratio` | `Disabled`, or `0.0`–`1.0` | `Disabled` | `Disabled` lets the server decide dynamically how much of the player's view it generates. A fixed ratio overrides that regardless of client hardware. Only meaningful with client-side chunk generation on |
| `block-network-ids-are-hashes` | `true`, `false` | `true` | Sends hashed, stable block network IDs instead of sequential ones |

> [!TIP] Lower `view-distance` first, `tick-distance` second
> The shipped default of `view-distance=32` is generous — it is a rendering distance, and dropping it costs players very little while saving a great deal of bandwidth and CPU. `tick-distance` is capped at 12 and defaults to the minimum of 4 already, so there is far less to reclaim there. Its Java counterpart is `simulation-distance`, not `view-distance`.

## 6. Server-Authoritative Movement and Anti-Cheat

This group replaced the old movement keys entirely (see section 8). All of it is about how strictly the server second-guesses the client, and every one of these settings is a latency trade: stricter settings catch more cheating and send more position corrections to honest players on bad connections.

| Key | Values | Default | Effect |
|---|---|---|---|
| `server-authoritative-movement-strict` | `true`, `false` | `false` | Stricter about player position, less willing to accept the client's version. Clients get more corrections. Noticeable around moving blocks at high latency |
| `server-authoritative-dismount-strict` | `true`, `false` | `false` | Stricter about dismount position. Corrects the client's dismount at higher latency |
| `server-authoritative-entity-interactions-strict` | `true`, `false` | `false` | Stricter about entity interactions. Affects players interacting with each other at higher latency |
| `player-position-acceptance-threshold` | Any positive float | `0.5` | Tolerance for client/server position disagreement before a correction is sent. Raise it to stop correcting honest players who were knocked back or pushed by a piston; **values above 1.0 measurably increase the chance of missing a cheater** |
| `player-movement-action-direction-threshold` | Float in `[-1.00, 1.00]` | `0.85` | How far a player's attack direction may differ from their look direction, as the cosine of the angle between them. `1` demands they match exactly, `0` allows anything in front of the player, `-1` allows anything |
| `server-authoritative-block-breaking` | `true`, `false` | `false` | Server computes block mining in sync with the client and verifies the client should be able to break what it claims. **Cannot be combined with client-authoritative movement** and is disabled if that is set. Not present in the shipped file |
| `server-authoritative-block-breaking-pick-range-scalar` | Float above 1.0 | `1.5` | Extends block-breaking range. Squared, then multiplied by the default range. Only applies when the key above is `true` |

## 7. Logging, Diagnostics and Scripting

Bedrock's add-on scripting API brings a block of keys Java has no analogue for. Nearly all of them are commented out in the shipped file.

**Content logging** — content errors are add-on and pack errors, the Bedrock equivalent of a plugin stack trace:

| Key | Values | Default |
|---|---|---|
| `content-log-file-enabled` | `true`, `false` | `false` |
| `content-log-console-output-enabled` | `true`, `false` | `false` |
| `content-log-level` | `error`, `warning`, `info`, `verbose` | `info` |

**Script debugger** — `allow-outbound-script-debugging` and `allow-inbound-script-debugging` (both `false`) gate the debugger's `connect` and `listen` modes. `script-debugger-auto-attach` (`disabled`, `connect`, `listen`) attaches at world load, using `script-debugger-auto-attach-connect-address` (`host:port`) in connect mode or `force-inbound-debug-port` (default `19144`) in listen mode. `script-debugger-auto-attach-timeout` sets how long to wait at load, and `script-debugger-passcode` makes VS Code prompt for a passcode.

**Script watchdog** — enabled by default, and it is what stops a runaway add-on taking the server down. `script-watchdog-enable`, `-enable-exception-handling`, `-enable-shutdown` and `-hang-exception` all default to `true`; `script-watchdog-hang-threshold` is `10000` ms for a single-tick hang; `-spike-threshold` (`100`) and `-slow-threshold` (`10`) produce warnings and are disabled unless set. `script-watchdog-memory-warning` (`100` MB, max 2000, `0` disables) logs a content warning, and `script-watchdog-memory-limit` (`250` MB, max 2000, `0` disables) **saves and shuts the world down**.

**Diagnostics and telemetry** — `diagnostics-capture-auto-start` (`false`) starts a capture at world load, cycling through `diagnostics-capture-max-files` (`5`) files of `diagnostics-capture-max-file-size` (`2097152` bytes) each. `sentry-rate-limit-window` (`60` seconds) and `sentry-max-events-per-window` (`10`) throttle scripting errors reported to Sentry. `enable-profiler` turns on profiler support and `enable-editor-network-metrics` enables live network metrics in the debugger.

**Editor and client rendering** — `convert-world-to-editor-project` (`false`) upgrades a vanilla world to an Editor project, but only when the server is launched with the `Editor=true` command-line flag. `disable-client-vibrant-visuals` tells clients to fall back to the next best graphics setting instead of Vibrant Visuals.

## 8. Removed Keys That Guides Still Tell You To Set

Five movement keys are still quoted all over the internet, including in configuration generators. **None of them exists any more.** Setting them does nothing at all.

| Dead key | Last seen in | Replaced by |
|---|---|---|
| `server-authoritative-movement` | BDS 1.21.62.01 — gone from 1.21.70 onward | `server-authoritative-movement-strict` |
| `player-movement-score-threshold` | Present in BDS 1.20.30.02, gone by 1.20.81.01 | Nothing directly |
| `player-movement-distance-threshold` | Present in BDS 1.20.30.02, gone by 1.20.81.01 | `player-position-acceptance-threshold` covers the same job |
| `player-movement-duration-threshold-in-ms` | Present in BDS 1.20.30.02, gone by 1.20.81.01 | Nothing directly |
| `correct-player-movement` | Present in BDS 1.20.30.02, gone by 1.20.81.01 | The `server-authoritative-*-strict` family |

`server-authoritative-movement` also had three named values — `client-auth`, `server-auth` and `server-auth-with-rewind` — and those are gone with it. The current model is always server-authoritative, and the `-strict` keys only choose how tightly it is enforced.

## 9. Same Job, Different Name

These are the keys most likely to waste an hour. The behaviour exists on both editions; only the spelling changed.

| Java Edition | Bedrock Edition | Notes |
|---|---|---|
| `white-list` | `allow-list` | Renamed in Bedrock 1.18.10. The file was renamed too: `whitelist.json` became `allowlist.json` |
| `network-compression-threshold` | `compression-threshold` | Same job. Bedrock adds `compression-algorithm`, which Java has no equivalent for |
| `simulation-distance` | `tick-distance` | Java's default is 10; Bedrock's is 4 and it is capped at 12 |
| `require-resource-pack` | `texturepack-required` | Forces clients to accept the world's packs |
| `motd` | `server-name` | Not a true equivalent. `server-name` is the server's *name*; BDS has no way to set an MOTD line at all, even though Bedrock clients display one |
| `ops.json` | `permissions.json` | Different file, different format, different concept — see [Bedrock Allowlist and Permissions](/knowledge-base/minecraft/bedrock-allowlist-and-permissions/) |

## 10. Java Keys With No Bedrock Equivalent

If a guide tells you to set one of these on a Bedrock server, the guide is about Java. The gaps that matter most operationally:

| Missing on Bedrock | Consequence |
|---|---|
| `enable-rcon`, `rcon.port`, `rcon.password` | **BDS has no RCON.** There is no supported way to send console commands remotely |
| `enable-query`, `query.port` | No Query protocol, so Query-based status tooling cannot see the server |
| `motd` | No message of the day, as above |
| `op-permission-level`, `function-permission-level` | Bedrock has no numeric permission level in its config. It uses three named roles |
| `spawn-protection` | No spawn-protection radius |
| `allow-flight` | No server-side flight check of this kind |
| `hardcore` | No hardcore flag |
| `level-type`, `generate-structures`, `generator-settings` | World generation is not configurable from `server.properties` |
| `max-world-size` | No world border set from the properties file |
| `resource-pack`, `resource-pack-sha1`, `resource-pack-prompt` | Bedrock serves packs from the world, not from a URL. Use `texturepack-required` plus the world's pack folders. The Java URL-and-SHA-1 workflow these keys belong to is in [How to Install Datapacks and Resource Packs](/knowledge-base/minecraft/datapacks-and-resource-packs/) |
| `pause-when-empty-seconds` | Bedrock does not pause an empty world |
| `enforce-secure-profile`, `enable-status`, `hide-online-players`, `prevent-proxy-connections` | No equivalents |
| `max-tick-time` | No tick watchdog. The script watchdog covers add-ons only |

There is also no Bedrock equivalent of Java's `-Xmx` and `-Xms`. BDS has no JVM and no way to set an initial or maximum memory value; it takes what it needs.

## 11. The Eleven Keys Spelled the Same

These are the only key names that appear in both editions' `server.properties`:

`difficulty` · `force-gamemode` · `gamemode` · `level-name` · `level-seed` · `max-players` · `online-mode` · `player-idle-timeout` · `server-ip` · `server-port` · `view-distance`

Even here, three behave differently. `server-ip` is ignored on Bedrock unless `transport=nethernet`. `view-distance` defaults to 32 on Bedrock against Java's 10, and on Bedrock it is purely a view distance because ticking is governed by `tick-distance`. And `server-port` is a UDP port on Bedrock, a TCP port on Java.

## 12. A Sensible Starting Point

For a small private survival server on a managed host, this is the set worth changing from the defaults:

```properties title="server.properties"
server-name=My Server
gamemode=survival
difficulty=normal
allow-cheats=true
max-players=10
online-mode=true
allow-list=true
view-distance=16
tick-distance=4
player-idle-timeout=0
enable-lan-visibility=false
default-player-permission-level=member
```

`allow-cheats=true` is there because without it no one can run a command, operator or not. `enable-lan-visibility=false` avoids the default-port grab described in section 4. `view-distance=16` is still generous and roughly halves the chunk streaming of the stock 32.

> [!IMPORTANT] Leave the port keys to your control panel
> On a [managed Minecraft server](/games/minecraft/), `server-port` and `server-portv6` are set from the allocation in the panel's **Network** tab and are re-applied on boot. Editing them by hand either gets overwritten or binds a port that is not routed to you. If you need a different or extra port, take it from the Network tab.

## Sources

- The `server.properties` and `bedrock_server_how_to.html` files shipped inside the official [Bedrock Dedicated Server](https://www.minecraft.net/en-us/download/server/bedrock) archive, version 1.26.44.3
- [minecraft.wiki — server.properties](https://minecraft.wiki/w/Server.properties)
- [minecraft.wiki — Bedrock Dedicated Server](https://minecraft.wiki/w/Bedrock_Dedicated_Server)

## What to Read Next

- [Setting up your Bedrock Minecraft server](/knowledge-base/minecraft/bedrock/) for first boot, connecting, add-ons and backups
- [Bedrock Allowlist and Permissions](/knowledge-base/minecraft/bedrock-allowlist-and-permissions/) for `allowlist.json`, `permissions.json`, XUIDs and operator roles
- [Setting up CrossPlay for Minecraft](/knowledge-base/minecraft/geyser-crossplay/) if you would rather run one Java server that Bedrock players can join
- [Minecraft server.properties: The Complete Reference](/knowledge-base/minecraft/server-properties-reference/) for the Java Edition file
- [Minecraft Server Commands](/knowledge-base/minecraft/admin-commands/) for the command set

---

Made with 💜 by GameServerKings
