By the end of this guide you'll have a Palworld dedicated server running on Linux, tuned for performance, locked down with an admin password and RCON, and set to back itself up so a bad crash doesn't wipe your world. This is written for anyone who wants a stable server for friends or a small community, even if you've never touched SteamCMD before. Palworld is heavier than most survival games, so we'll spend real time on memory and performance, not just the click-through setup.
What you'll need before you start
Palworld eats RAM. A two or three player world might idle around 6 to 8 GB, but the moment more people log in and pals start breeding and roaming, usage climbs fast. For anything past a handful of players, plan for 16 GB or more. The server is also single threaded for a lot of its work, so raw clock speed on the CPU matters more than core count. A modern CPU with good per core performance will carry a busy server better than an older chip with lots of slow cores.
Here's a rough sizing table from what we've seen running these:
| Players | RAM to allocate | Notes |
|---|---|---|
| 1 to 4 | 8 GB | Fine on a small box |
| 5 to 16 | 16 GB | The common sweet spot |
| 16 to 32 | 24 to 32 GB | Expect single thread limits |
You'll also need a Linux server (these steps use Ubuntu or Debian), root or sudo access, and a way to open a UDP port. The official server build is Linux native, so you don't need Proton or Wine.
Step 1: Install SteamCMD
SteamCMD is the command line tool that downloads and updates Steam game servers. First, install the 32 bit libraries it depends on, then grab SteamCMD itself. On a fresh Debian or Ubuntu box you usually have to enable the i386 architecture before the libraries are available.
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y software-properties-common lib32gcc-s1 ca-certificates
Now create a dedicated user so the server never runs as root. Running game servers as root is a habit worth dropping early.
sudo useradd -m -s /bin/bash palserver
sudo su - palserver
mkdir ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
That last command downloads SteamCMD and unpacks it into your home folder. You're now logged in as the palserver user, which is exactly where you want to be.
Step 2: Download the Palworld server files
The Palworld dedicated server has a Steam app id of 2394010. You'll point SteamCMD at that id and tell it where to install. Run this as the palserver user:
cd ~/steamcmd./steamcmd.sh +force_install_dir /home/palserver/palworld \
+login anonymous \
+app_update 2394010 validate \
+quit
The anonymous login works because the server build is free to pull. The download is a few GB, so give it a minute. When it finishes you'll see a line like Success! App '2394010' fully installed. The validate flag checks every file, which is handy after an update or a crash.
Step 3: First launch to generate the config
The server won't create its real settings file until you've run it once. So do a quick first launch, let it spin up, then stop it with Ctrl+C.
cd /home/palserver/palworld./PalServer.sh
Give it 20 to 30 seconds. Once you see it reach the running state, press Ctrl+C to shut it down. That first run copies a default settings file into place. Now copy that default into the live config location:
cp /home/palserver/palworld/DefaultPalWorldSettings.ini \
/home/palserver/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
The file at Pal/Saved/Config/LinuxServer/PalWorldSettings.ini is the one the server actually reads. The default in the root folder is just a template. Editing the template does nothing, which trips up a lot of first time hosts.
Step 4: Edit PalWorldSettings.ini
Open the live config in a text editor:
nano /home/palserver/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
You'll see one giant line that starts with OptionSettings=( and wraps a long list of key=value pairs in parentheses. It's all on a single line, which looks intimidating, but you only need to change a handful of values. Do not add line breaks inside that parenthesis block or the server will ignore the whole thing.
Here are the settings that actually matter, with sensible values:
OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=1.500000,PalCaptureRate=1.200000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,DeathPenalty=All,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,DropItemMaxNum=3000,BaseCampMaxNum=128,bIsMultiplay=False,bIsPvP=False,ServerPlayerMaxNum=16,ServerName="My Palworld Server",ServerDescription="Run by friends",AdminPassword="ChangeThisAdminPass",ServerPassword="",PublicPort=8211,RCONEnabled=True,RCONPort=25575)
A few of these are worth explaining in plain terms:
- ServerPlayerMaxNum is your player cap. Keep it honest. Setting 32 on an 8 GB box just invites crashes.
- ExpRate, PalCaptureRate and the damage rates are multipliers. 1.0 is vanilla. Bumping ExpRate to 1.5 or 2.0 is a friendly way to speed up grinding without breaking balance.
- DeathPenalty can be
None,Item,ItemAndEquipmentorAll. Pick based on how punishing you want death to be. - AdminPassword unlocks in game admin commands. Set a real one. You'll need it for RCON too.
- ServerPassword gates who can join. Leave it empty for an open server, or set one to keep it private.
- PublicPort is the UDP port players connect to. The default is
8211. - RCONEnabled and RCONPort turn on remote console access for admin commands from outside the game.
Save and exit (in nano that's Ctrl+O, Enter, then Ctrl+X).
Step 5: Set start parameters and performance flags
Palworld ships with a couple of flags that genuinely help under load. The two we always turn on are -useperfthreads and -NoAsyncLoadingThread, plus -UseMultithreadForDS. They push more work onto extra threads and smooth out the stutter you'd otherwise get during heavy moments. Make a small launch script so you're not retyping these every time.
nano /home/palserver/palworld/start.sh
Put this inside:
#!/bin/bash
cd /home/palserver/palworld./PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS -publicport=8211
Make it executable:
chmod +x /home/palserver/palworld/start.sh
You can launch with ./start.sh now. But a raw shell session dies when you log out. For a server that stays up, use a systemd service instead.
Step 6: Run it as a systemd service
A systemd unit keeps the server running after you disconnect, restarts it if it crashes, and starts it on boot. Switch back to a root shell and create the unit file:
sudo nano /etc/systemd/system/palworld.service
[Unit]
Description=Palworld Dedicated Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=palserver
WorkingDirectory=/home/palserver/palworld
ExecStartPre=/home/palserver/steamcmd/steamcmd.sh +force_install_dir /home/palserver/palworld +login anonymous +app_update 2394010 validate +quit
ExecStart=/home/palserver/palworld/start.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
The ExecStartPre line auto updates the server every time it starts, so you're always on the current build. Reload systemd, enable the service, and start it:
sudo systemctl daemon-reload
sudo systemctl enable palworld
sudo systemctl start palworld
sudo systemctl status palworld
The status command should show active (running). To watch the live log, use journalctl -u palworld -f.
Step 7: Open the firewall port
Palworld uses UDP port 8211. This is the single most common reason people can't connect. It's UDP, not TCP, so a TCP only rule will silently fail. If you use ufw:
sudo ufw allow 8211/udp
sudo ufw reload
If you're hosting at home behind a router, you'll also need to forward UDP 8211 to your server's local IP in the router settings. And if you enabled RCON, only open its port (25575) to yourself, never to the whole internet. The same goes for the query port if your provider requires one. On a managed host the panel usually assigns and opens the right ports for you, which saves the firewall dance entirely.
Step 8: Connect and use admin commands
In Palworld, go to Join Multiplayer (Dedicated Server), then add your server by IP and port, like 203.0.113.10:8211. Once you're in, open the chat and authenticate as admin with the password you set:
/AdminPassword ChangeThisAdminPass
Now you can run admin commands. A few you'll actually use:
/Shutdown 60 "Restarting in one minute"
/Broadcast Server maintenance soon
/ShowPlayers
/KickPlayer steam_64_id_here
/Save
The /Save command forces a write to disk, which is good to run before a planned restart. For RCON from outside the game, any standard RCON client works against your RCON port using the admin password.
Step 9: Back up your saves
Save corruption is a real risk in Palworld, especially after an out of memory crash. So treat backups as part of the setup, not an afterthought. The world data lives here:
/home/palserver/palworld/Pal/Saved/SaveGames/
Inside that folder is a numbered world directory. Back up the whole SaveGames tree. A simple nightly cron job does the trick. Edit the crontab for the palserver user:
crontab -e
Add a line that archives the saves every night at 4 am and keeps the last 7 days:
0 4 * * * tar -czf /home/palserver/backups/pal-$(date +\%Y\%m\%d).tar.gz -C /home/palserver/palworld/Pal/Saved SaveGames && find /home/palserver/backups -name "pal-*.tar.gz" -mtime +7 -delete
Create the backups folder first with mkdir -p /home/palserver/backups. For extra safety, run /Save in game before any manual backup so the latest state is on disk. Copy a recent archive off the server now and then too. A backup that only lives on the same machine isn't much of a backup.
Troubleshooting
Players can't connect
Nine times out of ten this is the port. Confirm UDP 8211 is open on the server firewall and forwarded on your router. From another machine you can test the UDP port with nc -zvu your.server.ip 8211. Also double check players are typing the port after the IP.
The server crashes with out of memory
Watch memory with free -h while players are on. If it's near the limit, lower ServerPlayerMaxNum, reduce BaseCampMaxNum, or move to a box with more RAM. Adding a swap file helps the server survive spikes instead of getting killed outright. Out of memory kills are the leading cause of corrupted saves, so this is worth fixing.
Lag and rubber banding with many players
Because much of Palworld's work is single threaded, a busy world stresses one CPU core hard. Make sure the perf flags are in your launch line. Trimming PalSpawnNumRate and capping base sizes reduces the simulation load. Sometimes the honest fix is fewer players or faster cores.
My config changes don't take effect
You almost certainly edited the wrong file. Only Pal/Saved/Config/LinuxServer/PalWorldSettings.ini is read by the server. Make sure your edits are inside the single OptionSettings=(...) line with no stray line breaks, then restart with sudo systemctl restart palworld.
A save looks corrupted
Stop the server, then restore your most recent good archive into the SaveGames folder. This is exactly why the nightly backup from Step 9 matters. Restore, start the service, and verify the world loads before letting players back in.
Wrapping up
You now have a Palworld server that installs and updates through SteamCMD, runs under systemd so it survives reboots and crashes, uses the performance flags that keep a busy world smooth, and backs itself up every night. The two things that will save you the most grief are sizing RAM honestly and never skipping backups. If you'd rather not manage the firewall, updates and systemd yourself, a managed panel like the one at Bytte.cloud handles the plumbing so you can focus on the game. Either way, set a real admin password, keep an eye on memory, and your friends will have a server that just stays up.



