Palworld is a creature-collecting survival game from Pocketpair, and its dedicated server runs natively on Linux. A dedicated server keeps the world online when the host is not playing and lets up to 32 players join.

In this tutorial you will install the Palworld dedicated server on Ubuntu 24.04 with SteamCMD, configure it through PalWorldSettings.ini, run it as a systemd service under its own user, open the game port and use the built-in REST API to save the world and list players.

Prerequisites

To follow this tutorial, you will need:

  • A server running Ubuntu 24.04, for example a CubePath VPS. Pocketpair recommends 4 CPU cores and 16 GB of RAM; 8 GB works for a few players, but memory use grows the longer the server runs.
  • At least 20 GB of free disk space.
  • A non-root user with sudo privileges and UFW enabled.
  • Palworld on Steam or Xbox/PC Game Pass to connect to the server.

Step 1 - Installing SteamCMD

SteamCMD is Valve's command-line client for downloading dedicated servers. Ubuntu ships it in the multiverse repository, and it needs 32-bit libraries, so enable both:

sudo dpkg --add-architecture i386
sudo add-apt-repository -y multiverse
sudo apt update

Install SteamCMD:

sudo apt install -y steamcmd

During the installation you are asked to accept the Steam license. Use the arrow keys and Enter to accept it. The binary is installed as /usr/games/steamcmd.

Step 2 - Creating a dedicated user

Run the server under an unprivileged account so a compromised game process cannot touch the rest of the system. The account has no password; you access it from your admin user with sudo:

sudo adduser --disabled-password --gecos "" palworld
sudo -iu palworld
whoami
palworld

Step 3 - Downloading the Palworld server

As the palworld user, download the dedicated server (Steam app ID 2394010) into ~/server:

/usr/games/steamcmd +force_install_dir /home/palworld/server +login anonymous +app_update 2394010 validate +quit

When the download completes you should see:

Success! App '2394010' fully installed.

The server also needs the Steam client library steamclient.so in ~/.steam/sdk64/. Without it, it prints errors about steamclient.so and does not register with Steam. Download the Steamworks SDK redistributable (app ID 1007) and copy the library into place:

/usr/games/steamcmd +force_install_dir /home/palworld/steamworks-sdk +login anonymous +app_update 1007 +quit
mkdir -p ~/.steam/sdk64
cp ~/steamworks-sdk/linux64/steamclient.so ~/.steam/sdk64/

Step 4 - Generating the configuration files

Palworld creates its configuration directory the first time it runs. Start the server in the foreground once:

cd ~/server
./PalServer.sh

Wait until the log stops scrolling (about 30 seconds), then press Ctrl+c to stop it. Check that the configuration directory now exists:

ls ~/server/Pal/Saved/Config/LinuxServer/
Engine.ini  Game.ini  GameUserSettings.ini  PalWorldSettings.ini

The generated PalWorldSettings.ini is empty. The server reads its settings from this file, and the full list of options with default values is in DefaultPalWorldSettings.ini in the server root. Copy it over:

cp ~/server/DefaultPalWorldSettings.ini ~/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

Step 5 - Configuring the server

Open the settings file:

nano ~/server/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

All settings are on a single long line inside OptionSettings=(...), separated by commas. Find and change the following keys, keeping the rest of the line intact:

KeyExample valuePurpose
ServerName"Your Server Name"Name shown in the server list
ServerDescription"Your description"Description shown in the server list
ServerPassword"your_server_password"Password players need to join; leave "" for an open server
AdminPassword"your_admin_password"Password for in-game admin commands and the REST API
ServerPlayerMaxNum16Maximum players (up to 32)
PublicPort8211Game port
RESTAPIEnabledTrueEnables the local management API used in Step 8
RESTAPIPort8212REST API port

For example, the edited parts of the line look like this:

OptionSettings=(Difficulty=None,...,ServerPlayerMaxNum=16,ServerName="Your Server Name",ServerDescription="Your description",AdminPassword="your_admin_password",ServerPassword="your_server_password",PublicPort=8211,...,RESTAPIEnabled=True,RESTAPIPort=8212,...)

The ... stand for the settings you leave unchanged. Do not break the line into several lines: the server stops reading it. Use strong, different values for both passwords. Gameplay rates such as ExpRate, PalCaptureRate and DeathPenalty are in the same line.

Palworld only reads this file on startup and must be stopped while you edit it, otherwise your changes can be lost. Type exit to return to your admin user.

Step 6 - Opening the firewall port

Players connect over UDP port 8211. Open it:

sudo ufw allow 8211/udp
sudo ufw status

Do not open the REST API port (8212). It uses the admin password over plain HTTP and is only meant to be used from the server itself. With UFW's default policy of denying incoming traffic, it stays reachable only locally.

