> How to Set Up a Minecraft Bedrock Dedicated Server

Complete guide to hosting a Minecraft Bedrock Edition server for crossplay between PC, Xbox, PlayStation, Switch, and mobile devices.

Intermediate
45 minutes

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

FeatureBedrock EditionJava Edition
PlatformsPC, Xbox, PlayStation, Switch, iOS, AndroidPC only (Windows, Mac, Linux)
CrossplayYes, all platformsNo, Java only
ModdingAddons and behavior packsForge, Fabric, NeoForge mods
RedstoneSimplified mechanicsFull quasi-connectivity
PerformanceWritten in C++, generally betterWritten in Java, more resource-heavy
Server SoftwareBedrock Dedicated Server (BDS)Vanilla, Paper, Spigot, etc.
Default Port19132 UDP25565 TCP
Plugin SupportLimited (no native plugin API)Extensive (Bukkit/Spigot API)
MarketplaceBuilt-in marketplace for contentCommunity-driven, free mods
CombatSimplified combat system1.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

RequirementMinimumRecommended
CPU2 cores4+ cores
RAM1 GB2-4 GB
Storage1 GB5 GB+ SSD
Bandwidth5 Mbps upload20+ Mbps upload
OSWindows 10 (64-bit) / Ubuntu 22.04+Windows Server / Ubuntu 24.04
NetworkPort forwarding abilityStatic IP or dynamic DNS
Note: BDS is officially supported on Windows 10/11 (64-bit) and Ubuntu Linux. macOS is not officially supported.

---

Step 1: Download Bedrock Dedicated Server

