Skip to main contentSkip to navigation
[email protected]
Client AreaSupport
Hosting Mammoth
HostingMammothYour Data, Our Responsibility
Home
Solutions
Hosting Services
Store
Pricing
About
Blog
API
Contact

Stay Ahead of the Curve

Get the latest insights on cybersecurity, AI innovations, and enterprise data solutions delivered to your inbox.

Hosting Mammoth
HostingMammothEnterprise Solutions

Enterprise-grade data solutions. Hosting, recovery, cybersecurity, and AI-powered services for businesses worldwide.

[email protected]
Sun - Fri, 9:00am - 5:00pm

Services

  • Cloud Hosting
  • Data Recovery
  • Cybersecurity
  • Legal Support
  • MSP Services
  • Web Development
  • AI Services
  • Free Server Migration

Hosting

  • VPS Hosting (NVMe SSD)
  • VDS Hosting (NVMe)
  • Storage VPS (High SSD)
  • GPU Servers
  • Managed Services
  • Cloud Firewall
  • Load Balancer
  • One-Click Apps
  • n8n Hosting
  • Object Storage
  • FAQ

Company

  • Store
  • Pricing
  • About Us
  • Locations
  • Blog
  • Testimonials
  • Contact
  • Affiliate Program
  • White-Label
  • Terms of Service
  • Privacy Policy
  • Browser Cookies
  • SLA

Support

  • Client Area
  • Submit Ticket
  • Knowledge Base
  • Server Status
  • API Documentation

© 2026 Hosting Mammoth. All rights reserved.

Knowledge Base
Getting StartedAccount ManagementVPS HostingGPU ServersStorage VPSCloud FirewallLoad BalancerServer ManagementBilling & PaymentsSupport & TicketsAffiliate ProgramReseller ProgramMarketplace & Appsn8n HostingManaged ServicesServer MigrationAPI & DevelopersSecurityTroubleshootingGlossaryInstall Guides
  1. Home
  2. /
  3. Support
  4. /
  5. Install Guides
  6. /
  7. How To Install Palworld Server Ubuntu
GUIDEInstall Guides

How to Install a Palworld Dedicated Server on Ubuntu 24.04 VPS

23 min read

How to Install a Palworld Dedicated Server on Ubuntu 24.04 VPS

Hosting your own Palworld dedicated server gives you a persistent world that your friends can join around the clock, full control over every gameplay multiplier, and freedom from the player limits and instability that plague peer-to-peer sessions. This guide walks you through a production-grade install on a fresh Ubuntu 24.04 VPS -- from SteamCMD to a hardened systemd service with automated backups, RCON, and update workflow.

Want to skip the provisioning hassle? Spin up a game-ready VPS with SSD storage and private networking in under 60 seconds. Launch a CloudCore Business VPS and come back to Step 1.

