← Blog

Faire tourner un serveur Palworld dédié : installation, ports et PalWorldSettings.ini

Par Benjamin D. · PDG

· Mis à jour le September 1, 2026 · Lecture 9 min

Contents

A Palworld dedicated server is a standalone binary that runs the world simulation outside your game client, so pals keep breeding, bases keep producing and the map keeps ticking even when nobody is connected. Understanding how it loads, where it writes its configuration and what it does to your RAM is what separates a stable world from one that stutters every evening.



How a Palworld dedicated server actually works

Palworld runs on Unreal Engine 5. The server build is a headless version of the same executable: no rendering, no audio, but the exact same simulation of pals, base pals, factories, guilds and player inventories. It is distributed on Steam as a separate app (ID 2394010) and is available for Windows and Linux, with the Linux build running through Proton-style compatibility on some distributions but officially supported as a native Linux binary.

If you would rather skip the machine maintenance entirely and drive everything from a web panel, you can look at Palworld server hosting and keep this guide as your configuration reference — the files and options described below are identical either way.

The directory layout you need to know

Once installed, three paths matter far more than the rest:

  • PalServer.sh / PalServer.exe — the launcher, where you pass command-line flags.
  • Pal/Saved/Config/LinuxServer/PalWorldSettings.ini (or WindowsServer) — the live configuration read at boot.
  • Pal/Saved/SaveGames/0/<WorldID>/ — the world itself: Level.sav, LevelMeta.sav, WorldOption.sav and the Players/ folder with one .sav per Steam ID.

Everything you back up lives in Pal/Saved. Everything you tune lives in one single line of PalWorldSettings.ini. Everything you break usually comes from editing that line while the process is still running.

Save format and world identity

The world folder name is a random hexadecimal ID generated at first boot. If you migrate a world between machines, you copy the whole folder and, if the ID changes, you must point the server at the right one with -publiclobby off and the correct WorldID preserved. The simplest migration is: stop both ends, copy Pal/Saved/SaveGames/0/ in full, keep the same folder name, start again.



Installing the Palworld dedicated server files with SteamCMD

SteamCMD is the only supported delivery method. On a Debian or Ubuntu machine, work under a non-root user — the game binary refuses to start as root on some builds and, more importantly, you do not want an internet-facing process owning your system.

Linux installation

sudo useradd -m -s /bin/bash palworld
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmd lib32gcc-s1 xdg-user-dirs

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

The Linux build looks for the Steam client library in a specific place. Without this symlink, the process starts and dies silently after a few seconds:

mkdir -p ~/.steam/sdk64
ln -s /usr/games/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
cd ~/palserver
./PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS \
               -port=8211 -players=16 -publicip=YOUR.PUBLIC.IP -publicport=8211

The three performance flags are not cosmetic. -useperfthreads and -UseMultithreadForDS spread Unreal's task graph over more worker threads, which measurably reduces tick spikes when several bases run pal workers at once. Let the process run for about a minute, then stop it with Ctrl+C: it has now generated the configuration tree you are about to edit.

Running it as a service

A bare terminal session dies with your SSH connection. Use systemd:

sudo tee /etc/systemd/system/palworld.service > /dev/null <<'EOF'
[Unit]
Description=Palworld Dedicated Server
After=network-online.target

[Service]
User=palworld
WorkingDirectory=/home/palworld/palserver
ExecStartPre=/usr/games/steamcmd +force_install_dir /home/palworld/palserver +login anonymous +app_update 2394010 validate +quit
ExecStart=/home/palworld/palserver/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
Restart=on-failure
RestartSec=10
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now palworld
journalctl -u palworld -f

TimeoutStopSec=60 matters: the world is flushed to disk on shutdown, and killing the process too early is the classic way to lose a few hours of base progress or corrupt Level.sav.



Editing PalWorldSettings.ini and opening UDP port 8211