Get the Server Software

  • 1.Visit the official download page at minecraft.net/download/server/bedrock
  • 2.Select your platform (Windows or Ubuntu Linux)
  • 3.Check the box to agree to the Terms of Use and Privacy Policy
  • 4.Click the Download button
  • Extract the Files

    Windows:

  • 1.Create a dedicated folder (e.g., C:\BedrockServer)
  • 2.Extract the downloaded .zip file into this folder
  • 3.You should see files like bedrock_server.exe, server.properties, and others
  • Linux:

    Bash
    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.

    Properties
    # 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

    SettingDescriptionDefaultRecommended
    server-nameName shown in server listDedicated ServerYour server name
    gamemodeDefault mode: survival, creative, adventuresurvivalYour preference
    difficultypeaceful, easy, normal, hardeasynormal
    max-playersMaximum simultaneous players10Based on hardware
    online-modeRequires Xbox Live authenticationtruetrue (for security)
    server-portIPv4 UDP port1913219132
    server-portv6IPv6 UDP port1913319133
    level-nameWorld folder nameBedrock levelYour world name
    level-seedWorld generation seed(random)Any seed string
    allow-cheatsEnable cheat commandsfalsefalse (for survival)
    view-distanceMax view distance in chunks3216-32
    tick-distanceSimulation distance (4-12)44-8
    player-idle-timeoutMinutes before kicking idle players (0 = disabled)300 or 15
    server-authoritative-movementAnti-cheat for movementserver-authserver-auth

    allowlist.json

    When allow-list=true is set in server.properties, only players listed here can join. This is useful for private servers.

    JSON
    [
        {
            "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.

    JSON
    [
        {
            "permission": "operator",
            "xuid": "1234567890123456"
        },
        {
            "permission": "member",
            "xuid": "9876543210987654"
        }
    ]
    

    Permission levels:

    LevelDescription
    visitorCan interact but not build or mine
    memberStandard player permissions (default)
    operatorFull 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:

    Bash
    @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:

    Bash
    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:

    Bash
    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:

    Bash
    #!/bin/bash
    cd "$(dirname "$0")"
    LD_LIBRARY_PATH=. ./bedrock_server
    

    Make it executable:

    Bash
    chmod +x start.sh
    ./start.sh
    

    Run as a background service with screen:

    Bash
    # 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:

    Properties
    [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:

    Bash
    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:

  • 1.Generate the world based on your level-seed setting
  • 2.Create default configuration files if missing
  • 3.Display Server started in the console when ready
  • You 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

  • 1.Find your local IP address:
  • Windows:

    Bash
    ipconfig
    
    Look for your IPv4 Address (typically 192.168.x.x)

    Linux:

    Bash
    ip addr show
    
  • 2.Open your router's admin panel (usually 192.168.1.1 or 192.168.0.1)
  • 3.Navigate to Port Forwarding, NAT, or Virtual Servers
  • 4.Create a new forwarding rule:
  • FieldValue
    Service NameBedrock Server
    External Port19132
    Internal Port19132
    ProtocolUDP
    Internal IPYour computer's local IP
  • 5.Create a second rule for IPv6 (optional):
  • FieldValue
    Service NameBedrock Server IPv6
    External Port19133
    Internal Port19133
    ProtocolUDP
    Internal IPYour 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)

  • 1.Open Minecraft Bedrock Edition
  • 2.Go to Play > Servers tab
  • 3.Scroll down and click Add Server
  • 4.Enter:
    • >Server Name: Anything you like
    • >Server Address: Your public IP (or localhost if on the same machine)
    • >Port: 19132
    5. Click Save and then Join Server

    Mobile (iOS / Android)

  • 1.Open Minecraft
  • 2.Tap Play > Servers tab
  • 3.Scroll down and tap Add Server
  • 4.Enter the server address and port (19132)
  • 5.Tap Save and then join
  • 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)

  • 1.On your Xbox, go to Settings > Network > Advanced Settings > DNS Settings
  • 2.Set DNS to Manual
  • 3.Set Primary DNS to a BedrockConnect DNS server (e.g., 104.238.130.180)
  • 4.Set Secondary DNS to 8.8.8.8
  • 5.Open Minecraft and go to the Servers tab
  • 6.Select any featured server (it will redirect to BedrockConnect)
  • 7.Enter your server's IP and port in the BedrockConnect menu
  • 8.Click Connect
  • PlayStation

    PlayStation uses the same DNS workaround as Xbox:

  • 1.Go to Settings > Network > Settings > Set Up Internet Connection
  • 2.Choose your connection type (WiFi or LAN)
  • 3.Select Custom setup
  • 4.Set DNS Settings to Manual
  • 5.Set Primary DNS to a BedrockConnect DNS server (e.g., 104.238.130.180)
  • 6.Set Secondary DNS to 8.8.8.8
  • 7.Open Minecraft, go to Servers tab, and select any featured server
  • 8.BedrockConnect will appear, enter your server details
  • Nintendo Switch

    The Switch also uses the DNS workaround:

  • 1.Go to System Settings > Internet > Internet Settings
  • 2.Select your network and click Change Settings
  • 3.Set DNS Settings to Manual
  • 4.Set Primary DNS to 104.238.130.180
  • 5.Set Secondary DNS to 8.8.8.8
  • 6.Save and connect
  • 7.Open Minecraft, navigate to Servers tab, and select any featured server
  • 8.Use the BedrockConnect menu to enter your server IP and port
  • Note: 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:

  • 1.In the server console, type: save hold
  • 2.Wait, then type: save query (repeat until it says files are ready)
  • 3.Copy the worlds/ folder to your backup location
  • 4.In the server console, type: save resume
  • Automated Backup Script (Linux)

    Bash
    #!/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:

    Bash
    chmod +x backup.sh
    # Run daily at 4 AM
    crontab -e
    # Add: 0 4 * * * /home/minecraft/backup.sh
    

    ---

    Performance Optimization

    Tuning server.properties

    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:

    Bash
    # Add to /etc/security/limits.conf
    minecraft soft nofile 65535
    minecraft hard nofile 65535
    

    Linux - Set CPU priority:

    Bash
    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=false to 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

  • 1.Place the .mcpack or extracted pack folder into resource_packs/
  • 2.Edit worlds//world_resource_packs.json:
  • JSON
    [
        {
            "pack_id": "pack-uuid-here",
            "version": [1, 0, 0]
        }
    ]
    
  • 3.If you want to force the pack on all players, set texturepack-required=true in server.properties
  • 4.Restart the server
  • Installing Behavior Packs

  • 1.Place the extracted pack folder into behavior_packs/
  • 2.Edit worlds//world_behavior_packs.json:
  • JSON
    [
        {
            "pack_id": "pack-uuid-here",
            "version": [1, 0, 0]
        }
    ]
    
  • 3.Restart the server
  • Finding Packs

    Pack UUID and Version

    You can find the pack's UUID and version in its manifest.json file:

    JSON
    {
        "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:

  • 1.Back up everything - Especially the worlds/ folder
  • 2.Download the latest BDS from minecraft.net/download/server/bedrock
  • 3.Extract the new files into a temporary folder
  • 4.Copy your existing files over:
    • >server.properties
    • >allowlist.json
    • >permissions.json
    • >worlds/ folder
    • >Any custom packs
    5. Replace the old server files with the new ones
  • 6.Start the server and verify everything works
  • Warning: Players must also update their Minecraft client to the matching version. Version mismatches will prevent connections.

    ---

    Troubleshooting

    "Unable to Connect to World"

  • 1.Check the port - Bedrock uses UDP 19132, not TCP 25565
  • 2.Verify port forwarding - Ensure the rule is set to UDP, not TCP
  • 3.Check your firewall - BDS must be allowed through your firewall
  • 4.Test locally first - Try connecting from the same machine using localhost and port 19132
  • 5.Check online mode - If online-mode=true, players must be signed into Xbox Live
  • Console 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

  • 1.Reduce view-distance to 10-16
  • 2.Set tick-distance to 4
  • 3.Check your internet upload speed (need at least 5 Mbps per 5 players)
  • 4.Ensure server-authoritative-movement=server-auth for fair play
  • 5.Reduce max-players if hardware is struggling
  • Server Crashes

  • 1.Check the console output for error messages
  • 2.Remove recently added behavior packs
  • 3.Ensure you have the required Visual C++ runtime (Windows)
  • 4.On Linux, verify LD_LIBRARY_PATH is set correctly
  • 5.Check available disk space and memory
  • 6.Try generating a fresh world to isolate world corruption
  • World Not Saving

  • 1.Check disk space
  • 2.Ensure the server has write permissions to the worlds/ directory
  • 3.On Linux, verify the user running the server owns the files:
  • Bash
    chown -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, and permissions.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 resume method
    Next steps:
    • >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