All tutorials
12 min read

How to Host a Palworld Dedicated Server on Ubuntu 24.04

Host a Palworld dedicated server on Ubuntu 24.04 with SteamCMD and systemd: open UDP port 8211, set PalWorldSettings.ini, and add daily restarts and backups.

TL;DR:

  • Install SteamCMD from Ubuntu's multiverse repository, download Steam app 2394010 as an unprivileged user, and run the server as a systemd service.
  • Checked against Palworld v1.0.5 (released 2026-09-15). The Linux server files take about 4.9 GB on disk.
  • Pocketpair recommends 4 or more CPU cores and 16 GB RAM. 8 GB boots, but the official guide says it raises the risk of out-of-memory crashes.
  • Players connect on UDP port 8211. RCON and the REST API stay off and closed to the internet.
  • Crossplay with Steam, Xbox, PS5 and Mac is on by default. Xbox and PS5 players join through the community server list.
  • The server tool downloads free with an anonymous SteamCMD login.

Applies to: Ubuntu 24.04 LTS · Palworld Dedicated Server v1.0.5 · checked October 2026

A Palworld dedicated server is Pocketpair's free server program that hosts a Palworld world without a game client running, so players join by IP address and port while the host is offline. This tutorial installs it on Ubuntu 24.04 with SteamCMD, runs it under systemd, opens UDP port 8211 in UFW, and covers PalWorldSettings.ini, crossplay, daily restarts, backups and updates. A VPS keeps the world online when your own PC is off.

Palworld dedicated server requirements

Pocketpair's requirements page lists these figures for v1.0:

ResourceOfficial guidance
CPU4 cores or more (recommended)
RAM16 GB. 32 GB is recommended for larger servers. 8 GB boots but increases the chance of out-of-memory crashes
StorageFast SSD. Slow storage may corrupt save data. The Linux server files take about 4.9 GB
NetworkUDP port 8211 (default, changeable)
OS64-bit Linux (Ubuntu, AlmaLinux) or 64-bit Windows

Pocketpair does not publish RAM figures by player count. The configuration reference names the settings that raise server load: BaseCampMaxNumInGuild, BaseCampWorkerMaxNum and PalSpawnNumRate. The Memory: line in systemctl status palworld shows what your world uses after a long session.

Pocketpair's mod guide says server-side mods work only on the Windows edition of the dedicated server.

Prerequisites

  • A VPS running Ubuntu 24.04 LTS with at least 4 vCPU and 16 GB RAM, with your SSH public key added at deploy. Arct Cloud plans with 8 vCPU and 16 GB RAM are cvm.xlarge, vm.medium and the High Performance hvm.medium.
  • An SSH key pair. See How to Generate an SSH Key on Windows, macOS, and Linux.
  • A non-root user with sudo privileges that logs in with your SSH key. The commands below create one.
  • A copy of Palworld on Steam, Xbox, PS5, Mac or the Microsoft Store to connect with.

On a new server, log in as root and create the sudo user. The rsync line copies root's authorized SSH key to the new account, because the key added at deploy belongs to root:

adduser deploy
usermod -aG sudo deploy
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy

Open a second terminal and confirm ssh [email protected] works before you log out as root. Replace 203.0.113.10 with your server's public IP address.

The steps also apply to Ubuntu 26.04 LTS: its multiverse repository has the same steamcmd package, and the runtime libraries keep their package names.

Commands run as the sudo user. Replace values written in capitals, such as YOUR_SERVER_NAME, with your own.

Step 1: Install SteamCMD and the runtime libraries

SteamCMD is Valve's command-line Steam client. Ubuntu ships it as a 32-bit package in the multiverse repository, so enable multiverse and the i386 architecture first:

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update

The package asks you to accept Valve's Steam License Agreement, which incorporates the Steam Subscriber Agreement. Read it, then record your answer so the install runs without a dialog:

echo steam steam/question select "I AGREE" | sudo debconf-set-selections
echo steam steam/license note '' | sudo debconf-set-selections

Install SteamCMD and the runtime libraries that Pocketpair's official Docker image adds to its Ubuntu 24.04 base:

sudo apt install -y steamcmd libatomic1 libasound2t64 libpulse0 libx11-6 libgcc-s1

Step 2: Enable UFW and allow SSH

Allow SSH before you enable UFW, or UFW blocks your next SSH login:

