How to Set Up a Minecraft Bedrock Dedicated Server
Want to play Minecraft with friends across PC, Xbox, PlayStation, Nintendo Switch, and mobile? A Bedrock Dedicated Server (BDS) makes true crossplay possible. This guide walks you through the complete setup process.
What is Bedrock Edition?
Minecraft exists in two major editions, and understanding the difference is essential before choosing your server type.
Bedrock vs Java Edition
| Feature | Bedrock Edition | Java Edition |
|---|---|---|
| Platforms | PC, Xbox, PlayStation, Switch, iOS, Android | PC only (Windows, Mac, Linux) |
| Crossplay | Yes, all platforms | No, Java only |
| Modding | Addons and behavior packs | Forge, Fabric, NeoForge mods |
| Redstone | Simplified mechanics | Full quasi-connectivity |
| Performance | Written in C++, generally better | Written in Java, more resource-heavy |
| Server Software | Bedrock Dedicated Server (BDS) | Vanilla, Paper, Spigot, etc. |
| Default Port | 19132 UDP | 25565 TCP |
| Plugin Support | Limited (no native plugin API) | Extensive (Bukkit/Spigot API) |
| Marketplace | Built-in marketplace for content | Community-driven, free mods |
| Combat | Simplified combat system | 1.9+ combat mechanics |
Why Host a Bedrock Server?
- >Crossplay - The single biggest advantage. Friends on any device can join the same world
- >Better performance - The C++ codebase runs efficiently on modest hardware
- >Wider player base - Bedrock has the largest combined player count across all platforms
- >Console support - Xbox, PlayStation, and Switch players can join
- >Mobile access - Players on iOS and Android can connect on the go
System Requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| CPU | 2 cores | 4+ cores |
| RAM | 1 GB | 2-4 GB |
| Storage | 1 GB | 5 GB+ SSD |
| Bandwidth | 5 Mbps upload | 20+ Mbps upload |
| OS | Windows 10 (64-bit) / Ubuntu 22.04+ | Windows Server / Ubuntu 24.04 |
| Network | Port forwarding ability | Static IP or dynamic DNS |
---
Step 1: Download Bedrock Dedicated Server
Get the Server Software
Extract the Files
Windows:
C:\BedrockServer).zip file into this folderbedrock_server.exe, server.properties, and othersLinux:
mkdir ~/bedrock-server
cd ~/bedrock-server
unzip bedrock-server-*.zip
What you get after extraction:
bedrock-server/
├── bedrock_server.exe # Server executable (Windows)
├── bedrock_server # Server executable (Linux)
├── server.properties # Main configuration file
├── allowlist.json # Allowlisted players
├── permissions.json # Player permission levels
├── resource_packs/ # Resource packs folder
├── behavior_packs/ # Behavior packs folder
├── worlds/ # World data folder
├── valid_known_packs.json # Pack registry
└── release-notes.txt # Version release notes
---
Step 2: Server Configuration
server.properties
The server.properties file controls all core server settings. Open it in any text editor and adjust the values below.
# Server Identity
server-name=My Bedrock Server
gamemode=survival
difficulty=normal
# Player Settings
max-players=10
online-mode=true
allow-cheats=false
default-player-permission-level=member
# Network Settings
server-port=19132
server-portv6=19133
max-threads=8
compression-threshold=1
compression-algorithm=zlib
# World Settings
level-name=Bedrock level
level-seed=
level-type=DEFAULT
allow-nether=true
# Performance Settings
view-distance=32
tick-distance=4
player-idle-timeout=0
content-log-file-enabled=false
server-authoritative-movement=server-auth
# Appearance
texturepack-required=false
force-gamemode=false
Key Settings Explained
| Setting | Description | Default | Recommended |
|---|---|---|---|
server-name | Name shown in server list | Dedicated Server | Your server name |
gamemode | Default mode: survival, creative, adventure | survival | Your preference |
difficulty | peaceful, easy, normal, hard | easy | normal |
max-players | Maximum simultaneous players | 10 | Based on hardware |
online-mode | Requires Xbox Live authentication | true | true (for security) |
server-port | IPv4 UDP port | 19132 | 19132 |
server-portv6 | IPv6 UDP port | 19133 | 19133 |
level-name | World folder name | Bedrock level | Your world name |
level-seed | World generation seed | (random) | Any seed string |
allow-cheats | Enable cheat commands | false | false (for survival) |
view-distance | Max view distance in chunks | 32 | 16-32 |
tick-distance | Simulation distance (4-12) | 4 | 4-8 |
player-idle-timeout | Minutes before kicking idle players (0 = disabled) | 30 | 0 or 15 |
server-authoritative-movement | Anti-cheat for movement | server-auth | server-auth |
allowlist.json
When allow-list=true is set in server.properties, only players listed here can join. This is useful for private servers.
[
{
"ignoresPlayerLimit": false,
"name": "YourGamertag",
"xuid": "1234567890123456"
},
{
"ignoresPlayerLimit": false,
"name": "FriendGamertag",
"xuid": "9876543210987654"
}
]
Finding a player's XUID:
- >Use an online lookup tool such as cxkes.me/xbox/xuid
- >Or check the server console output when a player first attempts to connect
permissions.json
This file assigns operator permission levels to specific players.
[
{
"permission": "operator",
"xuid": "1234567890123456"
},
{
"permission": "member",
"xuid": "9876543210987654"
}
]
Permission levels:
| Level | Description |
|---|---|
visitor | Can interact but not build or mine |
member | Standard player permissions (default) |
operator | Full access to commands and server management |
Step 3: Starting the Server
Windows
Option A: Direct launch
Double-click bedrock_server.exe in your server folder. A console window will open showing the server startup output.
Option B: Batch file (recommended)
Create a start.bat file in your server folder:
@echo off
title Bedrock Dedicated Server
bedrock_server.exe
pause
This keeps the console window open if the server stops unexpectedly.
Windows Firewall:
When you run the server for the first time, Windows will prompt you to allow network access. Click Allow access on both private and public networks.
If the prompt was dismissed, add the rule manually:
netsh advfirewall firewall add rule name="Bedrock Server" dir=in action=allow protocol=udp localport=19132
netsh advfirewall firewall add rule name="Bedrock Server IPv6" dir=in action=allow protocol=udp localport=19133
Linux
Make the server executable and start:
chmod +x bedrock_server
LD_LIBRARY_PATH=. ./bedrock_server
Important: The LD_LIBRARY_PATH=. prefix is required because BDS depends on shared libraries in the server directory.
Create a start script:
Create a start.sh file:
#!/bin/bash
cd "$(dirname "$0")"
LD_LIBRARY_PATH=. ./bedrock_server
Make it executable:
chmod +x start.sh
./start.sh
Run as a background service with screen:
# Install screen if needed
sudo apt install screen
# Start server in a detached screen session
screen -S bedrock -dm bash -c 'cd ~/bedrock-server && LD_LIBRARY_PATH=. ./bedrock_server'
# Reattach to the session
screen -r bedrock
# Detach again: press Ctrl+A then D
Run with systemd (recommended for production):
Create a service file at /etc/systemd/system/bedrock-server.service:
[Unit]
Description=Minecraft Bedrock Dedicated Server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/bedrock-server
ExecStart=/bin/bash -c 'LD_LIBRARY_PATH=. ./bedrock_server'
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable bedrock-server
sudo systemctl start bedrock-server
# Check status
sudo systemctl status bedrock-server
# View logs
sudo journalctl -u bedrock-server -f
First Run
On the first start, the server will:
level-seed settingServer started in the console when readyYou should see output similar to:
[INFO] Starting Server
[INFO] Version: 1.21.x
[INFO] Level Name: Bedrock level
[INFO] Game mode: 0 Survival
[INFO] Difficulty: 2 NORMAL
[INFO] IPv4 supported, port: 19132
[INFO] IPv6 supported, port: 19133
[INFO] Server started.
---
Step 4: Port Forwarding
For players outside your local network to connect, you need to forward the Bedrock server port through your router.
Important: Bedrock Uses UDP
Unlike Java Edition which uses TCP port 25565, Bedrock uses UDP port 19132 for IPv4 and UDP port 19133 for IPv6. Make sure you forward UDP, not TCP.
Router Configuration
Windows:
ipconfig
192.168.x.x)Linux:
ip addr show
192.168.1.1 or 192.168.0.1)| Field | Value |
|---|---|
| Service Name | Bedrock Server |
| External Port | 19132 |
| Internal Port | 19132 |
| Protocol | UDP |
| Internal IP | Your computer's local IP |
| Field | Value |
|---|---|
| Service Name | Bedrock Server IPv6 |
| External Port | 19133 |
| Internal Port | 19133 |
| Protocol | UDP |
| Internal IP | Your computer's local IP |
Finding Your Public IP
Visit whatismyip.com to find your public IP address. Share this with friends to connect.
Players will use: your-public-ip with port 19132
---
Step 5: Connecting from Different Platforms
PC (Windows 10/11)
- >Server Name: Anything you like
- >Server Address: Your public IP (or
localhostif on the same machine) - >Port: 19132
Mobile (iOS / Android)
Xbox
Connecting Xbox to a custom server requires a workaround because Microsoft does not natively allow adding custom server addresses on console.
Method: BedrockConnect (DNS workaround)
104.238.130.180)8.8.8.8PlayStation
PlayStation uses the same DNS workaround as Xbox:
104.238.130.180)8.8.8.8Nintendo Switch
The Switch also uses the DNS workaround:
104.238.130.1808.8.8.8Note: BedrockConnect is a community project. DNS addresses may change over time. Check the BedrockConnect GitHub page for the latest information.
---
Admin Commands
As an operator, you have access to powerful server commands. Use these in the server console or in-game with the / prefix.
Essential Commands
/op "PlayerName" # Give operator status
/deop "PlayerName" # Remove operator status
/gamemode survival "Player" # Change player's gamemode
/difficulty hard # Change server difficulty
/time set day # Set world time
/weather clear # Clear weather
/tp "Player1" "Player2" # Teleport player1 to player2
/give "Player" diamond 64 # Give items to a player
/kick "Player" "reason" # Kick a player
/ban "Player" # Ban a player
/whitelist add "Player" # Add to allowlist
/stop # Safely stop the server
/save hold # Prepare for backup
/save query # Check backup readiness
/save resume # Resume after backup
Server Console Commands
These commands are typed directly into the server console (not in-game):
stop # Stop the server gracefully
save hold # Pause world saving for backups
save query # Query save status
save resume # Resume world saving
allowlist add "Player" # Add player to allowlist
allowlist remove "Player" # Remove from allowlist
allowlist reload # Reload the allowlist file
permission reload # Reload permissions file
---
Backup Strategies
What to Back Up
bedrock-server/
├── worlds/ # Critical - all world data
├── server.properties # Server configuration
├── allowlist.json # Player allowlist
├── permissions.json # Player permissions
├── resource_packs/ # Custom resource packs
├── behavior_packs/ # Custom behavior packs
└── valid_known_packs.json
Safe Backup Procedure
BDS requires you to pause world saving before copying files to prevent corruption:
save holdsave query (repeat until it says files are ready)worlds/ folder to your backup locationsave resumeAutomated Backup Script (Linux)
#!/bin/bash
SERVER_DIR="/home/minecraft/bedrock-server"
BACKUP_DIR="/home/minecraft/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
SCREEN_NAME="bedrock"
# Tell server to prepare for backup
screen -S $SCREEN_NAME -p 0 -X stuff "save hold\n"
sleep 5
screen -S $SCREEN_NAME -p 0 -X stuff "save query\n"
sleep 3
# Create backup
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" \
"$SERVER_DIR/worlds" \
"$SERVER_DIR/server.properties" \
"$SERVER_DIR/allowlist.json" \
"$SERVER_DIR/permissions.json"
# Resume saving
screen -S $SCREEN_NAME -p 0 -X stuff "save resume\n"
# Keep only last 7 days of backups
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
echo "Backup completed: backup_$DATE.tar.gz"
Make it executable and add to cron:
chmod +x backup.sh
# Run daily at 4 AM
crontab -e
# Add: 0 4 * * * /home/minecraft/backup.sh
---
Performance Optimization
Tuning server.properties
# Lower view distance to reduce chunk loading (default: 32)
view-distance=16
# Keep tick distance low (4 = minimum, 12 = maximum)
tick-distance=4
# Set max threads based on your CPU cores
max-threads=8
# Enable server-authoritative movement for anti-cheat
server-authoritative-movement=server-auth
server-authoritative-block-breaking-pick-up-range=Disabled
System-Level Optimizations
Linux - Increase file descriptors:
# Add to /etc/security/limits.conf
minecraft soft nofile 65535
minecraft hard nofile 65535
Linux - Set CPU priority:
nice -n -5 ./bedrock_server
Performance Tips
- >Reduce view distance - Lowering from 32 to 16 significantly reduces CPU and memory usage
- >Keep tick distance at 4 - Only simulates nearby chunks, reducing entity processing
- >Limit max players - Each player increases resource usage proportionally
- >Use an SSD - World data reads and writes benefit enormously from SSD speeds
- >Disable content logging - Set
content-log-file-enabled=falseto reduce disk I/O - >Avoid large redstone machines - Complex redstone creates significant tick overhead
- >Prune unused chunks - Tools like Amulet Editor can trim excess world data
Bedrock Addons and Behavior Packs
BDS supports resource packs and behavior packs to customize your server experience.
Installing Resource Packs
.mcpack or extracted pack folder into resource_packs/worlds//world_resource_packs.json :[
{
"pack_id": "pack-uuid-here",
"version": [1, 0, 0]
}
]
texturepack-required=true in server.propertiesInstalling Behavior Packs
behavior_packs/worlds//world_behavior_packs.json :[
{
"pack_id": "pack-uuid-here",
"version": [1, 0, 0]
}
]
Finding Packs
- >MCPEDL - Large collection of Bedrock addons
- >Minecraft Marketplace Partner Hub - Official creator tools
- >Bedrock Addons subreddit - Community creations
Pack UUID and Version
You can find the pack's UUID and version in its manifest.json file:
{
"header": {
"name": "My Resource Pack",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"version": [1, 0, 0]
}
}
Use the uuid value for pack_id and the version array in your world pack JSON files.
---
Updating the Server
When a new Minecraft version releases:
worlds/ folder- >
server.properties - >
allowlist.json - >
permissions.json - >
worlds/folder - >Any custom packs
Warning: Players must also update their Minecraft client to the matching version. Version mismatches will prevent connections.
---
Troubleshooting
"Unable to Connect to World"
localhost and port 19132online-mode=true, players must be signed into Xbox LiveConsole Players Cannot Connect
- >Console platforms (Xbox, PlayStation, Switch) cannot directly add custom servers
- >Use the BedrockConnect DNS workaround described in Step 5
- >Ensure the DNS server address is correct and reachable
- >Try restarting Minecraft after changing DNS settings
"Outdated Client" or "Outdated Server"
- >The client and server versions must match exactly
- >Update BDS to the latest version
- >Have players update their Minecraft app
- >BDS does not support version negotiation like some Java server solutions
High Latency / Rubberbanding
view-distance to 10-16tick-distance to 4server-authoritative-movement=server-auth for fair playmax-players if hardware is strugglingServer Crashes
LD_LIBRARY_PATH is set correctlyWorld Not Saving
worlds/ directorychown -R minecraft:minecraft /home/minecraft/bedrock-server/
---
Conclusion
You now have a fully functional Minecraft Bedrock Dedicated Server supporting crossplay across all platforms. Here is a quick recap:
- >Download BDS from minecraft.net
- >Configure
server.properties,allowlist.json, andpermissions.json - >Forward UDP port 19132 through your router
- >Console players use the BedrockConnect DNS workaround to connect
- >Back up your world regularly using the
save hold/save resumemethod
- >Set up automated backups with a cron job
- >Explore behavior packs and addons for custom content
- >Consider a cloud hosting provider for 24/7 uptime
- >Join the Bedrock server community for support and ideas