This is where most Palworld dedicated server problems are born. The file Pal/Saved/Config/LinuxServer/PalWorldSettings.ini is empty or minimal after the first boot. The reference values live in DefaultPalWorldSettings.ini at the root of the installation. Copy the reference, then edit the copy:

cp ~/palserver/DefaultPalWorldSettings.ini \
   ~/palserver/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
nano ~/palserver/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

The one-line rule

The entire OptionSettings=(...) block must stay on a single physical line, with no line breaks, no spaces after commas and no trailing comma. If your editor wraps it visually that is fine; if it inserts a real newline, the parser silently falls back to defaults and every one of your tweaks disappears. When a change "does nothing", check for a stray newline before anything else.

Also: always stop the process before editing. The server rewrites the file on clean shutdown, so a live edit is overwritten the moment you restart.

Settings that actually change the experience

KeyDefaultWhat it does
ServerNameDefault Palworld ServerName shown in the community browser.
ServerPasswordemptyJoin password. Empty means anyone with the address gets in.
AdminPasswordemptyRequired for in-game admin commands and RCON. Set it, always.
PublicPort8211UDP port advertised to the community list.
ServerPlayerMaxNum32Slot count. Above 16 the CPU and RAM curve gets steep.
ExpRate1.0Experience multiplier for players and pals.
PalCaptureRate1.0Sphere capture probability multiplier.
DeathPenaltyAllNone / Item / ItemAndEquipment / All.
bIsPvPFalseEnables player versus player damage.
BaseCampMaxNumInGuild4Bases per guild — the single biggest driver of server tick cost.
bEnableFastTravelTrueDisable for hardcore worlds.
RCONEnabled / RCONPortFalse / 25575Remote console for scripted restarts and broadcasts.
RESTAPIEnabled / RESTAPIPortFalse / 8212HTTP admin API: player list, kick, ban, save, shutdown.

A trimmed example of what a working line looks like:

[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=None,ExpRate=1.500000,PalCaptureRate=1.500000,DeathPenalty=Item,bIsPvP=False,ServerPlayerMaxNum=16,ServerName="Fly-Serv Test World",ServerDescription="Private world",AdminPassword="ChangeThisNow",ServerPassword="",PublicPort=8211,RCONEnabled=True,RCONPort=25575,bUseAuth=True,BaseCampMaxNumInGuild=4)

The full reference list of keys is maintained on the official Palworld technical documentation, which is the only source worth trusting after a patch changes a default.

Port 8211 is UDP, not TCP

Palworld's transport is pure UDP. Forwarding TCP 8211 does nothing at all — this is the number one reason a world is reachable on LAN but invisible from outside. The ports to consider:

  • 8211/UDP — game traffic. Mandatory.
  • 27015/UDP — Steam query, only needed if you want the world listed in the community browser.
  • 25575/TCP — RCON, if enabled. Never expose it to the whole internet; restrict it by source IP.
  • 8212/TCP — REST API, same caution.
sudo ufw allow 8211/udp
sudo ufw allow 27015/udp
sudo ufw allow from 203.0.113.10 to any port 25575 proto tcp
sudo ufw enable
sudo ufw status numbered

On a home connection you also need the matching UDP forward on the router, pointing at the machine's LAN address, and your public IP must be reachable — behind CGNAT (common on 4G/5G and some fibre lines) no amount of forwarding will work. Test from outside your network:

nc -vzu YOUR.PUBLIC.IP 8211
ss -lnup | grep 8211

If ss shows the socket bound but the external test fails, the problem is upstream: router, ISP or a firewall rule, not the game.



RAM, CPU and keeping a Palworld dedicated server stable over weeks

This is the part people underestimate. A Palworld dedicated server is memory-hungry and heavily single-thread bound, and it grows over time rather than sitting at a flat baseline.

Realistic resource envelope

PopulationRAM to provideCPU
1–4 players, few bases12–16 GB4 modern cores, high clock
8–16 players16–24 GB4–6 cores, high clock
24–32 players, many guilds32 GB6–8 cores, high clock

