Guides

Palworld dedicated server on Linux: SteamCMD, port 8211, settings and RAM

Set up a Palworld dedicated server on Ubuntu or Debian: SteamCMD app 2394010, UDP 8211, PalWorldSettings.ini, systemd, backups and honest RAM sizing.

Published ~10 min read

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.

ItemValue
SteamCMD app ID2394010
Game portUDP 8211, changed with -port=
Community server list-publiclobby; open UDP 27015 too if the process binds it
REST APITCP 8212, local use only
Config filePal/Saved/Config/LinuxServer/PalWorldSettings.ini
World savesPal/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 BaseCampWorkerMaxNum and BaseCampMaxNumInGuild are documented as raising processing load when increased, and PalSpawnNumRate affects 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.

  1. 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
  2. 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'
  3. 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
  4. 4Give the server Steam's 64-bit client library

    Without it the server logs .steam/sdk64/steamclient.so: cannot open shared object file at 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
  5. 5Start it once to create the config folders

    The Pal/Saved/Config/LinuxServer directory 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:

Debian · Ubuntu
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.ini

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

KeySet it toWhy
ServerNameYour server's nameShown in the community list
AdminPasswordA long random stringUnlocks admin commands and the REST API
ServerPasswordA password, or emptyLeave empty only for a public server
ServerPlayerMaxNumYour real group sizeFewer slots, less memory pressure
RESTAPIEnabledTrueUsed below for saving and clean stops
RESTAPIPort8212Keep the default; never expose it
RCONEnabledFalsePocketpair has deprecated RCON in favour of the REST API
bIsUseBackupSaveDataTrueBuilt-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.

verify the edit
grep -o -E 'AdminPassword="[^"]*"|RESTAPIEnabled=[A-Za-z]+|RESTAPIPort=[0-9]+' \
  /opt/palworld/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

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

ufw · Debian · Ubuntu
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 on

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

store the admin password for the scripts
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-pass
/opt/palworld/stop.sh
sudo 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
/etc/systemd/system/palworld.service
[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.target
enable, watch, restart daily
sudo 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:8211 into 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 -publiclobby to ExecStart, keep their platforms in CrossplayPlatforms, and they find you in the community server list.
  • Admin rights in game: open chat and type /AdminPassword yourpassword, then /Save, /ShowPlayers and /KickPlayer work.

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:

/opt/palworld/backup.sh
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 -
restore an archive
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 palworld

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

SymptomConfirm withFix
Connection timed outsudo ss -ulpn | grep -i palNo 8211 in the output: the server is not up. Present: open UDP 8211 in ufw and in any panel firewall
Server restarts every few hoursjournalctl -k | grep -i oomOut of memory: fewer slots, a daily restart, swap as a buffer, or more RAM
Players can't join after a game patchjournalctl -u palworld | grep 2394010Client and server versions differ: restart the service so ExecStartPre updates it
Not in the community listCheck ExecStart for -publiclobbyAdd the flag; open UDP 27015 if the process binds it
Clean stop does not savejournalctl -u palworld -n 50REST 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:

GroupHi-CPU KVMStandard KVMNotes
Testing, 2–4 friendsHI-CPU 4: 4 vCores, 8 GBSTANDARD KVM 2: 4 vCores, 8 GBBelow the official 16 GB: it boots, but out-of-memory crashes are likelier
Regular group up to ~10HI-CPU 6: 8 vCores, 16 GBSTANDARD KVM 4: 8 vCores, 16 GBMeets the official 16 GB requirement
Large world, many basesHI-CPU 8–9: up to 28 GBSTANDARD KVM 6: 16 vCores, 32 GBOnly 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.

Related articles

All guides