sudo ufw allow OpenSSH
sudo ufw enable

Type y when UFW asks to confirm. UFW now denies other incoming traffic, so the game port stays closed until Step 8, after the join password is set.

Step 3: Create a system user for the server

Run the server and SteamCMD as an unprivileged service user, so the game process has no root access:

sudo useradd --system --create-home --home-dir /home/palworld --shell /usr/sbin/nologin palworld

Step 4: Download the Palworld dedicated server for Linux

App ID 2394010 is the Palworld Dedicated Server tool. It downloads with an anonymous login, so no Steam account is needed:

sudo -u palworld -H /usr/games/steamcmd \
  +force_install_dir /home/palworld/palserver \
  +login anonymous \
  +app_update 2394010 validate \
  +quit

+force_install_dir must come before +login. It pins the server to /home/palworld/palserver; Ubuntu's steamcmd package keeps its own data in ~/.local/share/Steam. The full /usr/games/steamcmd path is needed because sudo's default secure_path on Ubuntu does not include /usr/games.

The output ends similar to this:

...
Success! App '2394010' fully installed.

The download includes linux64/steamclient.so. In v1.0.5, PalServer.sh copies that file into place when it is missing, so no ~/.steam/sdk64 link is needed.

Step 5: Create the backup script

The service runs this script before every start, while the world is not running, so each archive holds a consistent save. Create /usr/local/bin/palworld-backup:

sudo tee /usr/local/bin/palworld-backup > /dev/null <<'EOF'
#!/bin/sh
set -eu
SAVED=/home/palworld/palserver/Pal/Saved
DEST=/home/palworld/backups
[ -d "$SAVED/SaveGames" ] || exit 0
mkdir -p "$DEST"
find "$DEST" -name 'palworld-*.tar.gz' -mmin -10 | grep -q . && exit 0
tar -czf "$DEST/palworld-$(date +%Y%m%d-%H%M%S).tar.gz" --exclude=backup -C "$SAVED" SaveGames Config
find "$DEST" -name 'palworld-*.tar.gz' -mtime +14 -delete
EOF
sudo chmod 755 /usr/local/bin/palworld-backup

The script exits without an archive on the first start, before a world exists, skips the archive when one is less than 10 minutes old, and keeps 14 days of archives. The 10-minute check stops a crash loop from filling the disk with archives. --exclude=backup skips the in-game backup folder that the bIsUseBackupSaveData setting writes inside the save directory.

Step 6: Run the server as a systemd service

Create /etc/systemd/system/palworld.service:

sudo nano /etc/systemd/system/palworld.service

Paste this unit, then save with Ctrl+O and exit with Ctrl+X:

