To run a Palworld dedicated server on Linux, install SteamCMD, download app 2394010, open UDP port 8211, copy DefaultPalWorldSettings.ini to Pal/Saved/Config/LinuxServer/PalWorldSettings.ini and run PalServer.sh as its own user under systemd. Size the memory before anything else: Pocketpair’s requirements page asks for 16 GB of RAM and recommends 32 GB or more, and warns that 8 GB boots but crashes out of memory more often.
This guide does the whole setup on Ubuntu 24.04 or Debian 12 and 13: a clean shutdown that saves the world, backups, the firewall, and an honest look at which plan size you need.
| Item | Value |
|---|---|
| SteamCMD app ID | 2394010 |
| Game port | UDP 8211, changed with -port= |
| Community server list | -publiclobby; open UDP 27015 too if the process binds it |
| REST API | TCP 8212, local use only |
| Config file | Pal/Saved/Config/LinuxServer/PalWorldSettings.ini |
| World saves | Pal/Saved/SaveGames/0/<server id>/ |
| Memory (Pocketpair) | 16 GB required, 32 GB or more recommended |
| CPU (Pocketpair) | 4 cores or more |
How much RAM does a Palworld server need?
More than most survival games. Pocketpair’s official server docs list 16 GB, recommend 32 GB or more, and ask for an SSD because slow storage can corrupt saves. In practice the figure depends on what your world holds, not only on player count:
- Bases and working Pals drive memory and CPU. The settings
BaseCampWorkerMaxNumandBaseCampMaxNumInGuildare documented as raising processing load when increased, andPalSpawnNumRateaffects performance too. Leave them at their defaults until you have measured. - Usage tends to creep up over long uptimes. That is what admins report rather than something Pocketpair documents, but it is why many schedule a daily restart, which the systemd setup below turns into a one-line cron job.
- Running out shows as a restart loop. The kernel kills the server and systemd starts it again. Confirm with
journalctl -k | grep -i -E 'out of memory|oom-kill'and read why Linux kills your process.
A few gigabytes of swap space is a sensible safety net, but it only stops a crash: a world that lives in swap stutters. If memory keeps hitting the ceiling, lower ServerPlayerMaxNum or move to a bigger plan.
How do I install the Palworld server with SteamCMD?
Valve advises against running SteamCMD as root, so the server gets its own unprivileged account with /opt/palworld as its home. SteamCMD itself is a 32-bit program and needs lib32gcc-s1; the Palworld server is 64-bit.
- 1Install dependencies and create the user
Debian · Ubuntu sudo apt update sudo apt install -y curl ca-certificates lib32gcc-s1 nano sudo useradd --system --create-home --home-dir /opt/palworld --shell /usr/sbin/nologin palworld - 2Install SteamCMD from Valve's tarball
The tarball works the same on Ubuntu and Debian, so you skip enabling multiverse or non-free repositories:
Debian · Ubuntu sudo -u palworld -H mkdir -p /opt/palworld/steamcmd sudo -u palworld -H sh -c 'curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xz -C /opt/palworld/steamcmd' - 3Download the dedicated server
Set the install directory before logging in, as Valve recommends. The first run also updates SteamCMD itself, so it takes a while:
Debian · Ubuntu sudo -u palworld -H /opt/palworld/steamcmd/steamcmd.sh \ +force_install_dir /opt/palworld/server \ +login anonymous +app_update 2394010 validate +quit - 4Give the server Steam's 64-bit client library
Without it the server logs
.steam/sdk64/steamclient.so: cannot open shared object fileat start-up. Pocketpair’s older Linux guide called that harmless but showed how to fix it, and warned that fixing it on a world people already play sends them back to character creation. So do it now, before anyone joins. The library arrived with SteamCMD’s first run in step 3:Debian · Ubuntu sudo -u palworld -H mkdir -p /opt/palworld/.steam/sdk64 sudo -u palworld -H ln -sf /opt/palworld/steamcmd/linux64/steamclient.so /opt/palworld/.steam/sdk64/steamclient.so - 5Start it once to create the config folders
The
Pal/Saved/Config/LinuxServerdirectory only exists after the first start. Run the server in the foreground, wait until the output settles, then stop it with Ctrl+C:first start sudo -u palworld -H /opt/palworld/server/PalServer.sh # wait about a minute, then press Ctrl+C
Where is PalWorldSettings.ini and what should I change?
Pocketpair ships the defaults in DefaultPalWorldSettings.ini, but editing that file does nothing. Copy it into the config directory and edit the copy, with the server stopped:
cd /opt/palworld/server
sudo -u palworld cp DefaultPalWorldSettings.ini Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
sudo -u palworld nano Pal/Saved/Config/LinuxServer/PalWorldSettings.iniEvery setting sits on one long OptionSettings=(...) line under the [/Script/Pal.PalGameWorldSettings] header. Change values in place, keep the commas and quotes, and keep it on one line. In nano, Ctrl+W finds a key. These are the ones that matter for a first server:
| Key | Set it to | Why |
|---|---|---|
ServerName | Your server's name | Shown in the community list |
AdminPassword | A long random string | Unlocks admin commands and the REST API |
ServerPassword | A password, or empty | Leave empty only for a public server |
ServerPlayerMaxNum | Your real group size | Fewer slots, less memory pressure |
RESTAPIEnabled | True | Used below for saving and clean stops |
RESTAPIPort | 8212 | Keep the default; never expose it |
RCONEnabled | False | Pocketpair has deprecated RCON in favour of the REST API |
bIsUseBackupSaveData | True | Built-in rolling world backups, at some extra disk load |
CrossplayPlatforms | (Steam,Xbox,PS5,Mac) | The default; trim it to lock out platforms |
Check the values you rely on later before you save and close. If a key is missing from your copy, add it inside the parentheses, for example ,RESTAPIEnabled=True,RESTAPIPort=8212 just before the closing one; keys you leave out keep their defaults.
grep -o -E 'AdminPassword="[^"]*"|RESTAPIEnabled=[A-Za-z]+|RESTAPIPort=[0-9]+' \
/opt/palworld/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.iniWhich ports does a Palworld server need?
Only UDP 8211 for players joining by IP. Pocketpair lists no other inbound port. If you run a community server with -publiclobby, community setups also open UDP 27015, the Steam query port, so check what the process actually binds and open that. Allow SSH before you enable the firewall, or you lock yourself out:
sudo apt install -y ufw # preinstalled on Ubuntu
sudo ufw allow 22/tcp # your SSH port, first
sudo ufw allow 8211/udp comment 'Palworld'
# only for a community server, if ss shows the process on 27015:
# sudo ufw allow 27015/udp comment 'Palworld query'
sudo ufw enable
sudo ss -ulpn | grep -i pal # what the server really listens onHow do I run the Palworld server as a systemd service?
A service starts the server at boot, restarts it after a crash and updates it before each start. The important part is the stop: instead of letting systemd signal the process, the stop script asks the REST API to save the world and shut down, then waits for the server to exit.
sudo install -d -m 0750 -o palworld -g palworld /etc/palworld
echo 'the-same-AdminPassword-as-in-the-ini' | sudo tee /etc/palworld/admin-pass >/dev/null
sudo chown palworld:palworld /etc/palworld/admin-pass
sudo chmod 600 /etc/palworld/admin-passsudo tee /opt/palworld/stop.sh >/dev/null <<'EOF'
#!/bin/sh
# systemd calls this as: stop.sh <main PID>
PASS=$(cat /etc/palworld/admin-pass)
API=http://127.0.0.1:8212/v1/api
curl -fsS -m 30 -u "admin:$PASS" -X POST "$API/save" || true
if curl -fsS -m 10 -u "admin:$PASS" -H 'Content-Type: application/json' \
-d '{"waittime":10,"message":"Server restarting in 10 seconds"}' "$API/shutdown"; then
while kill -0 "$1" 2>/dev/null; do sleep 1; done
fi
EOF
sudo chmod 755 /opt/palworld/stop.sh[Unit]
Description=Palworld dedicated server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=palworld
Group=palworld
WorkingDirectory=/opt/palworld/server
# update before every start; the leading "-" lets a failed update fall through
ExecStartPre=-/opt/palworld/steamcmd/steamcmd.sh +force_install_dir /opt/palworld/server +login anonymous +app_update 2394010 +quit
# slots come from ServerPlayerMaxNum in the ini, so -players= is left out
ExecStart=/opt/palworld/server/PalServer.sh -port=8211
ExecStop=/opt/palworld/stop.sh $MAINPID
TimeoutStartSec=900
TimeoutStopSec=90
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now palworld
sudo journalctl -u palworld -f
# optional: restart every morning at 06:00 to reset memory use
(sudo crontab -l 2>/dev/null; echo "0 6 * * * /usr/bin/systemctl restart palworld") | sudo crontab -If the REST API is off or the password is wrong, the stop script falls through and systemd stops the process with a signal instead. Test it once: sudo systemctl restart palworld should log a save before the server exits. Older guides add -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS to every start line; Pocketpair’s docs now say that from version 1.0 on the server may perform better without them, so add them only if you measure a gain.
How do players join, and what about Xbox and PS5?
- Steam players: in the multiplayer menu, type
YOUR_IP:8211into the field below the server list and connect. - Xbox and PS5 players: they cannot join by IP. Pocketpair’s docs say console players need a community server, so add
-publiclobbytoExecStart, keep their platforms inCrossplayPlatforms, and they find you in the community server list. - Admin rights in game: open chat and type
/AdminPassword yourpassword, then/Save,/ShowPlayersand/KickPlayerwork.
How do I back up the Palworld world?
Everything that matters lives in Pal/Saved: the world under SaveGames/0/<server id>/, and the config, including GameUserSettings.ini, whose DedicatedServerName must match that folder name for the server to load it. With bIsUseBackupSaveData=True, the server writes rolling copies into a backup folder inside the save directory, at intervals from 30 seconds up to one day. Those sit on the same disk, so add an archive of your own that you can move off the machine:
sudo tee /opt/palworld/backup.sh >/dev/null <<'EOF'
#!/bin/sh
PASS=$(cat /etc/palworld/admin-pass)
DEST=/opt/palworld/backups
mkdir -p "$DEST"
# flush the world to disk; if the server is down, the files are already consistent
curl -fsS -m 30 -u "admin:$PASS" -X POST http://127.0.0.1:8212/v1/api/save \
|| echo "save request failed, copying files as they are"
sleep 5
tar -czf "$DEST/palworld-$(date +%F-%H%M).tar.gz" -C /opt/palworld/server/Pal/Saved SaveGames Config
# keep the newest 28 archives
ls -1t "$DEST"/palworld-*.tar.gz | tail -n +29 | xargs -r rm --
EOF
sudo chown palworld:palworld /opt/palworld/backup.sh
sudo chmod 750 /opt/palworld/backup.sh
(sudo crontab -u palworld -l 2>/dev/null; echo "15 */6 * * * /opt/palworld/backup.sh") | sudo crontab -u palworld -sudo systemctl stop palworld
cd /opt/palworld/server/Pal/Saved
# keep the current state, in case you need it after all
sudo mv SaveGames SaveGames.before-restore
sudo mv Config Config.before-restore
sudo -u palworld tar -xzf /opt/palworld/backups/palworld-2027-01-05-0615.tar.gz -C .
sudo systemctl start palworldArchives on the same disk do not survive a lost disk, so copy them elsewhere with rsync. Before a big game update, a backup of the whole VPS from your provider’s panel is the quicker way back; at VMHeaven that is the Backups tab of the server.
Why can’t I connect, or why does the server crash?
Most likely causes first:
| Symptom | Confirm with | Fix |
|---|---|---|
| Connection timed out | sudo ss -ulpn | grep -i pal | No 8211 in the output: the server is not up. Present: open UDP 8211 in ufw and in any panel firewall |
| Server restarts every few hours | journalctl -k | grep -i oom | Out of memory: fewer slots, a daily restart, swap as a buffer, or more RAM |
| Players can't join after a game patch | journalctl -u palworld | grep 2394010 | Client and server versions differ: restart the service so ExecStartPre updates it |
| Not in the community list | Check ExecStart for -publiclobby | Add the flag; open UDP 27015 if the process binds it |
| Clean stop does not save | journalctl -u palworld -n 50 | REST API disabled or password mismatch between the ini and /etc/palworld/admin-pass |
Which VPS plan fits a Palworld server?
Pick by memory first, then by CPU. Our Hi-CPU KVM line runs on AMD EPYC with ECC memory and puts fewer vCores on each plan, aimed at software whose main loop leans on one or two threads, as game servers do. Our Standard KVM line (Intel, DDR4 ECC) puts at least twice the RAM on each price step, which matters more for a game this memory hungry:
| Group | Hi-CPU KVM | Standard KVM | Notes |
|---|---|---|---|
| Testing, 2–4 friends | HI-CPU 4: 4 vCores, 8 GB | STANDARD KVM 2: 4 vCores, 8 GB | Below the official 16 GB: it boots, but out-of-memory crashes are likelier |
| Regular group up to ~10 | HI-CPU 6: 8 vCores, 16 GB | STANDARD KVM 4: 8 vCores, 16 GB | Meets the official 16 GB requirement |
| Large world, many bases | HI-CPU 8–9: up to 28 GB | STANDARD KVM 6: 16 vCores, 32 GB | Only Standard reaches the 32 GB recommendation |
vCores on both lines are shared virtual cores, not reserved physical ones. Every plan sits behind always-on DDoS filtering, which matters for a public server, and you can pay by card, PayPal or crypto (Bitcoin, Ethereum, USDT, Litecoin, Monero and more). Stock differs between Amsterdam and Frankfurt, so check the product page for your location. If you have run a Minecraft server before, the shape is the same; Palworld simply needs more memory. To size Palworld against eight other games on both lines, see gaming VPS.
Frequently asked
How much RAM does a Palworld dedicated server need?
Pocketpair's requirements list 16 GB of RAM and recommend 32 GB or more; 8 GB starts but makes out-of-memory crashes more likely. Memory grows with bases, working Pals and uptime, so size for your world and schedule a daily restart.
Which port does a Palworld dedicated server use?
UDP 8211 by default, changed with the -port= launch argument. Players joining by IP need only that port. Keep the REST API port 8212 and the RCON port closed to the internet.
Can Xbox and PS5 players join a Palworld dedicated server?
Yes, but only through a community server. Start the server with -publiclobby and keep their platforms in CrossplayPlatforms, which allows Steam, Xbox, PS5 and Mac by default. Console players then find it in the in-game community server list.