Raw core count helps less than clock speed: the world tick is largely serialised, so a high-frequency Ryzen core will hold a smoother tick rate than a stack of slow cores. NVMe storage matters too — the periodic world save writes a multi-hundred-megabyte Level.sav, and on a mechanical disk that write is felt as a freeze by every connected player.

Memory growth and scheduled restarts

The build has a well-documented tendency to accumulate memory the longer it runs, especially with many base pals working. The practical answer is a scheduled restart every 6 to 12 hours, announced through RCON so nobody loses a boss fight:

# /etc/cron.d/palworld-restart
0 5,17 * * * palworld /usr/local/bin/pal-restart.sh
#!/bin/bash
# pal-restart.sh
RCON="/usr/local/bin/rcon -a 127.0.0.1:25575 -p $ADMIN_PASSWORD"
$RCON "Broadcast Restart_in_5_minutes"
sleep 240
$RCON "Broadcast Restart_in_60_seconds"
sleep 60
$RCON "Save"
sleep 5
$RCON "Shutdown 10 Restarting"

Note that Broadcast does not accept spaces — use underscores. Always call Save before Shutdown; the shutdown command does save, but an explicit flush costs nothing.

Backups that you can actually restore

Snapshot the save directory on a rotation, and test a restore at least once before you need it:

#!/bin/bash
SRC=/home/palworld/palserver/Pal/Saved
DEST=/home/palworld/backups
mkdir -p "$DEST"
tar -czf "$DEST/pal-$(date +%Y%m%d-%H%M).tar.gz" -C "$SRC" .
find "$DEST" -name 'pal-*.tar.gz' -mtime +7 -delete

A managed panel such as Pterodactyl handles this with automated snapshots and a file manager, which is why most community admins end up driving their world from a panel instead of a shell. If you run several worlds side by side — a Palworld map next to a Valheim server for example — a single panel with sub-users is far easier to delegate to your moderators than a pile of SSH keys.

Hardening checklist

  • Set a strong AdminPassword and never reuse it as ServerPassword.
  • Keep bUseAuth=True so Steam identities are validated.
  • Restrict RCON and the REST API to trusted source addresses only.
  • On the machine itself: SSH keys instead of passwords, fail2ban, and ufw default-deny inbound.
  • Update the game files with app_update 2394010 validate after every patch, and back up before updating.

Volumetric DDoS filtering is an infrastructure-level concern that sits in front of the machine; on Fly-Serv it is applied by default across All our game servers, so your only remaining job is the application-level hygiene above. More configuration walkthroughs are collected on the Fly-Serv blog.



Wrapping up

Get four things right and Palworld behaves: SteamCMD app 2394010 installed under an unprivileged user, PalWorldSettings.ini kept on one unbroken line, UDP 8211 genuinely open end to end, and enough memory with a restart schedule to absorb the growth. Everything else — capture rates, PvP, base limits — is tuning you can iterate on safely once the foundation holds.



FAQ

My world is reachable on LAN but friends outside cannot connect — what should I check first?

Confirm the forward is UDP, not TCP: Palworld uses UDP 8211 exclusively. Then run ss -lnup | grep 8211 on the machine to verify the socket is bound, and test from an external network with nc -vzu <public-ip> 8211. If the socket is bound but the external test fails, the block is on the router or your ISB connection — CGNAT lines cannot accept inbound UDP at all.

Why do my PalWorldSettings.ini changes reset every time?

Two causes. Either you edited the file while the process was running, and it was rewritten on shutdown — always stop the service first. Or your editor inserted a real line break inside the OptionSettings=(...) block: it must remain one single physical line. When the parser fails, it silently reverts to defaults instead of raising an error.

How much memory should I allocate for 16 players?

Plan 16 to 24 GB for a 16-slot world with several guild bases. Memory usage climbs with uptime and with the number of active base pals, so pair the allocation with a restart every 6 to 12 hours triggered via RCON after an explicit Save. Clock speed matters more than core count, since the world tick is largely single-threaded.