[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=palworld
Group=palworld
WorkingDirectory=/home/palworld/palserver
ExecStartPre=/usr/local/bin/palworld-backup
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/palworld/palserver +login anonymous +app_update 2394010 +quit
ExecStart=/home/palworld/palserver/PalServer.sh -port=8211
Restart=always
RestartSec=10
TimeoutStartSec=1800
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

What the unit does:

  • Each start runs the backup, then a SteamCMD update. The - before the update lets the server start when Steam is unreachable.
  • Restart=always brings the server back after a crash or an in-game /Shutdown.
  • TimeoutStartSec=1800 gives large game updates 30 minutes to download.
  • Pocketpair's arguments page says that from v1.0, leaving -useperfthreads, -NoAsyncLoadingThread and -UseMultithreadForDS unset may improve performance, so the unit omits them.

Start the server and enable it at boot:

sudo systemctl daemon-reload
sudo systemctl enable --now palworld
sudo systemctl status palworld --no-pager

The Loaded: line ends in enabled and the Active: line reads active (running). Read the server log with journalctl -u palworld -f. On the first start, the log includes The file has been successfully copied for steamclient.so.

Step 7: Configure PalWorldSettings.ini

The first start creates Pal/Saved/Config/LinuxServer. Stop the server, then copy the default settings into the file the server reads. Edits to DefaultPalWorldSettings.ini have no effect.

sudo systemctl stop palworld
sudo -u palworld cp /home/palworld/palserver/DefaultPalWorldSettings.ini \
  /home/palworld/palserver/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

All settings sit on one OptionSettings=(...) line. Set the server name, the join password, the admin password and the player limit:

sudo -u palworld sed -i \
  -e 's/ServerName="[^"]*"/ServerName="YOUR_SERVER_NAME"/' \
  -e 's/ServerPassword="[^"]*"/ServerPassword="YOUR_JOIN_PASSWORD"/' \
  -e 's/AdminPassword="[^"]*"/AdminPassword="YOUR_ADMIN_PASSWORD"/' \
  -e 's/ServerPlayerMaxNum=[0-9]*/ServerPlayerMaxNum=16/' \
  /home/palworld/palserver/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

Use letters and numbers in the passwords, because / and & break the sed expression. Check the result:

grep -oE '(ServerPlayerMaxNum|ServerName|AdminPassword|ServerPassword|PublicPort|RCONEnabled|RESTAPIEnabled)=[^,]*' \
  /home/palworld/palserver/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

The output looks similar to this:

ServerPlayerMaxNum=16
ServerName="YOUR_SERVER_NAME"
AdminPassword="YOUR_ADMIN_PASSWORD"
ServerPassword="YOUR_JOIN_PASSWORD"
PublicPort=8211
RCONEnabled=False
RESTAPIEnabled=False

Other settings and their v1.0.5 defaults:

SettingDefaultEffect
CrossplayPlatforms(Steam,Xbox,PS5,Mac)Platforms allowed to connect
DeathPenaltyItemWhat players drop on death: None, Item, ItemAndEquipment or All
bIsUseBackupSaveDataTrueIn-game world backups in the save folder; adds disk load
RCONEnabled / RESTAPIEnabledFalseRemote admin APIs on ports 25575 and 8212

Leave RCON and the REST API off. Pocketpair marks RCON as deprecated and says neither API is designed for direct exposure to the internet. If you turn on the REST API, keep port 8212 closed in UFW and reach it over an SSH tunnel.

Start the server with the new settings:

sudo systemctl start palworld

Step 8: Open UDP port 8211 in UFW

Open the game port once the join password is set. Palworld's game traffic uses UDP 8211, and Pocketpair's Docker example publishes no TCP port:

sudo ufw allow 8211/udp
sudo ufw status

The output looks similar to this:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8211/udp                   ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8211/udp (v6)              ALLOW       Anywhere (v6)

If your provider runs a network firewall in front of the server, allow UDP 8211 there too.

Step 9: Schedule a daily restart

A daily restart runs the backup and the SteamCMD update from the unit and starts the process with fresh memory. Pocketpair's Docker guide tells admins to match the server version to the game version.

Create the restart service:

sudo nano /etc/systemd/system/palworld-restart.service

Paste this unit, then save and exit:

[Unit]
Description=Restart the Palworld server

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart palworld.service

Create the timer:

sudo nano /etc/systemd/system/palworld-restart.timer

Paste this unit, then save and exit:

[Unit]
Description=Restart the Palworld server daily

[Timer]
OnCalendar=*-*-* 05:00:00

[Install]
WantedBy=timers.target

Enable the timer and confirm the next run:

sudo systemctl daemon-reload
sudo systemctl enable --now palworld-restart.timer
systemctl list-timers palworld-restart.timer

The timer uses the server's time zone. Check it with timedatectl. The timed restart disconnects players without a warning, so pick an hour when the server is empty. To restart by hand with a warning, an admin types /Shutdown 60 Restarting in game chat, and systemd starts the server again.

Step 10: Connect and verify the server

Confirm the server listens on UDP 8211:

sudo ss -ulpn | grep 8211

The output lists a UDP socket on port 8211 owned by the PalServer-Linux process. If the command prints nothing, check journalctl -u palworld for errors.

In Palworld, choose Join Multiplayer Game, enter 203.0.113.10:8211 in the field below the server list, and connect. Replace 203.0.113.10 with your server's public IPv4 address and enter the join password.

To get admin rights, press Enter in game and type /AdminPassword YOUR_ADMIN_PASSWORD. Useful commands: /ShowPlayers, /Save, /KickPlayer <SteamID>, /BanPlayer <SteamID> and /Broadcast <message>.

Let Xbox and PS5 players join

Crossplay is on by default for Steam, Xbox Series, the Microsoft Store PC version, Mac and PS5. Pocketpair's guide says Xbox and PS5 players need a community server, which lists the world in the in-game community server list. The -publiclobby argument turns the server into one. Open the unit:

sudo nano /etc/systemd/system/palworld.service

Change the ExecStart line to:

ExecStart=/home/palworld/palserver/PalServer.sh -port=8211 -publiclobby

Apply the change:

sudo systemctl daemon-reload
sudo systemctl restart palworld

A community server appears in the public list, so keep ServerPassword set for a private world. If the listing shows the wrong address, add -publicip=203.0.113.10 with your server's IP. To allow Steam players only, set CrossplayPlatforms=(Steam).

Update the Palworld server

Every restart checks Steam for a new build, so sudo systemctl restart palworld applies an update. To verify every file as well, stop the server and run the download with validate:

sudo systemctl stop palworld
sudo -u palworld -H /usr/games/steamcmd \
  +force_install_dir /home/palworld/palserver \
  +login anonymous \
  +app_update 2394010 validate \
  +quit
sudo systemctl start palworld

The start runs the backup script first.

Back up and restore the world

The world lives in /home/palworld/palserver/Pal/Saved/SaveGames and the settings in Pal/Saved/Config/LinuxServer. List the archives:

sudo ls -lh /home/palworld/backups

To restore one, stop the server, move the current save aside under a timestamped name and extract the archive, which also restores the settings. Replace YYYYMMDD-HHMMSS with the archive's timestamp:

sudo systemctl stop palworld
sudo -u palworld mv /home/palworld/palserver/Pal/Saved/SaveGames /home/palworld/palserver/Pal/Saved/SaveGames.old-$(date +%Y%m%d-%H%M%S)
sudo -u palworld tar -xzf /home/palworld/backups/palworld-YYYYMMDD-HHMMSS.tar.gz -C /home/palworld/palserver/Pal/Saved
sudo systemctl start palworld

These archives sit on the same disk as the world. For copies kept off the server, see VPS backups.

Troubleshoot common Palworld server errors

SymptomCauseFix
sudo: steamcmd: command not found/usr/games is not in sudo's pathCall /usr/games/steamcmd
Permission denied (publickey) for the sudo userRoot's SSH key was not copiedRun the rsync line from Prerequisites as root
Failed to copy the file for steamclient.so in the journalIncomplete downloadRun the Step 4 command again with validate
A process of this unit has been killed by the OOM killerServer ran out of RAMMove to 16 GB RAM or more, as Pocketpair recommends
Players time out on connectUDP 8211 blockedCheck sudo ufw status and any provider firewall
Xbox or PS5 players cannot find the serverNot a community serverAdd -publiclobby to ExecStart
Settings changes do nothingWrong file, or edited while runningEdit Pal/Saved/Config/LinuxServer/PalWorldSettings.ini with the server stopped

FAQ

Can you have a dedicated server on Palworld?

Yes. Pocketpair publishes a free dedicated server for Windows and Linux, and anyone can host one on a home PC or a VPS. Players join by IP address and port 8211, and the world stays online while the host player is offline.

Is a Palworld dedicated server free?

Yes. Pocketpair's dedicated server tool, Steam app 2394010, downloads free with an anonymous SteamCMD login. Players still need to own Palworld to connect.

How much RAM does a Palworld server need?

Pocketpair recommends 16 GB of RAM and 4 or more CPU cores, and 32 GB for larger servers. A server with 8 GB boots, but the official guide says it raises the risk of out-of-memory crashes.

Can Xbox players join a Palworld dedicated server?

Yes. Crossplay with Steam, Xbox, PS5 and Mac is on by default. Xbox and PS5 players join through the in-game community server list, so start the server with the -publiclobby argument and set a server password for a private world.

What port does a Palworld server use?

A Palworld server uses UDP port 8211 by default, and players need no TCP ports. Change it with the -port argument. RCON (25575) and the REST API (8212) are off by default, and Pocketpair advises against exposing them to the internet.

How do I find my Palworld dedicated server IP?

Use your VPS's public IPv4 address from the provider's dashboard. In Palworld, choose Join Multiplayer Game and enter the address with the port, such as 203.0.113.10:8211, in the field below the server list.

Next steps

High Performance plans run on AMD Ryzen 9 up to 5.7 GHz or AMD EPYC Genoa 9004 Series up to 4.3 GHz, with DDR5 RAM. Compare plans.

This work is licensed under CC BY-NC-SA 4.0.