
Manual-first Windows server guide
Minecraft Bedrock Server Setup, UDP, Worlds and Add-Ons
This Bedrock Dedicated Server guide follows Mojang and Microsoft’s current Windows/Ubuntu process from the vendor ZIP through a clean world restore and real outside join. It keeps Bedrock’s UDP network path, LevelDB saves, Xbox identity, add-on model and limited native administration separate from Java Edition advice.
Bedrock Dedicated Server is a native executable rather than a Java JAR: it listens on UDP 19132/19133, stores one active LevelDB world under worlds/<level-name>, uses Xbox Live Gamertags in allowlist.json, needs a Windows loopback exemption when client and server share a PC, and has no currently documented native RCON or persistent ban command.
Official player port
UDP 19132 for IPv4
Use the configured server-port at the process, firewall, router and client; opening TCP does not create the Bedrock gameplay path.
IPv6 listener
UDP 19133 by default
IPv6 requires an intentional inbound firewall path, not an IPv4 NAT-forwarding rule.
Active world
worlds/<level-name>/
Several worlds can be installed, but one process activates only the folder named by server.properties and the case must match exactly.
World format
LevelDB
A Java Anvil world is not a direct import; cross-edition conversion is a separate lossy workflow.
Private membership
allowlist.json with Xbox Live Gamertags
Enable allow-list and use allowlist add/remove/reload rather than treating a display count as a player identity.
Same-PC Windows join
Requires Microsoft’s loopback exemption
The packaged Windows client cannot reach BDS on the same PC until the documented retail or Preview package SID is exempted.
Clean shutdown
stop
Use the server console command and wait for process exit before a maintenance snapshot.
Native remote administration
No documented RCON or persistent ban command
Use console/stdin, allow-list, kick and op/deop; hide unsupported controls rather than returning a generic network failure.
Protect the server first: Run stop and wait for bedrock_server to exit before copying the complete active world, properties, allowlist, permissions and pack state. Never test an update, conversion or add-on removal against the only copy.
Size the host before downloading
PC and capacity guidance
Minecraft.net formally lists 4 GB RAM, i3-3210/A8-7600-equivalent CPU and 180 MB–1 GB available space; its same-page FAQ also says 1 GB for small servers. This guide uses the formal 4 GB floor and labels all larger host/storage figures as conservative editorial starting points, not Mojang capacity guarantees.
| Profile | Players | Memory | Processor | Storage |
|---|---|---|---|---|
| Small private Bedrock world Conservative starting point | A few regular players | 8 GB total host RAM as a conservative start | Modern four-thread-or-better 64-bit CPU | SSD with at least 10 GB free plus independent backup space |
| Host also runs the Bedrock client Conservative starting point | Small group on one gaming PC | 16 GB total system RAM as a planning start | Current desktop CPU with measurable server/client headroom | Fast SSD with room for live state, staging and two full snapshots |
| Add-on-heavy or higher-concurrency world Conservative starting point | Growing world with several packs | 16 GB+ total host RAM, adjusted from measured peak | Fast modern CPU; validate tick cost under representative play | SSD with monitored world growth and off-tree retention |
Official runtime
Install BDS and create a controlled first world
Extract the vendor ZIP into an empty versioned root, run from that root, then stop before applying settings or imports.
- 1
Use the supported package
Download Windows or Ubuntu BDS from Minecraft.net. Use Windows 10 build 10.0.15063+/Server 2016+ or Ubuntu 22.04 LTS+; do not turn success on another Linux distribution into a support claim.
- 2
Run from the BDS root
On Windows run bedrock_server.exe. On Ubuntu run LD_LIBRARY_PATH=. ./bedrock_server so packaged libraries resolve from the extracted directory.
LD_LIBRARY_PATH=. ./bedrock_server - 3
Stop before configuration
Let the first run create worlds and pack directories, enter stop, wait for exit, then edit root server.properties and enable an allow list for a private world.
UDP reachability
Prove localhost, LAN and Internet paths separately
A working local world does not prove the router path, and a public-port result does not identify a version/account/device problem.
- 1
Test the intended local route
Join from another LAN device using the server’s LAN address. When the Windows client shares the server PC, apply Microsoft’s documented retail or Preview loopback exemption and use 127.0.0.1.
- 2
Create a narrow UDP path
Allow the selected UDP port in Windows Firewall, reserve the PC’s LAN address and forward the same UDP port for public IPv4 joins.
Do not open TCP, a broad range or script-debug ports for ordinary Bedrock players.
- 3
Test a real outside client
Use mobile data or another independent network, then repeat on every device family the public page names. Record account/subscription/client version with the result.
World ownership
Import a Bedrock world without flattening its pack state
A valid Bedrock import is the folder whose root contains level.dat and db/, plus every pack and assignment file it depends on.
- 1
Quarantine the source
Stop the source server or use in-game Export World, retain the original archive, and unwrap only enough folders to find the actual world root.
- 2
Set the exact active name
Copy the complete folder under worlds/, set level-name to its exact case-sensitive folder name, and bring required shared packs/config separately without replacing vendor binaries.
- 3
Validate identity, content and restart
Confirm an existing player/inventory, spawn, representative containers, pack stack, save/stop/restart, LAN join and outside join before acceptance.
A Java world needs conversion; Chunker is third-party and does not carry cross-edition entities or player inventories.
Keep every layer consistent
Ports, firewall, and router setup
Open only the services your Minecraft Bedrock Edition server actually uses. The game process, Windows Firewall rule, router forward, and player join address must all agree on the same port and protocol.
| Port | Protocol | Purpose | Exposure | Notes |
|---|---|---|---|---|
| 19132 (configurable) | UDP | Bedrock IPv4 gameplay, status and joining | Internet playersRequired for this use | Forward one selected UDP port to the server PC’s reserved LAN address; LAN-only servers need no public router forward.[mc-bed-properties][mc-bed-start] |
| 19133 (configurable) | UDP | Bedrock IPv6 gameplay and status | Internet playersOptional | Permit only when IPv6 joining is intentionally offered. Residential IPv6 firewall controls vary by router.[mc-bed-properties][mc-bed-start] |
| 19132 and 19133 discovery binds | UDP | LAN discovery while enable-lan-visibility=true | LAN onlyOptional | BDS can bind the default ports for LAN visibility even when custom server ports are configured; review this when running multiple instances.[mc-bed-properties] |
| 19144 when deliberately enabled | TCP | Script debugger, not player traffic | Optional administrationOptional | Leave inbound script debugging disabled on a production server and never publish this as a join port.[mc-bed-properties][mc-bed-scripting] |
Never expose an administration or RCON port merely so players can join. Keep remote administration private whenever possible, use a strong unique credential, and confirm the game's own security model before forwarding it.
Know what must survive a reinstall
Files, worlds, and configuration
| File or folder | Purpose | Backup | Notes |
|---|---|---|---|
| server.properties | Main BDS settings, ports, active world, player cap and pack policy | Critical | Preserve unknown/current keys and comments when applying friendly UI changes.[mc-bed-properties][mc-bed-start] |
| worlds/<level-name>/ | Complete active LevelDB world and its player/pack-linked state | Critical | Copy the whole directory after clean stop; do not select only db files.[mc-bed-start][mc-bed-world-template] |
| worlds/<level-name>/db/ | LevelDB database payload | Critical | Its presence, with level.dat, identifies a Bedrock world root during import.[mc-bed-world-template][mc-bed-differences] |
| worlds/<level-name>/level.dat and level.dat_old | Current and previous world metadata | Critical | Preserve both with every snapshot and import.[mc-bed-world-template] |
| allowlist.json | Private-server Xbox Live Gamertags, optional XUID and limit override | Critical | Reload after external edits; commands are safer than hand editing.[mc-bed-start][mc-bed-commands] |
| permissions.json | Player/operator permission state in the BDS package convention | Critical | The official command reference exposes permission list/reload but does not publish a complete current root schema; verify the clean package and manage through commands.[mc-bed-commands] |
| behavior_packs/ and resource_packs/ | Packs shared across BDS worlds | Recommended | World-specific pack payload and assignment JSON must remain with the world.[mc-bed-start][mc-bed-packs] |
| config/default/permissions.json | Default Script API module capabilities | Recommended | This is not the player/operator permissions file; keep script capabilities minimal.[mc-bed-scripting] |
| Setting or file | Location | What it controls | Restart? |
|---|---|---|---|
server-nameFamily Bedrock World | server.properties | Displays a recognizable server name without exposing an address or secret.[mc-bed-properties] | Yes |
level-namefamily-world | server.properties and worlds/<level-name>/ | Selects the one world this BDS process loads.[mc-bed-start][mc-bed-properties] | Yes |
allow-listtrue for a private server | server.properties plus allowlist.json | Restricts joining to approved Xbox Live Gamertags.[mc-bed-start][mc-bed-properties][mc-bed-commands] | No |
online-modetrue | server.properties | Keeps Xbox Live authentication enabled for Internet play.[mc-bed-properties] | Yes |
server-port / server-portv619132 / 19133 when one BDS instance is present | server.properties | Selects the IPv4 and IPv6 UDP listeners.[mc-bed-properties] | Yes |
enable-lan-visibilityfalse for secondary instances that must avoid discovery-port conflicts | server.properties | Controls LAN discovery and default-port binding behavior.[mc-bed-properties] | Yes |
view-distance / tick-distanceStart at current defaults 32 / 4, then measure before raising | server.properties | Balances visible range and simulated world activity against host workload.[mc-bed-properties] | Yes |
texturepack-requiredfalse until the pack/download path is verified on every client family | server.properties and active world pack references | Requires joining clients to accept the world’s resource pack.[mc-bed-properties][mc-bed-packs] | Yes |
Avoid incompatible clients and unsafe shortcuts
Players, mods, and administration
Cross-play and editions
Vanilla BDS serves Bedrock Edition clients. The current official download page advertises Windows, Xbox, PlayStation, mobile, Nintendo Switch and Switch 2, but Java clients are not native participants.
- Minecraft’s current join guide teaches Play > Servers > Add Server, address and port; verify that exact UI on each named production console before publishing a device-specific promise.
- Console online multiplayer commonly requires the platform subscription plus a Microsoft account and permitted privacy/multiplayer settings.
- Retail and Preview clients use separate compatibility lanes; even patch releases can change the Bedrock protocol.
- Java/Bedrock world and command formats differ, so conversion is not equivalent to native cross-play.
Mods and extensions
BDS uses Bedrock resource packs, behavior packs and optional Script API modules—not Paper plugins or Fabric/NeoForge mods.
- World-specific payload and world_behavior_packs.json/world_resource_packs.json stay with the world; root pack folders can make content available across worlds.
- Manifest UUIDs, versions, dependencies and pack order must agree; enable content logging for diagnosis.
- config/default/permissions.json controls Script API module capabilities, not player operator ranks or the allow list.
- The optional 1.26.40 pack optimizer creates archived output and exits; optimized packs require client 1.26.40+, so run it only on copies.
Administration
Use local console/stdin plus the official allowlist, op/deop, kick, permission, save-help and stop commands; do not claim native RCON or permanent ban controls that current docs do not list.
- allowlist.json stores Gamertags, optional XUID and ignoresPlayerLimit; reload after an external edit.
- Kick removes the current session. For a private community, remove access from the allow list rather than labeling kick a persistent ban.
- The root player permission file and config/default/permissions.json serve different purposes; manage player roles through commands.
- When only a connected-player count is available, show the count or ‘name unavailable’ instead of inventing Player 1.
Preserve a return path before maintenance
Updates, backups, and rollback
Update without gambling the world
BDS is delivered as a ZIP, not a documented in-place updater. Stop, snapshot, stage a fresh versioned package, migrate a copy, test, then switch.
- 1
Create a clean recovery boundary
Warn players, enter stop, wait for exit, then copy the complete active world, properties, allowlist, permissions, packs and config outside the install root.
- 2
Stage the official current ZIP
Extract the new vendor package into a different empty versioned directory, run/stop once, compare current properties, and carry intended values without deleting new keys.
- 3
Validate and retain the old state
Start with a copied world, verify version, identity, pack stack and joins, then switch. Rollback restores the complete matched pre-update state—not only an older executable.
Back up and prove the restore path
The dependable BDS snapshot is a complete, stopped server-state set stored outside the live installation and proven by restoration to another path.
- 1
Stop cleanly
Use stop and wait for normal process exit. Microsoft’s current and older save pages conflict, so verify help save against the exact build before automating live snapshots.
- 2
Copy state as one unit
Preserve the entire active world, properties, access/permission state, used packs and script config with a version/hash manifest.
- 3
Prove the recovery point
Restore into a separate clean BDS path and verify the expected world, existing identity, pack stack and save-stop-restart before calling it recoverable.
Diagnose before reinstalling
Common Minecraft Bedrock Edition server problems
Bedrock works on LAN but outside joins time out
What players see
A LAN client reaches the server, but a client on another network cannot connect.
Likely cause
The UDP 19132 path is missing or inconsistent at Windows Firewall, the router, a second NAT layer or the ISP’s CGNAT boundary.
- 1.Record the configured UDP port and reserve the server PC’s LAN address.
- 2.Verify one narrow inbound UDP firewall rule and a matching router forward.
- 3.Test from a real outside network; do not recreate or edit the world for a reachability failure.
Bedrock reports Outdated Client or Outdated Server
What players see
Join is rejected before the world loads with a named version error.
Likely cause
Client and BDS use incompatible protocol builds or retail and Preview channels were mixed.
- 1.Record exact client/server versions and retail/Preview channel.
- 2.Back up and update the side named by the message through its official channel.
- 3.Do not assume patch releases share a Bedrock protocol.
BDS creates a new world instead of loading the import
What players see
The server starts successfully, but players arrive in a new seed.
Likely cause
level-name does not exactly match the folder, the archive has a wrapper folder, or the service uses another working directory.
- 1.Stop immediately and preserve both the source and generated world.
- 2.Find the folder whose root contains level.dat and db/ and place it directly under worlds/.
- 3.Set the exact case-sensitive level-name and restart from the intended BDS root.
A Bedrock ban or RCON control is missing
What players see
An administrator expects Java-style ban files or RCON and the control cannot execute.
Likely cause
Those are Java assumptions; the current official BDS command list documents allowlist, kick, op/deop and local server controls instead.
- 1.Keep management/debug ports private and remove unsupported public forwards.
- 2.Use kick plus allow-list removal for private access control and manage operators through commands.
- 3.Do not fabricate a successful ban, player name or RCON response.
Every focused Minecraft Bedrock Edition troubleshooting guide
Evidence stays visible
Sources and verification
Technical behavior changes with server builds. These are the references reviewed for this guide. Official documentation wins if a later patch changes a path, port, command, or compatibility rule.
[mc-bed-download] Mojang Studios / Minecraft
Bedrock Dedicated Server download and requirements ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-start] Microsoft Learn
Getting Started with Bedrock Dedicated Server ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-properties] Microsoft Learn
Bedrock Dedicated Server properties ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-commands] Microsoft Learn
Current Bedrock command reference ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-save-current] Microsoft Learn
Current Bedrock save command page ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-save-legacy] Microsoft Learn
Older conflicting Bedrock save command page ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-stop] Microsoft Learn
Bedrock stop command ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-scripting] Microsoft Learn
Scripting Bedrock Dedicated Server ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-world-template] Microsoft Learn
Exported Bedrock world structure ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-packs] Microsoft Learn
Comprehensive Bedrock pack contents ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-optimization] Microsoft Learn
BDS pack optimization ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-chunker] Microsoft Learn
Chunker conversion scope and limitations ↗Reviewed 2026-08-30 · Official documentation
[mc-bed-differences] Microsoft Learn
Bedrock and Java world/content differences ↗Reviewed 2026-08-30 · Official documentation
[mc-server-play] Mojang Studios / Minecraft
How to play on a Minecraft server ↗Reviewed 2026-08-30 · Official documentation
[mc-editions] Mojang Studios / Minecraft
Java and Bedrock edition differences ↗Reviewed 2026-08-30 · Official documentation
Keep learning
Related guides
Minecraft Java or Bedrock?
Compare BDS, UDP joining, LevelDB worlds and Bedrock add-ons with the Java server path.
Open guide →
Carry Bedrock UDP 19132 beyond the LAN
Match UDP 19132 across BDS, Windows Firewall, the router and a separate-network client.
Open guide →
Find the upstream UDP boundary
Prove whether an upstream translation layer blocks the public Bedrock UDP path.
Open guide →
Host a server at home
Plan the Windows, LAN, router and external-test path before exposing UDP 19132.
Open guide →
Minecraft Java server guide
Use the Java runtime and server JAR path for TCP 25565, plugins, mods and modern Java worlds.
Open guide →
Fix Bedrock outside joining
Trace a known-good LAN world through UDP firewall, NAT and CGNAT boundaries.
Open guide →
Repair a Bedrock world import
Find the true LevelDB root and correct level-name without risking the source archive.
Open guide →