Table of Contents

  • What is a Palworld Dedicated Server?
  • Why Self-Host Palworld on Your Own VPS?
  • Prerequisites and System Requirements
  • Step 1: Update the System and Create a Dedicated User
  • Step 2: Install SteamCMD Dependencies
  • Step 3: Install SteamCMD
  • Step 4: Install the Palworld Dedicated Server (App 2394010)
  • Step 5: First Launch and Config Generation
  • Step 6: Configure PalWorldSettings.ini
  • Step 7: Open UDP Port 8211 in the Firewall
  • Step 8: Enable RCON for Remote Admin
  • Step 9: Create a systemd Service with Auto-Restart
  • Step 10: Automate World Backups
  • Admin Commands via RCON
  • Performance Tuning
  • Updating the Server
  • Troubleshooting
  • FAQ
  • Next Steps
  • What is a Palworld Dedicated Server?

    Palworld is a multiplayer open-world survival crafting game built on Unreal Engine 5, developed by Pocketpair. While the game ships with a built-in "host game" mode that runs inside the client, that mode is limited to 4 players by default, requires the host to remain online for the world to be accessible, and suffers from the usual constraints of peer-to-peer hosting (NAT punchthrough, uplink bandwidth, host-side latency advantages).

    The dedicated server is a separate headless binary distributed on Steam as app ID 2394010. It runs without a graphics context, accepts up to 32 simultaneous players in its current stable build, and is designed to run 24/7 on Linux or Windows. Because it is a standalone process, the world persists independently of whether any player is connected -- your base, your captured Pals, and world progression keep ticking (or stay frozen, depending on settings) regardless of client activity.

    The server reads a single primary configuration file called PalWorldSettings.ini, exposes an RCON administration socket for remote commands, and stores world state on disk under a Saved/SaveGames/ tree that you can snapshot, roll back, or migrate between hosts. Official documentation lives at tech.palworldgame.com.

    Why Self-Host Palworld on Your Own VPS?

    Running Palworld on a VPS you control, rather than renting a pre-configured game panel from a managed game-hosting company, delivers concrete advantages:

    • True 32-player capacity -- The dedicated binary supports up to 32 concurrent players. Many managed providers artificially cap slots on lower tiers; your own VPS runs whatever the binary supports.
    • Persistent, always-on world -- The world keeps running when nobody is playing. Log in at 3 AM to check on your base; come back to a fully grown farm.
    • Full admin control -- Every gameplay multiplier, death penalty, Pal capture rate, day/night ratio, and XP curve is yours to tune in real time. No tier-gated features.
    • Mod and script freedom -- Drop in custom save editors, run scheduled restart scripts, integrate with Discord webhooks, or attach any monitoring stack you like. No panel walled garden.
    • Predictable flat pricing -- A VPS costs the same whether 2 friends play or 32 players raid together. No per-slot upcharges.
    • Root shell access -- Full SSH and sudo. Inspect logs, tune the kernel, swap the save directory to a larger volume, run custom cron jobs. Nothing is off-limits.
    • Data ownership -- Your Saved/ folder is yours. Back it up to S3, clone it to a staging world, migrate hosts without vendor assistance.

    Self-Hosted VPS vs. Managed Game Hosting

    ScenarioManaged Game PanelSelf-Hosted VPS (Palworld)
    Monthly cost (32 slots)EUR 25-60/moEUR 16-30/mo (flat)
    Root / SSH accessUsually noYes
    Custom mods and scriptsLimitedUnlimited
    RCON accessSometimes gatedAlways
    Backup controlPanel-managedFull cron + offsite
    Upgrade pathChange planResize VPS in place
    Run other services on the same boxNoYes (Discord bot, web panel, etc.)
    For anyone comfortable with SSH -- or willing to follow a guide like this one -- self-hosting typically costs half as much while delivering considerably more control.

    Prerequisites and System Requirements

    Before you begin, make sure you have:

    • A VPS running Ubuntu 24.04 LTS with root or sudo access
    • SSH access to the server (PuTTY on Windows, or the built-in terminal on macOS/Linux)
    • At least 16 GB of RAM recommended for a full 32-player server (8 GB minimum for 8-10 players)
    • 4 vCPU cores (Palworld is CPU-heavy due to UE5 world simulation and Pal AI)
    • 50 GB of free disk space (the server binary plus saves and backups grow quickly)
    • A stable public IPv4 address with unrestricted UDP/8211
    Palworld's dedicated server is genuinely resource-hungry. Unreal Engine 5 world simulation, AI pathfinding for dozens of Pals per base, and physics tick volume scale with player count. Running a 32-player server on 8 GB of RAM will OOM within hours; sizing up front saves pain later.

    Recommended Plan: CloudCore Business
    >
    For a stable 32-player Palworld world with headroom for mods, RCON tooling, and a Discord bot on the same box, we recommend the CloudCore Business plan:
    >
    - 6 vCPU cores (AMD EPYC)
    - 16 GB RAM
    - 200 GB NVMe SSD
    - Unmetered bandwidth
    - EUR 29.99/month
    >
    Smaller 4-8 player servers can run fine on CloudCore Professional (12 GB RAM). For heavily modded or 32-player servers with complex base builds, step up to 24-32 GB RAM.

    Connect to your server via SSH to get started:

    bash
    ssh root@your-server-ip

    Step 1: Update the System and Create a Dedicated User

    Start by updating your package index and upgrading installed packages:

    bash
    sudo apt update && sudo apt upgrade -y

    If the kernel was updated, reboot before continuing:

    bash
    sudo reboot

    Never run a game server as root. Create a dedicated unprivileged user called steam that will own the SteamCMD tree and the Palworld install:

    bash
    sudo useradd -m -s /bin/bash steam
    sudo passwd steam

    This gives us a clean home directory at /home/steam and isolates the game process from the rest of the system. For the remainder of the guide, switch to the steam user whenever you interact with SteamCMD or the Palworld binary:

    bash
    sudo -iu steam

    Step 2: Install SteamCMD Dependencies

    SteamCMD is a 32-bit application and depends on the i386 multiarch libraries plus a handful of runtime packages. As root (or via sudo), enable the i386 architecture and install dependencies:

    bash
    sudo dpkg --add-architecture i386
    sudo apt update
    sudo apt install -y \
        software-properties-common \
        lib32gcc-s1 \
        libsdl2-2.0-0:i386 \
        libc6-i386 \
        curl \
        wget \
        tar \
        xz-utils \
        ca-certificates

    Expected output (abbreviated):

    text
    Setting up lib32gcc-s1 (14.2.0-4ubuntu2~24.04) ...
    Setting up libsdl2-2.0-0:i386 (2.30.0+dfsg-1build3) ...
    ...
    0 upgraded, 14 newly installed, 0 to remove.

    Ubuntu 24.04 requires you to accept the Steam license interactively the first time you install its package -- we install SteamCMD manually instead (next step), which bypasses that prompt.

    Step 3: Install SteamCMD

    Switch to the steam user and pull SteamCMD's official Linux tarball into its home directory:

    bash
    sudo -iu steam
    mkdir -p ~/steamcmd
    cd ~/steamcmd
    curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xz

    Verify the binary exists:

    bash
    ls -la ~/steamcmd/steamcmd.sh

    Run SteamCMD once so it can self-update and fetch its runtime components:

    bash
    ./steamcmd.sh +quit

    Expected output (final lines):

    text
    Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
    [  0%] Checking for available updates...
    [----] Verifying installation...
    Steam Console Client (c) Valve Corporation - version 1739067670
    -- type 'quit' to exit --
    Loading Steam API...OK

    If you see OK at the end, SteamCMD is ready.

    Step 4: Install the Palworld Dedicated Server (App 2394010)

    The Palworld dedicated server is published as Steam app ID 2394010 and is downloadable with an anonymous Steam login -- no Steam account or game ownership required on the server side.

    Still as the steam user, create a target directory and install the server:

    bash
    mkdir -p ~/palworld
    cd ~/steamcmd
    ./steamcmd.sh +force_install_dir /home/steam/palworld \
        +login anonymous \
        +app_update 2394010 validate \
        +quit

    Expected output:

    text
    Connecting anonymously to Steam Public...OK
    Waiting for client config...OK
    Waiting for user info...OK
     Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
     Update state (0x61) downloading, progress: 12.34 (185012000 / 1498000000)
     ...
     Update state (0x81) verifying update, progress: 97.45 (1459820000 / 1498000000)
    Success! App '2394010' fully installed.

    The download is approximately 1.5-2.5 GB depending on the current build. When it completes, the full server tree lives at /home/steam/palworld/:

    bash
    ls /home/steam/palworld

    Expected layout:

    text
    Engine  Pal  PalServer.sh  steamapps

    The launch script is PalServer.sh. It wraps the actual binary at Pal/Binaries/Linux/PalServer-Linux-Shipping.

    Step 5: First Launch and Config Generation

    The Palworld server does not create its user-editable config on install -- it generates a default config on first launch, which you then copy to the override path. Do a short first launch to trigger that generation:

    bash
    cd ~/palworld
    ./PalServer.sh

    You will see the server initialize, bind UDP 8211, and print something like:

    text
    LogInit: Engine is initialized. Leaving FEngineLoop::Init()
    LogPalServerDedicated: Pal Server Version: 0.3.4.xxxxx
    LogNet: Game server listening on port 8211

    Let it run for about 10 seconds, then stop it with Ctrl+C.

    The default config was generated at:

    text
    /home/steam/palworld/DefaultPalWorldSettings.ini

    And the server will look for overrides at:

    text
    /home/steam/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

    Copy the default into the override location so you have every field laid out and ready to edit:

    bash
    mkdir -p ~/palworld/Pal/Saved/Config/LinuxServer
    cp ~/palworld/DefaultPalWorldSettings.ini \
       ~/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

    Step 6: Configure PalWorldSettings.ini

    Open the override file:

    bash
    nano ~/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

    The entire file is a single bracketed OptionSettings line with comma-separated key=value pairs. Below is a sensible production-grade configuration. Replace placeholder passwords with your own strong values:

    ini
    [/Script/Pal.PalGameWorldSettings]
    OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=1.200000,PalCaptureRate=1.200000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,PlayerStomachDecreaseRate=1.000000,PlayerStaminaDecreaseRate=1.000000,PlayerAutoHPRegeneRate=1.000000,PlayerAutoHpRegeneRateInSleep=1.000000,PalStomachDecreaseRate=1.000000,PalStaminaDecreaseRate=1.000000,PalAutoHPRegeneRate=1.000000,PalAutoHpRegeneRateInSleep=1.000000,BuildObjectDamageRate=1.000000,BuildObjectDeteriorationDamageRate=1.000000,CollectionDropRate=1.500000,CollectionObjectHpRate=1.000000,CollectionObjectRespawnSpeedRate=1.000000,EnemyDropItemRate=1.000000,DeathPenalty=ItemAndEquipment,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=15,DropItemAliveMaxHours=1.000000,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72.000000,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=72.000000,WorkSpeedRate=1.000000,bIsMultiplay=True,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=False,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=4,ServerPlayerMaxNum=32,ServerName="My Palworld Server",ServerDescription="A self-hosted Palworld world on Ubuntu 24.04.",AdminPassword="change-me-strong-admin-pass",ServerPassword="",PublicPort=8211,PublicIP="",RCONEnabled=True,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt")

    Critical fields to review:

    • ServerName -- Shown in the in-game community server browser.
    • ServerDescription -- One-line description shown beneath the name.
    • AdminPassword -- Required for in-game admin commands and RCON. Always set a strong value.
    • ServerPassword -- If non-empty, players must enter it to join. Leave empty for a public server.
    • ServerPlayerMaxNum=32 -- Maximum concurrent players. The engine hard-caps at 32.
    • PublicPort=8211 -- UDP port the server binds. Must match your firewall rule.
    • RCONEnabled=True and RCONPort=25575 -- Enables remote admin console. See Step 8.
    • DeathPenalty -- Options: None (drop nothing), Item (drop inventory only), ItemAndEquipment (default), All (drop everything including Pals). Match to your community preference.
    • ExpRate, PalCaptureRate, CollectionDropRate -- Gameplay multipliers. Bumping PalCaptureRate to 1.5-2.0 noticeably reduces early-game grind.
    • bEnablePlayerToPlayerDamage=False -- Keep PvP off unless you are specifically running a PvP world.
    Save with Ctrl+O, Enter, then Ctrl+X.

    Step 7: Open UDP Port 8211 in the Firewall

    Palworld uses UDP/8211 exclusively for game traffic (plus TCP/25575 for RCON if enabled). If you are using UFW (the standard Ubuntu firewall), allow the game port:

    bash
    sudo ufw allow 8211/udp comment 'Palworld game'
    sudo ufw reload
    sudo ufw status

    Expected output:

    text
    Status: active

    To Action From -- ------ ---- 22/tcp ALLOW Anywhere 8211/udp ALLOW Anywhere # Palworld game

    For RCON, do not expose TCP/25575 to the public internet. Either leave it bound to localhost (the default when you SSH in and issue RCON locally) or restrict access to your home IP:

    bash
    sudo ufw allow from YOUR.HOME.IP.HERE to any port 25575 proto tcp comment 'Palworld RCON'

    If your provider uses a separate network firewall (Contabo, OVH, Hetzner), mirror the UDP/8211 rule there as well. See our guide on Configuring UFW on Ubuntu 24.04 for a deeper walkthrough.

    Step 8: Enable RCON for Remote Admin

    With RCONEnabled=True and RCONPort=25575 set in PalWorldSettings.ini, the server will accept RCON connections using the admin password. Install a lightweight RCON client to interact with it:

    bash
    sudo apt install -y mcrcon

    Test the connection (run as any user, from the server itself):

    bash
    mcrcon -H 127.0.0.1 -P 25575 -p 'change-me-strong-admin-pass' 'Info'

    Expected output:

    text
    Welcome to Palworld Dedicated Server[v0.3.4.xxxxx] My Palworld Server

    You can now issue any admin command remotely. See Admin Commands via RCON below.

    Step 9: Create a systemd Service with Auto-Restart

    Running PalServer.sh in a terminal is fine for testing but will die the moment you close your SSH session. Wrap the server in a systemd unit so it starts on boot, restarts on crash, and writes its logs to journalctl.

    As root, create the unit file:

    bash
    sudo tee /etc/systemd/system/palworld.service > /dev/null <<'EOF'
    [Unit]
    Description=Palworld Dedicated Server
    After=network-online.target
    Wants=network-online.target

    [Service] Type=simple User=steam Group=steam WorkingDirectory=/home/steam/palworld ExecStartPre=/home/steam/steamcmd/steamcmd.sh +force_install_dir /home/steam/palworld +login anonymous +app_update 2394010 +quit ExecStart=/home/steam/palworld/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS Restart=on-failure RestartSec=10 KillSignal=SIGINT TimeoutStopSec=60 LimitNOFILE=65535

    Hardening

    NoNewPrivileges=true PrivateTmp=true ProtectSystem=full ProtectHome=false

    [Install] WantedBy=multi-user.target EOF

    Explanation of the important directives:

    • ExecStartPre= -- Runs a SteamCMD update check before every launch so the binary stays current automatically. Remove this line if you prefer manual update control.
    • ExecStart= -- The three flags -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS are widely used community flags that improve multi-core utilization on headless Linux servers. See Performance Tuning.
    • Restart=on-failure + RestartSec=10 -- Auto-restart on crash with a 10-second cooldown.
    • KillSignal=SIGINT -- Sends the same Ctrl+C that lets the server save state cleanly on shutdown.
    • TimeoutStopSec=60 -- Gives the server up to 60 seconds to flush saves before systemd force-kills it.
    Reload systemd, enable the unit, and start the server:

    bash
    sudo systemctl daemon-reload
    sudo systemctl enable palworld
    sudo systemctl start palworld

    Check that it is running:

    bash
    sudo systemctl status palworld

    Expected output:

    text
    * palworld.service - Palworld Dedicated Server
         Loaded: loaded (/etc/systemd/system/palworld.service; enabled; preset: enabled)
         Active: active (running) since Wed 2026-04-16 10:00:00 UTC; 30s ago
       Main PID: 2345 (PalServer-Linux)
          Tasks: 24 (limit: 19055)
         Memory: 3.2G
            CPU: 18.456s
         CGroup: /system.slice/palworld.service
                 -2345 /home/steam/palworld/Pal/Binaries/Linux/PalServer-Linux-Shipping Pal ...</code></pre></div>

    Tail the logs in real time:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo journalctl -u palworld -f</code></pre></div>

    For a deeper look at systemd unit files, see Managing systemd Services on Ubuntu 24.04.

    Step 10: Automate World Backups

    Palworld stores its entire world state -- players, Pals, bases, inventories -- under:

    <div class="code-block" data-lang="text"><div class="code-block__header"><span class="code-block__lang">text</span></div><pre><code class="language-text">/home/steam/palworld/Pal/Saved/SaveGames/</code></pre></div>

    A single corrupted save can erase weeks of progress. Set up a cron job that snapshots this directory every 30 minutes and retains the last 7 days of backups.

    Create a backup script as the steam user:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo -iu steam mkdir -p ~/palworld-backups tee ~/palworld-backup.sh &gt; /dev/null &lt;&lt;'EOF' #!/bin/bash set -euo pipefail

    SRC=&quot;/home/steam/palworld/Pal/Saved/SaveGames&quot; DST=&quot;/home/steam/palworld-backups&quot; STAMP=&quot;$(date -u +%Y%m%d-%H%M%S)&quot;

    Create compressed snapshot

    tar -czf &quot;${DST}/palworld-save-${STAMP}.tar.gz&quot; -C &quot;$(dirname &quot;$SRC&quot;)&quot; &quot;$(basename &quot;$SRC&quot;)&quot;

    Retain last 7 days only (336 snapshots at 30-min cadence)

    find &quot;${DST}&quot; -name 'palworld-save-*.tar.gz' -mtime +7 -delete EOF chmod +x ~/palworld-backup.sh</code></pre></div>

    Install the cron entry:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">crontab -e</code></pre></div>

    Add this line:

    <div class="code-block" data-lang="text"><div class="code-block__header"><span class="code-block__lang">text</span></div><pre><code class="language-text">/30 * /home/steam/palworld-backup.sh &gt;&gt; /home/steam/palworld-backups/backup.log 2&gt;&amp;1</code></pre></div>

    Verify the first snapshot after 30 minutes:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">ls -lah ~/palworld-backups/</code></pre></div>

    For disaster recovery, also rsync the backup directory to offsite storage (S3, Backblaze B2, another VPS) on a daily schedule. A single tar.gz of a mature 20-player world is typically 100-500 MB -- trivial to archive offsite.

    Restoring a Backup

    Stop the server, extract the snapshot back over SaveGames, then restart:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo systemctl stop palworld cd /home/steam/palworld/Pal/Saved sudo -u steam tar -xzf /home/steam/palworld-backups/palworld-save-20260416-033000.tar.gz sudo systemctl start palworld</code></pre></div>

    Admin Commands via RCON

    With RCON enabled, run admin actions without logging into the game. All commands follow the pattern:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">mcrcon -H 127.0.0.1 -P 25575 -p 'YOUR-ADMIN-PASSWORD' 'Command Arguments'</code></pre></div>

    Common Admin Commands

    <div class="article-table-wrap"><table><thead><tr><th>Command</th><th>Purpose</th></tr></thead><tbody><tr><td><code>Info</code></td><td>Show server version and name</td></tr><tr><td><code>ShowPlayers</code></td><td>List connected players with SteamID and PlayerUID</td></tr><tr><td><code>Broadcast &lt;message&gt;</code></td><td>Send a server-wide chat message (no spaces in message)</td></tr><tr><td><code>Save</code></td><td>Force an immediate world save</td></tr><tr><td><code>Shutdown &lt;seconds&gt; &lt;message&gt;</code></td><td>Graceful countdown shutdown with broadcast message</td></tr><tr><td><code>DoExit</code></td><td>Immediate shutdown (no save) -- avoid unless stuck</td></tr><tr><td><code>KickPlayer &lt;SteamID&gt;</code></td><td>Kick a player by their Steam ID</td></tr><tr><td><code>BanPlayer &lt;SteamID&gt;</code></td><td>Permanently ban a player</td></tr><tr><td><code>TeleportToPlayer &lt;SteamID&gt;</code></td><td>Teleport yourself to a player (must be logged in)</td></tr><tr><td><code>TeleportToMe &lt;SteamID&gt;</code></td><td>Summon a player to your position</td></tr></tbody></table></div>

    Scheduled Daily Restart

    Palworld benefits from a daily restart to flush memory and apply any Steam updates. Add a cron entry that issues a graceful RCON shutdown at 5 AM:

    <div class="code-block" data-lang="text"><div class="code-block__header"><span class="code-block__lang">text</span></div><pre><code class="language-text">0 5 * mcrcon -H 127.0.0.1 -P 25575 -p 'YOUR-ADMIN-PASSWORD' 'Shutdown 300 Server_restarting_in_5_minutes'</code></pre></div>

    Because systemd has Restart=on-failure, the service will not auto-restart after a clean shutdown. To get auto-restart after a scheduled Shutdown, change the unit to Restart=always -- or leave it as-is and add a @reboot or paired systemctl start cron entry five minutes later.

    Performance Tuning

    Palworld's UE5 server is notoriously CPU-heavy. The community has converged on a small set of launch flags and kernel tweaks that meaningfully improve frame pacing under load.

    Launch Flags (already in our systemd unit)

    <div class="code-block" data-lang="text"><div class="code-block__header"><span class="code-block__lang">text</span></div><pre><code class="language-text">-useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS</code></pre></div>

    These flags instruct the Unreal Engine runtime to:

    • -useperfthreads -- Promote critical worker threads to real-time priority where possible, reducing tick jitter.
    • -NoAsyncLoadingThread -- Disable the async asset loader (unnecessary on a headless server), freeing a core.
    • -UseMultithreadForDS -- Enable multi-threaded dedicated-server mode (enabled by default in newer builds; explicit flag is harmless).

    Kernel and Resource Tuning

    Raise the open-file limit (large worlds hit it):

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo tee /etc/security/limits.d/palworld.conf &gt; /dev/null &lt;&lt;EOF steam soft nofile 65535 steam hard nofile 65535 EOF</code></pre></div>

    Increase UDP buffer sizes for smoother networking under 20+ player load:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo tee /etc/sysctl.d/99-palworld.conf &gt; /dev/null &lt;&lt;EOF net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.core.netdev_max_backlog=5000 EOF sudo sysctl --system</code></pre></div>

    CPU Governor

    On dedicated VPS hardware, set the performance governor so cores do not clock down during lull:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo apt install -y cpufrequtils echo 'GOVERNOR=&quot;performance&quot;' | sudo tee /etc/default/cpufrequtils sudo systemctl restart cpufrequtils</code></pre></div>

    Note: many virtualized VPS platforms fix the governor at the hypervisor level, in which case this is a no-op but harmless.

    Memory Sizing Reference

    Approximate RAM usage by player count on a mature world: <div class="article-table-wrap"><table><thead><tr><th>Players</th><th>Approximate RAM Usage</th><th>Recommended Plan</th></tr></thead><tbody><tr><td>1-4</td><td>6-8 GB</td><td>CloudCore Professional (12 GB)</td></tr><tr><td>5-10</td><td>8-12 GB</td><td>CloudCore Professional (12 GB)</td></tr><tr><td>11-20</td><td>12-16 GB</td><td>CloudCore Business (16 GB)</td></tr><tr><td>21-32</td><td>16-24 GB</td><td>CloudCore Business (16 GB) or larger</td></tr></tbody></table></div> If you see the OOM-killer terminate PalServer-Linux-Shipping in dmesg, you need more RAM -- not more swap. Swap thrashing on a game server causes unplayable stutters.

    Updating the Server

    Palworld receives patches regularly, and clients will refuse to connect to an out-of-date server. The update command is the same SteamCMD invocation used for install:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo systemctl stop palworld sudo -iu steam bash -c '/home/steam/steamcmd/steamcmd.sh +force_install_dir /home/steam/palworld +login anonymous +app_update 2394010 validate +quit' sudo systemctl start palworld</code></pre></div>

    Because our systemd unit includes ExecStartPre= that runs the same app_update on every start, you can alternatively just restart the service:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo systemctl restart palworld</code></pre></div>

    The validate flag checksums every file and re-downloads any mismatches. It adds a minute or two to the update but prevents subtle corruption issues after failed downloads.

    To check the currently installed build ID:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">grep -A1 '&quot;2394010&quot;' /home/steam/palworld/steamapps/appmanifest_2394010.acf | grep buildid</code></pre></div>

    Compare against the latest build ID on SteamDB to see whether you are current.

    Troubleshooting

    <div class="article-table-wrap"><table><thead><tr><th>Problem</th><th>Cause</th><th>Solution</th></tr></thead><tbody><tr><td>Server killed with <code>out of memory</code> in <code>dmesg</code></td><td>RAM exhausted under player load</td><td>Upgrade to more RAM. Do not compensate with swap -- it causes stutters. Check <code>free -h</code> and ps aux --sort=-rss \head.</td></tr><tr><td>CPU pegged at 100% constantly</td><td>Too many base workers / overbuilt bases / insufficient vCPU</td><td>Lower <code>BaseCampWorkerMaxNum</code>. Upgrade vCPU. Check hot cores with <code>htop</code>.</td></tr><tr><td>Save file corruption after crash</td><td>Ungraceful shutdown mid-save</td><td>Restore latest backup from <code>~/palworld-backups/</code>. Ensure systemd <code>KillSignal=SIGINT</code> and <code>TimeoutStopSec=60</code> are set.</td></tr><tr><td>Players cannot connect</td><td>UDP/8211 blocked or wrong public IP</td><td>Verify UFW: <code>sudo ufw status</code>. Verify provider firewall. Test from outside: <code>nc -u -zv YOUR.IP 8211</code>.</td></tr><tr><td>"Server is full" despite low player count</td><td><code>ServerPlayerMaxNum</code> misset</td><td>Edit <code>PalWorldSettings.ini</code>, set to <code>32</code>, restart service.</td></tr><tr><td>RCON connection refused</td><td>RCON not enabled or wrong port</td><td>Confirm <code>RCONEnabled=True</code> and <code>RCONPort=25575</code>. Check ss -tlnp \grep 25575.</td></tr><tr><td>Server unreachable after Palworld patch</td><td>Client version newer than server</td><td>Run <code>sudo systemctl restart palworld</code> to trigger the <code>ExecStartPre</code> update, or manually <code>app_update 2394010 validate</code>.</td></tr><tr><td>High packet loss / rubber-banding</td><td>Insufficient UDP buffers</td><td>Apply the <code>sysctl</code> tuning in <a href="#performance-tuning">Performance Tuning</a>.</td></tr><tr><td><code>steamcmd.sh: not found</code> or 32-bit errors</td><td>Multiarch i386 libraries missing</td><td>Re-run the <code>dpkg --add-architecture i386</code> step and reinstall <code>lib32gcc-s1</code>.</td></tr><tr><td>Server starts, then exits after ~30 seconds</td><td>First run without generated config</td><td>Complete <a href="#step-5-first-launch-and-config-generation">Step 5</a> to create <code>PalWorldSettings.ini</code>.</td></tr></tbody></table></div>

    Viewing Logs

    The most useful debugging tool is the systemd journal:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo journalctl -u palworld -f</code></pre></div>

    For the last 200 lines without following:

    <div class="code-block" data-lang="bash"><div class="code-block__header"><span class="code-block__lang">bash</span></div><pre><code class="language-bash">sudo journalctl -u palworld -n 200 --no-pager</code></pre></div>

    In-game logs also land under ~/palworld/Pal/Saved/Logs/Pal.log -- useful for Unreal-specific errors.

    FAQ

    How many players can a Palworld dedicated server support?

    The current dedicated server binary supports up to 32 concurrent players, configured via ServerPlayerMaxNum in PalWorldSettings.ini. This is an engine-level cap; you cannot exceed it without unofficial modifications. Most servers run comfortably at 16-24 active players on a 16 GB VPS; filling to 32 typically benefits from 24 GB+ of RAM, especially if players build large bases with many Pal workers.

    Do I need to own Palworld on Steam to run the dedicated server?

    No. The dedicated server (app ID 2394010) is a separate anonymous download on Steam. You log in to SteamCMD as anonymous -- no account, no purchase required on the server host. Players joining the server of course still need to own Palworld on their own Steam accounts.

    Can I run Palworld on a 4 GB or 8 GB VPS?

    4 GB is not realistic -- the server will OOM within minutes. 8 GB works for a 2-4 player family/friends world with a modest base, but will be cramped. For anything resembling a public or semi-public server, start at 16 GB. UE5 world simulation and Pal AI scale aggressively with player count and base size; undersizing results in OOM kills that corrupt saves.

    How do I migrate my save to a new VPS?

    Stop the server on the old host, tar the entire ~/palworld/Pal/Saved/ directory, copy it to the new host with scp or rsync, then extract it in the matching location on the new install. Both SaveGames/ (world state) and Config/LinuxServer/PalWorldSettings.ini (your settings) move together. Restart, and the world resumes exactly where it stopped.

    Does Palworld support mods on dedicated servers?

    Palworld is still in early access and does not yet have official mod support for dedicated servers. Community-made tools exist for save editing (viewing Pal stats, respawning eggs, resetting player data), and some admins run Discord bots that use RCON to bridge chat between game and Discord. Official mod and plugin APIs are on Pocketpair's published roadmap.

    Why is my CPU usage so high even with only a few players?

    Palworld's CPU cost is dominated by base worker Pal AI, not player count. A single player with 3 fully-staffed level-4 bases can generate more CPU load than 10 players exploring the open world. If CPU pegs, lower BaseCampWorkerMaxNum (default 15, try 10), or restrict BaseCampMaxNum per guild. Large bases with many moving Pals are the biggest tick-rate consumers.

    How often should I back up the save?

    Every 15-30 minutes for active servers. Saves are small (tens to hundreds of MB compressed) and the main risk is crash-time corruption, not gradual data loss. Retain at least 7 days of snapshots, and copy a daily archive to offsite storage. Our cron example above implements exactly this pattern.

    Next Steps

    Now that your Palworld server is running, here are recommended next steps to extend the setup:

    • Hook up a Discord bot via RCON -- Tools like Palworld-Discord-Bot bridge in-game chat to a Discord channel, let admins issue RCON commands from Discord, and announce player joins/leaves.
    • Set up Uptime Kuma monitoring -- Deploy Uptime Kuma on the same or a separate VPS and monitor your UDP/8211 game port, RCON socket, and system metrics. Get Discord/email alerts when the world goes down.
    • Offsite backup to S3 or Backblaze B2 -- Extend the backup cron to rclone copy the snapshot tarballs to cloud object storage nightly. At typical save sizes, a year of daily archives costs pennies.
    • Run a web dashboard -- Deploy palworld-server-toolkit or a community web panel on the same VPS to inspect Pals, manage guilds, and issue commands from a browser.
    • Tune for a PvP world -- Flip bEnablePlayerToPlayerDamage=True and bIsPvP=True, then revisit multipliers like PlayerDamageRateAttack to balance combat pace. Consider a shorter death penalty (Item instead of ItemAndEquipment`) to reduce PvP friction.
    • Pair with a VPN for private worlds -- For a strictly-friends server, skip the public UFW rule and instead allow UDP/8211 only from a WireGuard subnet. Friends connect to the VPN first, then join the game.

    Ready to Launch Your Palworld World?
    >
    Our CloudCore Business plan is purpose-built for game servers like Palworld: 6 AMD EPYC vCPU, 16 GB RAM, 200 GB NVMe SSD, and unmetered bandwidth at a flat EUR 29.99/month.
    >
    - 32-player capacity out of the box
    - NVMe storage for fast save writes and instant world loads
    - Unmetered bandwidth for public servers
    - Root SSH, full firewall control, and your choice of Ubuntu 24.04
    - Scale up to 32 GB RAM in-place without rebuilding
    >
    Deploy a CloudCore Business VPS -- spin up in under 60 seconds and have your Palworld world running before your friends finish downloading the patch.

    Was this article helpful?

    ← Back to Install GuidesBrowse all categories →

    Still have questions?

    Contact Support →Submit a Ticket