Step 7 - Creating the systemd service

A systemd unit starts the server at boot, restarts it if it crashes and sends its output to the journal. Create the file:

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

Paste the following:

[Unit]
Description=Palworld dedicated server
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=palworld
Group=palworld
WorkingDirectory=/home/palworld/server
ExecStart=/home/palworld/server/PalServer.sh -port=8211 -players=16 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
Restart=on-failure
RestartSec=30
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

The -useperfthreads, -NoAsyncLoadingThread and -UseMultithreadForDS flags let the server use several CPU cores, which Pocketpair recommends for multi-core machines. To list the server in the in-game community server browser, add -publiclobby to the end of the ExecStart line; without it, players join by IP address.

Reload systemd and start the server:

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

The status should read active (running). Check that the game port is open:

sudo ss -ulnp | grep 8211
UNCONN 0      0            0.0.0.0:8211       0.0.0.0:*    users:(("PalServer-Linux",pid=3810,fd=41))

To join, open Palworld, choose Join Multiplayer Game, enter your_server_ip:8211 in the address box at the bottom and connect. Enter the server password when asked.

Step 8 - Managing the server with the REST API

With RESTAPIEnabled=True, the server answers HTTP requests on port 8212. Authentication uses the user name admin and your AdminPassword. Check the server information:

curl -s -u admin:your_admin_password http://127.0.0.1:8212/v1/api/info
{"version":"v0.x.x","servername":"Your Server Name","description":"Your description","worldguid":"..."}

List connected players:

curl -s -u admin:your_admin_password http://127.0.0.1:8212/v1/api/players

Force a save of the world, which is useful before a restart or backup:

curl -s -u admin:your_admin_password -X POST http://127.0.0.1:8212/v1/api/save

Send an announcement to everyone on the server:

curl -s -u admin:your_admin_password -H 'Content-Type: application/json' -d '{"message":"Restarting in 5 minutes"}' http://127.0.0.1:8212/v1/api/announce

The API also exposes endpoints to kick, ban and unban players and to shut the server down; see the REST API section of the official Palworld server documentation for the full list.

Step 9 - Scheduling restarts and backups

Memory use of the Palworld server grows over time, so a daily restart during quiet hours keeps it stable. Your world is stored in ~/server/Pal/Saved/SaveGames/, and a copy of that directory plus the configuration is all you need to restore the server.

Create a backup directory:

sudo -u palworld mkdir -p /home/palworld/backups

Open root's crontab, since restarting a systemd service requires root:

sudo crontab -e

Add these lines. They save the world at 04:55, restart the server at 05:00, back up the saves at 05:05 and remove backups older than 7 days:

55 4 * * * curl -s -u admin:your_admin_password -X POST http://127.0.0.1:8212/v1/api/save
0 5 * * * systemctl restart palworld
5 5 * * * tar -czf /home/palworld/backups/palworld-$(date +\%F).tar.gz -C /home/palworld/server/Pal Saved
30 5 * * * find /home/palworld/backups -name 'palworld-*.tar.gz' -mtime +7 -delete

The % characters are escaped because cron treats a bare % as a newline. List the jobs to confirm they are installed:

sudo crontab -l

To restore a backup, stop the service, extract the archive into /home/palworld/server/Pal/ with tar -xzf, make sure the files belong to the palworld user with sudo chown -R palworld:palworld /home/palworld/server/Pal/Saved, and start the service again.

Updating the server

When Pocketpair releases an update, clients cannot join an older server. Stop the service, update with SteamCMD and start it again:

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

Updates do not overwrite PalWorldSettings.ini or your saves. After a major update, compare your file with the new DefaultPalWorldSettings.ini to see whether new options were added.

Troubleshooting

The log shows steamclient.so: cannot open shared object file. The Steam client library is missing. Repeat the last part of Step 3 as the palworld user.

Settings changes have no effect. The file was edited while the server was running, or the OptionSettings line was broken across several lines. Stop the service, fix the file and start it again.

Players cannot connect. Check that UFW allows 8211/udp, that the server is listening with sudo ss -ulnp | grep 8211, and that the client and server versions match.

The server is killed after running for a while. Check sudo journalctl -k | grep -i "out of memory". Lower ServerPlayerMaxNum, keep the daily restart, or move to a plan with more RAM.

Conclusion

You now have a Palworld dedicated server running on Ubuntu 24.04 as a systemd service, configured through PalWorldSettings.ini, with a REST API for administration, a daily restart and automatic backups.

As next steps, tune the gameplay rates in PalWorldSettings.ini to suit your group, add -publiclobby if you want to appear in the community browser, and copy your backups to another server or to object storage.