Palworld Dedicated Server Docker

July 19, 2026 · View on GitHub

Important

Fully compatible with Palworld 1.0 release

Please check issue to see if there are any known issues with the 1.0 release of Palworld.

Release Docker Pulls Docker Stars Image Size Discord

CodeFactor Release Linting Security

Docker Hub GHCR Artifact Hub

Chat with the community on Discord

This is a Docker container to help you get started with hosting your own Palworld dedicated server.

This Docker container has been tested and will work on the following OS:

  • Linux (Ubuntu/Debian)
  • Windows 10,11
  • MacOS (including Apple Silicon M1/M2/M3).
  • Raspberry Pi 4/5

This container has also been tested and will work on both x64 and ARM64 based CPU architecture.

Important

Get up and running in no time with the Quickstart Guide!

Sponsors

CompanyAbout
Indifferent Broccoli

indifferent broccoli (:|)

Thank you to our sponsor indifferent broccoli. If you decide to rent a Palworld server, rather than host yourself, try indifferent broccoli's Palword server hosting 2-day free trial

Massive shoutout to the following individual sponsors

AshishT112203  indifferentbroc  

Official Documentation

Documentation

Server Requirements

ResourceMinimumRecommended
CPU4 cores4+ cores
RAM16GBRecommend over 32GB for stable operation
Storage8GB20GB

How to use

Keep in mind that you'll need to change the environment variables.

Docker Compose

This repository includes an example compose.yaml file you can use to set up your server.

services:
   palworld:
      image: thijsvanloef/palworld-server-docker:latest
      restart: unless-stopped
      container_name: palworld-server
      stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop
      ports:
        - 8211:8211/udp
        - 27015:27015/udp
        - 8212:8212/tcp  # REST API enabled port, enabled by default. DO NOT PORT FORWARD THIS.
      environment:
         PUID: 1000
         PGID: 1000
         PORT: 8211 # Optional but recommended
         PLAYERS: 16 # Optional but recommended
         SERVER_PASSWORD: "worldofpals" # Optional but recommended
         REST_API_ENABLED: true
         REST_API_PORT: 8212
         TZ: "UTC"
         ADMIN_PASSWORD: "adminPasswordHere"
         COMMUNITY: false  # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD!
         SERVER_NAME: "palworld-server-docker by Thijs van Loef"
         SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef"
         CROSSPLAY_PLATFORMS: "(Steam,Xbox,PS5,Mac)"
      volumes:
         - ./palworld:/palworld/

As an alternative, you can copy the .env.example file to a new file called .env file. Modify it to your needs, check out the environment variables section to check the correct values. Modify your compose.yaml to this:

services:
   palworld:
      image: thijsvanloef/palworld-server-docker:latest
      restart: unless-stopped
      container_name: palworld-server
      stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop
      ports:
        - 8211:8211/udp
        - 27015:27015/udp
        # - 8212:8212/tcp  # Port for REST API if REST_API_ENABLED: true
      env_file:
         -  .env
      volumes:
         - ./palworld:/palworld/

Docker Run

Change every <> to your own configuration

docker run -d \
    --name palworld-server \
    -p 8211:8211/udp \
    -p 27015:27015/udp \
    -v ./palworld:/palworld/ \
    -e PUID=1000 \
    -e PGID=1000 \
    -e PORT=8211 \
    -e PLAYERS=16 \
    -e REST_API_ENABLED=true \
    -e REST_API_PORT=8212 \
    -e TZ=UTC \
    -e ADMIN_PASSWORD="adminPasswordHere" \
    -e SERVER_PASSWORD="worldofpals" \
    -e COMMUNITY=false \
    -e SERVER_NAME="palworld-server-docker by Thijs van Loef" \
    -e SERVER_DESCRIPTION="palworld-server-docker by Thijs van Loef" \
    -e CROSSPLAY_PLATFORMS="(Steam,Xbox,PS5,Mac)" \
    --restart unless-stopped \
    --stop-timeout 30 \
    thijsvanloef/palworld-server-docker:latest

As an alternative, you can copy the .env.example file to a new file called .env file. Modify it to your needs, check out the environment variables section to check the correct values. Change your docker run command to this:

docker run -d \
    --name palworld-server \
    -p 8211:8211/udp \
    -p 27015:27015/udp \
    -v ./palworld:/palworld/ \
    --env-file .env \
    --restart unless-stopped \
    --stop-timeout 30 \
    thijsvanloef/palworld-server-docker:latest

Kubernetes

All files you will need to deploy this container to kubernetes are located in the kubernetes folder.

Follow the steps in the README.md here to deploy it.

Running without root

This is only for advanced users

It is possible to run this container and override the default user which is root in this image.

Because you are specifiying the user and group PUID and PGID are ignored.

If you want to find your UID: id -u If you want to find your GID: id -g

You must set user to NUMBERICAL_UID:NUMBERICAL_GID

Below we assume your UID is 1000 and your GID is 1001

  • In docker run add --user 1000:1001 \ above the last line.
  • In docker compose add user: 1000:1001 above ports.

If you wish to run it with a different UID/GID than your own you will need to change the ownership of the directory that is being bind: chown UID:GID palworld/ or by changing the permissions for all other: chmod o=rwx palworld/

Using helm chart

The official helm chart can be found in a seperate repository, palworld-server-chart

Environment variables

You can use the following values to change the settings of the server on boot. It is highly recommended you set the following environment values before starting the server:

  • PLAYERS
  • PORT
  • PUID
  • PGID
VariableInfoDefault ValuesAllowed ValuesAdded in Version
TZTimezone used for time stamping backup serverUTCSee TZ Identifiers0.1.0
PLAYERS*Max amount of players that are able to join the server161-320.1.0
PORT*UDP port that the server will expose82111024-655350.1.0
PUID*The uid of the user the server should run as1000!00.6.0
PGID*The gid of the group the server should run as1000!00.6.0
MULTITHREADING DEPRECATED**Deprecated compatibility flag. Use ENABLE_PERF_THREADING_ARGS and WORKER_THREADS_SERVER instead.falsetrue/false0.1.0
ENABLE_PERF_THREADING_ARGSEnables performance-related threading startup arguments (-useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS).falsetrue/false2.1.0
WORKER_THREADS_SERVERSets -NumberOfWorkerThreadsServer. Leave empty to use the game's default. When using deprecated MULTITHREADING=true, this defaults to all CPUs.Positive integer2.1.0
PALWORLD_ALLOW_NEGATIVE_DELTA_TIMEEnables Palworld's built-in recovery for negative DeltaTime through an Engine ini override. This opt-in mitigation does not correct or synchronize the host or VM clock.falsetrue/false2.7.0
COMMUNITYWhether or not the server shows up in the community server browser (USE WITH SERVER_PASSWORD)falsetrue/false0.1.0
PUBLIC_IPYou can manually specify the global IP address of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration.x.x.x.x0.1.0
PUBLIC_PORTYou can manually specify the port number of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration.1024-655350.1.0
SERVER_NAMEA name for your server"string"0.1.0
SERVER_DESCRIPTIONYour server Description"string"0.1.0
SERVER_PASSWORDSecure your community server with a password"string"0.1.0
ADMIN_PASSWORDSecure administration access in the server with a password"string"0.4.0
UPDATE_ON_BOOT**Update/Install the server when the docker container starts (THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER)truetrue/false0.3.0
RCON_ENABLED***Enable RCON for the Palworld serverfalsetrue/false0.1.0
RCON_PORTRCON port to connect to255751024-655350.1.0
REST_API_ENABLEDEnable REST API for the palworld servertruetrue/false0.35.0
REST_API_PORTREST API port to connect to82121024-655350.35.0
ENABLE_GAMEDATA_APIEnable the Palworld game data API by adding -enable-gamedata-api at server start.falsetrue/false2.1.0
QUERY_PORTQuery port used to communicate with Steam servers270151024-655350.1.0
ALLOW_CONNECT_PLATFORM DEPRECATEDSpecify if you are hosting a dedicated server for Steam or Xbox playersSteamSteam/Xbox0.38.0
BACKUP_CRON_EXPRESSIONSetting affects frequency of automatic backups.0 0 * * *Needs a Cron-Expression - See Configuring Automatic Backups with Cron0.19.0
BACKUP_ENABLEDEnables automatic backupstruetrue/false0.19.0
USE_BACKUP_SAVE_DATAEnables native automatic backupstruetrue/false0.35.0
DELETE_OLD_BACKUPSDelete backups after a certain number of daysfalsetrue/false0.19.0
OLD_BACKUP_DAYSHow many days to keep backups30any positive integer0.19.0
AUTO_UPDATE_CRON_EXPRESSIONSetting affects frequency of automatic updates.0 * * * *Needs a Cron-Expression - See Configuring Automatic Backups with Cron0.20.0
AUTO_UPDATE_ENABLEDEnables automatic updatesfalsetrue/false0.20.0
AUTO_UPDATE_WARN_MINUTESHow long to wait to update the server, after the player were informed. (This will be ignored, if no Players are connected)30Integer0.20.0
AUTO_REBOOT_CRON_EXPRESSIONSetting affects frequency of automatic updates.0 0 * * *Needs a Cron-Expression - See Configuring Automatic Backups with Cron0.21.0
AUTO_REBOOT_ENABLEDEnables automatic rebootsfalsetrue/false0.21.0
AUTO_REBOOT_WARN_MINUTESHow long to wait to reboot the server, after the player were informed.5Integer0.21.0
AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINERestart the Server even if there are players online.falsetrue/false0.21.0
AUTO_PAUSE_ENABLEDEnables automatic pause (with ENABLE_PLAYER_LOGGING=true and REST_API_ENABLED=true required.)falsetrue/false1.4.0
AUTO_PAUSE_TIMEOUT_ESTdefault 180 (seconds) describes the time between the last client disconnect and the pausing of the process (read as timeout established)180Integer1.4.0
AUTO_PAUSE_LOGEnable auto-pause loggingtruetrue/false1.4.0
AUTO_PAUSE_DEBUGEnable auto-pause debug loggingfalsetrue/false1.4.0
TARGET_MANIFEST_IDLocks game version to corespond with Manifest ID from Steam Download, use with STEAM_USERNAME/STEAM_PASSWORD Depot.See Manifest ID Table0.27.0
STEAM_USERNAMESteam username for downloading the server with a TARGET_MANIFEST_ID."string"1.2.2
STEAM_PASSWORDSteam password for downloading the server with a TARGET_MANIFEST_ID."string"1.2.2
INSTALL_BETA_INSIDERInstalls the latest Beta version of the Palworld dedicated serverfalsetrue/false0.38.0
DISCORD_WEBHOOK_URLDiscord webhook url found after creating a webhook on a discord server.https://discord.com/api/webhooks/<webhook_id>0.22.0
DISCORD_SUPPRESS_NOTIFICATIONSEnables/Disables @silent messages for the server messages.falseboolean0.34.0
DISCORD_CONNECT_TIMEOUTDiscord command initial connection timeout30!00.22.0
DISCORD_MAX_TIMEOUTDiscord total hook timeout30!00.22.0
DISCORD_PRE_UPDATE_BOOT_MESSAGEDiscord message sent when server begins updatingServer is updating..."string"0.31.0
DISCORD_PRE_UPDATE_BOOT_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PRE_UPDATE_BOOT_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_POST_UPDATE_BOOT_MESSAGEDiscord message sent when server completes updatingServer update complete!"string"0.31.0
DISCORD_POST_UPDATE_BOOT_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_POST_UPDATE_BOOT_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_PRE_START_MESSAGEDiscord message sent when server begins to startServer has been started!"string"0.31.0
DISCORD_PRE_START_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PRE_START_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_PRE_SHUTDOWN_MESSAGEDiscord message sent when server begins to shutdownServer is shutting down..."string"0.31.0
DISCORD_PRE_SHUTDOWN_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PRE_SHUTDOWN_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_POST_SHUTDOWN_MESSAGEDiscord message sent when server has stoppedServer is stopped!"string"0.31.0
DISCORD_POST_SHUTDOWN_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_POST_SHUTDOWN_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_PLAYER_JOIN_MESSAGEDiscord message sent when player joins the serverplayer_name has joined Palworld!"string"0.31.0
DISCORD_PLAYER_JOIN_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PLAYER_JOIN_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_PLAYER_LEAVE_MESSAGEDiscord message sent when player leaves the serverplayer_name has left Palworld."string"0.31.0
DISCORD_PLAYER_LEAVE_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PLAYER_LEAVE_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_PRE_BACKUP_MESSAGEDiscord message when starting to create a backupCreating backup..."string"0.31.0
DISCORD_PRE_BACKUP_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PRE_BACKUP_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_POST_BACKUP_MESSAGEDiscord message when a backup has been madeBackup created at file_path"string"0.31.0
DISCORD_POST_BACKUP_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_POST_BACKUP_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_PRE_BACKUP_DELETE_MESSAGEDiscord message when starting to remove older backupsRemoving backups older than old_backup_days days"string"0.31.0
DISCORD_PRE_BACKUP_DELETE_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_PRE_BACKUP_DELETE_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_POST_BACKUP_DELETE_MESSAGEDiscord message when successfully removed older backupsRemoved backups older than old_backup_days days"string"0.31.0
DISCORD_POST_BACKUP_DELETE_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_POST_BACKUP_DELETE_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISCORD_ERR_BACKUP_DELETE_MESSAGEDiscord message when there has been an error removing older backupsUnable to delete old backups, OLD_BACKUP_DAYS is not an integer. OLD_BACKUP_DAYS=old_backup_days"string"0.31.0
DISCORD_ERR_BACKUP_DELETE_MESSAGE_ENABLEDIf the Discord message is enabled for this messagetrueboolean0.31.0
DISCORD_ERR_BACKUP_DELETE_MESSAGE_URLDiscord Webhook URL for this message (if left empty will use DISCORD_WEBHOOK_URL)"string"0.31.0
DISABLE_GENERATE_SETTINGSWhether to automatically generate the PalWorldSettings.inifalsetrue/false0.24.0
DISABLE_GENERATE_ENGINEWhether to automatically generate the Engine.initruetrue/false0.30.0
ENABLE_PLAYER_LOGGINGEnables Logging and announcing when players join and leave (with REST_API_ENABLED=true required.)truetrue/false0.31.0
PLAYER_LOGGING_POLL_PERIODPolling period (in seconds) to check for players who have joined or left5!00.31.0
USE_DEPOT_DOWNLOADERUses DepotDownloader to download game server files instead of steamcmd. This will help hosts incompatible with steamcmd (e.g. M-series Mac)falsetrue/false0.39.0
LOG_FILTER_ENABLEDEnable filter to reduce duplicated log linestruetrue/false2.0.1
LOG_LEVELMinimum container log level to emit (DEBUG < INFO < WARN < ERROR; SUCCESS/ACTION are treated as INFO)INFODEBUG/INFO/WARN/ERROR/OFF2.1.0
LOG_FORMAT_TYPEConfigure log format typedefaultjson/logfmt/colored/plain/default2.0.1

*highly recommended to set

** Make sure you know what you are doing when running this option enabled

*** Required for docker stop to save and gracefully close the server

ARM64-exclusive environment variables

ARM64 hosts can use the following variables to tweak their server setup. This includes known relevant Box64 configurations one can modify for better server stability/performance.

For the Box64 configurations, please see the their official documentation for more info.

Tip

Set ARM64_DEVICE to the most appropriate setting for your device. generic is expected to work on all devices but better stability can be found with specifying your device. For more specific device compatibility, create an issue on the base image repo.

VariableInfoDefault ValuesAllowed ValuesAdded in Version
BOX64_DYNAREC_STRONGMEM[Box64 config] Enable/Disable simulation of Strong Memory model10, 1, 2, 30.23.0
BOX64_DYNAREC_BIGBLOCK[Box64 config] Enables/Disables Box64's Dynarec building BigBlock.10, 1, 2, 30.23.0
BOX64_DYNAREC_SAFEFLAGS[Box64 config] Handling of flags on CALL/RET opcodes10, 1, 20.23.0
BOX64_DYNAREC_FASTROUND[Box64 config] Enable/Disable generation of precise x86 rounding10, 10.23.0
BOX64_DYNAREC_FASTNAN[Box64 config] Enable/Disable generation of -NAN10, 10.23.0
BOX64_DYNAREC_X87DOUBLE[Box64 config] Force the use of Double for x87 emulation00, 10.23.0
ARM64_DEVICESpecify Box64 build to be used based on host device. This setting is only applicable for ARM64 hosts.genericgeneric, m1, rpi5, adlink0.39.0

Game Ports

PortInfo
8211Game Port (UDP)
8212REST API Port (TCP)
27015Query Port (UDP)
25575RCON Port (TCP)

Using RCON

RCON is enabled by default for the palworld-server-docker image. Opening the RCON CLI is quite easy:

docker exec -it palworld-server rcon-cli "<command> <value>"

For example, you can broadcast a message to everyone in the server with the following command:

docker exec -it palworld-server rcon-cli "Broadcast Hello everyone"

This will open a CLI that uses RCON to write commands to the Palworld Server.

List of server commands

CommandInfo
Shutdown {Seconds} {MessageText}The server is shut down after the number of Seconds
DoExitForce stop the server.
BroadcastSend message to all player in the server
KickPlayer {SteamID}Kick player from the server..
BanPlayer {SteamID}BAN player from the server.
TeleportToPlayer {SteamID}Teleport to current location of target player.
TeleportToMe {SteamID}Target player teleport to your current location
ShowPlayersShow information on all connected players.
InfoShow server information.
SaveSave the world data.
UnBanPlayer {SteamID}Unban player {SteamID} from the server.

For a full list of commands go to: https://tech.palworldgame.com/settings-and-operation/commands

Using REST API

REST API is enabled by default.

compose.override.yml

services:
  palworld:
    environment:
      REST_API_ENABLED: true

The palworld-server-docker image provides rcon-cli as well as rest-cli.

$ docker exec -it palworld-server rest-cli
Usage: rest-cli <api> [options]
api:
  announce <json> ... announce message.
  ban <json>      ... ban player.
  info            ... show server informations.
  kick <json>     ... kick player.
  metrics         ... show server metrics.
  players         ... show online players.
  save            ... save the world.
  settings        ... show server settings.
  shutdown <json> ... shutdown server.
  stop            ... force stop server.
  unban <json>    ... unban player.
options:
  '{...}'         ... json.
  -               ... json from stdin.
  --no-flush-log  ... do not flush log after API call.
  -h, --help      ... help.

For example, you can broadcast a message to everyone in the server with the following command:

CLI parameter style:

docker exec -i palworld-server rest-cli announce "Broadcast Hello everyone"

JSON parameter style:

docker exec -i palworld-server rest-cli announce '{"message":"Broadcast Hello everyone"}'

JSON pipe style:

echo '{"message":"Broadcast Hello everyone"}' | docker exec -i palworld-server rest-cli announce -

rest-cli allows you to call REST APIs directly without exposing ports outside the container.

List of REST APIs

APIInfo
infoGet the server information.
playersGet player list.
settingsGet the server settings.
metricsGet the server metrics.
announceAnnounce message.
kick {SteamID}Kick player.
ban {SteamID}Ban player.
unban {SteamID}Unban player.
saveSave the world.
shutdown {Seconds} {MessageText}Shutdown the server
stopForce stop the server.

For an official documents go to: https://tech.palworldgame.com/category/rest-api

Creating a backup

To create a backup of the game's save at the current point in time, use the command:

docker exec palworld-server backup

This will create a backup at /palworld/backups/

The server will run a save before the backup if rcon is enabled.

Restore from a backup

To restore from a backup, use the command:

docker exec -it palworld-server restore

The RCON_ENABLED environment variable must be set to true to use this command.

Important

If docker restart is not set to policy always or unless-stopped then the server will shutdown and will need to be manually restarted.

The example docker run command and docker compose file in How to Use already uses the needed policy

Manually restore from a backup

Locate the backup you want to restore in /palworld/backups/ and decompress it. Need to stop the server before task.

docker compose down

Delete the old saved data folder located at palworld/Pal/Saved/SaveGames/0/<old_hash_value>.

Copy the contents of the newly decompressed saved data folder Saved/SaveGames/0/<new_hash_value> to palworld/Pal/Saved/SaveGames/0/<new_hash_value>.

Replace the DedicatedServerName inside palworld/Pal/Saved/Config/LinuxServer/GameUserSettings.ini with the new folder name.

DedicatedServerName=<new_hash_value>  # Replace it with your folder name.

Restart the game. (If you are using Docker Compose)

docker compose up -d

Configuring Automatic Backups with Cron

The server is automatically backed up everynight at midnight according to the timezone set with TZ

Set BACKUP_ENABLED enable or disable automatic backups (Default is enabled)

BACKUP_CRON_EXPRESSION is a cron expression, in a Cron-Expression you define an interval for when to run jobs.

Tip

This image uses Supercronic for crons see supercronic or Crontab Generator.

Set BACKUP_CRON_EXPRESSION to change the default schedule. Example Usage: If BACKUP_CRON_EXPRESSION to 0 2 * * *, the backup script will run every day at 2:00 AM.

Configuring Automatic Updates with Cron

To be able to use automatic Updates with this Server the following environment variables have to be set to true:

  • RCON_ENABLED
  • UPDATE_ON_BOOT

Important

If docker restart is not set to policy always or unless-stopped then the server will shutdown and will need to be manually restarted.

The example docker run command and docker compose file in How to Use already use the needed policy

Set AUTO_UPDATE_ENABLED enable or disable automatic updates (Default is disabled)

AUTO_UPDATE_CRON_EXPRESSION is a cron expression, in a Cron-Expression you define an interval for when to run jobs.

Tip

This image uses Supercronic for crons see supercronic or Crontab Generator.

Set AUTO_UPDATE_CRON_EXPRESSION to change the default schedule.

Configuring Automatic Reboots with Cron

To be able to use automatic reboots with this server RCON_ENABLED enabled.

Important

If docker restart is not set to policy always or unless-stopped then the server will shutdown and will need to be manually restarted.

The example docker run command and docker compose file in How to Use already use the needed policy

Set AUTO_REBOOT_ENABLED enable or disable automatic reboots (Default is disabled)

AUTO_REBOOT_CRON_EXPRESSION is a cron expression, in a Cron-Expression you define an interval for when to run jobs.

Tip

This image uses Supercronic for crons see supercronic or Crontab Generator.

Set AUTO_REBOOT_CRON_EXPRESSION to change the set the schedule, default is everynight at midnight according to the timezone set with TZ

Configuring Automatic Pause

The AUTO_PAUSE feature puts the PalServer process to sleep when there are no online players.

It saves data before going to sleep.

It wakes up when it detects a client connection.

When in paused state, the world time stops.

This feature can be enabled by setting the environment variable AUTO_PAUSE_ENABLED to "true".

[!INFO] This feature requires ENABLE_PLAYER_LOGGING=true and REST_API_ENABLED=true to be set.

VariableInfoDefault ValuesAllowed Values
AUTO_PAUSE_ENABLEDEnables automatic pause (Puts the server to sleep to save power when there are no online players). Requires ENABLE_PLAYER_LOGGING=true and REST_API_ENABLED=true.falsetrue/false
AUTO_PAUSE_TIMEOUT_ESTdefault 180 (seconds) describes the time between the last client disconnect and the pausing of the process (read as timeout established)180Integer
AUTO_PAUSE_LOGEnable auto-pause loggingtruetrue/false
AUTO_PAUSE_DEBUGEnable auto-pause debug loggingfalsetrue/false

If you want timestamps in the container logs for auto-pause events, either run docker logs -t palworld-server or set LOG_FORMAT_TYPE=plain or LOG_FORMAT_TYPE=colored.

AUTO_PAUSE_LOG messages go through the shared container logger, so LOG_FILTER_ENABLED and LOG_FORMAT_TYPE apply to them too.

Note

When using Podman, you must add the --cap-add=NET_RAW option to the run or create command. Alternatively, add the following cap_add: to your compose.yaml:

services:
  palworld:
    cap_add:
      - NET_RAW

Resume manually

A file called .paused is created in /palworld directory when the server is paused and removed when the server is resumed.

Other services may check for this file's existence before waking the server.

Alternatively, resume with the following command:

docker exec -it palworld-server autopause resume

Service control manually

A .autopause-disabled file can be created in the /palworld directory to make the server skip autopausing, for as long as the file is present.

Alternatively, you can control with the following command:

docker exec -it palworld-server autopause stop
docker exec -it palworld-server autopause continue

This autopause stop command is also used during automatic reboots, automatic updates, and container stops. It is also used to shutdown command via REST API/RCON.

With Community Server

If the environment variable COMMUNITY is true, A proxy server is started within the container to maintain registration on the community server list.

The proxy server captures communication with api.palworldgames.com.

The auto-pause service will replay captured data in the paused state.

Editing Server Settings

With Environment Variables

Important

These Environment Variables/Settings are subject to change since the game is still in beta. Check out the official webpage for the supported parameters.

Converting server settings to environment variables follow the same principles (with some exceptions):

  • all capital letters
  • split words by inserting an underscore
  • remove the single letter if the setting starts with one (like 'b')

For example:

  • Difficulty -> DIFFICULTY
  • PalSpawnNumRate -> PAL_SPAWN_NUM_RATE
  • bIsPvP -> IS_PVP
VariableDescriptionDefault ValueAllowed Value
DIFFICULTYGame DifficultyNoneNone,Normal,Difficult
RANDOMIZER_TYPERandom Pal Mode, None : No Randomization, Region : Randomize by Region, All : Completely RandomNoneNone, Region, All
RANDOMIZER_SEEDRandomizer Seed""String
IS_RANDOMIZER_PAL_LEVEL_RANDOMIf the parameter has been set to true, Wild pals level is fully randomized. set to false, Randomized within a level optimized with the area.FalseBoolean
DAYTIME_SPEEDRATEDay time speed - Larger number means shorter days1.000000Float
NIGHTTIME_SPEEDRATENight time speed - Larger number means shorter nights1.000000Float
EXP_RATEEXP earn rate1.000000Float
PAL_CAPTURE_RATEPal capture rate1.000000Float
PAL_SPAWN_NUM_RATEPal appearance rate1.000000Float
PAL_DAMAGE_RATE_ATTACKDamage from pals multipiler1.000000Float
PAL_DAMAGE_RATE_DEFENSEDamage to pals multipiler1.000000Float
PLAYER_DAMAGE_RATE_ATTACKDamage from player multipiler1.000000Float
PLAYER_DAMAGE_RATE_DEFENSEDamage to player multipiler1.000000Float
PLAYER_STOMACH_DECREASE_RATEPlayer hunger depletion rate1.000000Float
PLAYER_STAMINA_DECREASE_RATEPlayer stamina reduction rate1.000000Float
PLAYER_AUTO_HP_REGEN_RATEPlayer auto HP regeneration rate1.000000Float
PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEPPlayer sleep HP regeneration rate1.000000Float
PAL_STOMACH_DECREASE_RATEPal hunger depletion rate1.000000Float
PAL_STAMINA_DECREASE_RATEPal stamina reduction rate1.000000Float
PAL_AUTO_HP_REGEN_RATEPal auto HP regeneration rate1.000000Float
PAL_AUTO_HP_REGEN_RATE_IN_SLEEPPal sleep health regeneration rate (in Palbox)1.000000Float
BUILD_OBJECT_HP_RATEDamage rate to structure multiplier1.000000Float
BUILD_OBJECT_DAMAGE_RATEDamage to structure multipiler1.000000Float
BUILD_OBJECT_DETERIORATION_DAMAGE_RATEStructure determination rate1.000000Float
COLLECTION_DROP_RATEGetherable items multipiler1.000000Float
COLLECTION_OBJECT_HP_RATEGetherable objects HP multipiler1.000000Float
COLLECTION_OBJECT_RESPAWN_SPEED_RATEGetherable objects respawn interval - The smaller the number, the faster the regeneration1.000000Float
ENEMY_DROP_ITEM_RATEDropped Items Multipiler1.000000Float
DEATH_PENALTYDeath Penalty
None: No death penalty
Item: Drops items other than equipment
ItemAndEquipment: Drops all items and equipment
All: Drops all PALs and all items.
ItemNone,Item,ItemAndEquipment,All
ENABLE_PLAYER_TO_PLAYER_DAMAGEAllows players to cause damage to playersFalseBoolean
ENABLE_FRIENDLY_FIREAllow friendly fireFalseBoolean
ENABLE_INVADER_ENEMYEnable invadersTrueBoolean
ACTIVE_UNKOEnable UNKO (?)FalseBoolean
ENABLE_AIM_ASSIST_PADEnable controller aim assistTrueBoolean
ENABLE_AIM_ASSIST_KEYBOARDEnable Keyboard aim assistFalseBoolean
DROP_ITEM_MAX_NUMMaximum number of drops in the world3000Integer
DROP_ITEM_MAX_NUM_UNKOMaximum number of UNKO drops in the world100Integer
BASE_CAMP_MAX_NUMMaximum number of base camps128Integer
BASE_CAMP_WORKER_MAX_NUMMaximum number of workers15Integer
DROP_ITEM_ALIVE_MAX_HOURSTime it takes for items to despawn in hours1.000000Float
AUTO_RESET_GUILD_NO_ONLINE_PLAYERSAutomatically reset guild when no players are onlineFalseBool
AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERSTime to automatically reset guild when no players are online72.000000Float
GUILD_PLAYER_MAX_NUMMax player of Guild20Integer
BASE_CAMP_MAX_NUM_IN_GUILDMax bases of Guild4Integer
PAL_EGG_DEFAULT_HATCHING_TIMETime(h) to incubate massive egg1.000000Float
WORK_SPEED_RATEWork speed muliplier1.000000Float
AUTO_SAVE_SPANTime between autosaves (seconds)30.000000Float
IS_MULTIPLAYEnable multiplayerFalseBoolean
IS_PVPEnable PVPFalseBoolean
HARDCOREEnable HardcoreFalseBoolean
PAL_LOSTLose pals on (pal)deathFalseBoolean
CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROPAllow players from other guilds to pick up death penalty itemsFalseBoolean
ENABLE_NON_LOGIN_PENALTYEnable non-login penaltyTrueBoolean
ENABLE_FAST_TRAVELEnable fast travelTrueBoolean
IS_START_LOCATION_SELECT_BY_MAPEnable selecting of start locationFalseBoolean
EXIST_PLAYER_AFTER_LOGOUTToggle for deleting players when they log offFalseBoolean
ENABLE_DEFENSE_OTHER_GUILD_PLAYERAllows defense against other guild playersFalseBoolean
INVISIBLE_OTHER_GUILD_BASE_CAMP_AREA_FXunknownFalseBoolean
BUILD_AREA_LIMITBuild area limitFalseBoolean
ITEM_WEIGHT_RATEItem Weight Multiplier1.000000float
COOP_PLAYER_MAX_NUMMaximum number of players in a guild4Integer
REGIONRegionString
USEAUTHUse authenticationTrueBoolean
BAN_LIST_URLWhich ban list to usehttps://b.palworldgame.com/api/banlist.txtstring
SHOW_PLAYER_LISTEnable show player listFalseBoolean
CHAT_POST_LIMIT_PER_MINUTEAmount of messages players can send per minute30Integer
SUPPLY_DROP_SPANInterval for supply drop (minutes)180Integer
ENABLE_PREDATOR_BOSS_PALEnable Predator boss as palstrueboolean
MAX_BUILDING_LIMIT_NUMMaximum number of buildings per base0 (unlimited)Integer
SERVER_REPLICATE_PAWN_CULL_DISTANCEServer Replicate Pawn Cull Distance15000.000000Float
CROSSPLAY_PLATFORMSAllowed platform to connect the server.(Steam,Xbox,PS5,Mac) Please make sure you use the "()"List
ALLOW_GLOBAL_PALBOX_EXPORTIf set to True, saving to the global palbox is possible.TrueBoolean
ALLOW_GLOBAL_PALBOX_IMPORTIf set to True, importing from the global palbox is possible.FalseBoolean
EQUIPMENT_DURABILITY_DAMAGE_RATEEquipment durability damage rate.1.000000Float
ITEM_CONTAINER_FORCE_MARK_DIRTY_INTERVALItem container force mark dirty interval.1.000000Float
ITEM_CORRUPTION_MULTIPLIERItem corruption multiplier.1.000000Float
PHYSICS_ACTIVE_DROP_ITEM_MAX_NUMMaximum number of active dropped items in physics.-1Integer
ALLOW_CLIENT_MODAllow client mods.TrueBoolean
PLAYER_DATA_PAL_STORAGE_UPDATE_CHECK_TICK_INTERVALPlayer data pal storage update check tick interval.1.000000Float
LOG_FORMAT_TYPELog format type.TextString
IS_SHOW_JOIN_LEFT_MESSAGEShow join and leave messages.TrueBoolean
MONSTER_FARM_ACTION_SPEED_RATEMonster farm action speed rate.1.000000Float
DENY_TECHNOLOGY_LISTTechnology IDs to deny.String
GUILD_REJOIN_COOLDOWN_MINUTESGuild rejoin cooldown in minutes.0Integer
AUTO_TRANSFER_MASTER_CHECK_INTERVAL_SECONDSInterval between guild master transfer checks.3600.000000Float
AUTO_TRANSFER_MASTER_THRESHOLD_DAYSDays of inactivity before guild master transfer.14Integer
MAX_GUILDS_PER_FRAMEMaximum guilds processed per frame.10Integer
BLOCK_RESPAWN_TIMERespawn block time.5.000000Float
RESPAWN_PENALTY_DURATION_THRESHOLDRespawn penalty duration threshold.0.000000Float
RESPAWN_PENALTY_TIME_SCALERespawn penalty time scale.2.000000Float
DISPLAY_PVP_ITEM_NUM_ON_WORLD_MAP_BASE_CAMPDisplay PvP item count on world map for base camps.FalseBoolean
DISPLAY_PVP_ITEM_NUM_ON_WORLD_MAP_PLAYERDisplay PvP item count on world map for players.FalseBoolean
ADDITIONAL_DROP_ITEM_WHEN_PLAYER_KILLING_IN_PVP_MODEAdditional drop item type when killing a player in PvP mode.PlayerDropItemString
ADDITIONAL_DROP_ITEM_WHEN_PLAYER_KILLING_IN_PVP_MODE_NUMAdditional drop item count when killing a player in PvP mode.1Integer
ADDITIONAL_DROP_ITEM_WHEN_PLAYER_KILLING_IN_PVP_MODE_ENABLEDEnable additional drop items when killing a player in PvP mode.FalseBoolean
ENABLE_VOICE_CHATEnable voice chat.FalseBoolean
VOICE_CHAT_MAX_VOLUME_DISTANCEVoice chat max volume distance.3000.000000Float
VOICE_CHAT_ZERO_VOLUME_DISTANCEVoice chat zero volume distance.15000.000000Float
ALLOW_ENHANCE_STAT_HEALTHAllow stat point enhancement for health.TrueBoolean
ALLOW_ENHANCE_STAT_ATTACKAllow stat point enhancement for attack.TrueBoolean
ALLOW_ENHANCE_STAT_STAMINAAllow stat point enhancement for stamina.TrueBoolean
ALLOW_ENHANCE_STAT_WEIGHTAllow stat point enhancement for weight.TrueBoolean
ALLOW_ENHANCE_STAT_WORK_SPEEDAllow stat point enhancement for work speed.TrueBoolean
ENABLE_BUILDING_PLAYER_UID_DISPLAYShow building owner player ID.FalseBoolean
BUILDING_NAME_DISPLAY_CACHE_TTL_SECONDSBuilding name display cache TTL in seconds.60Integer

Manually

When the server starts, a PalWorldSettings.ini file will be created in the following location: <mount_folder>/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

Please keep in mind that the ENV variables will always overwrite the changes made to PalWorldSettings.ini.

Important

Changes can only be made to PalWorldSettings.ini while the server is off.

Any changes made while the server is live will be overwritten when the server stops.

Remember to disable generate settings on the environment variables, or the PalWorldSettings.ini file will be overwritten at startup with the default settings. See DISABLE_GENERATE_SETTINGS in environment variables.

For a more detailed list of server settings go to: Palworld Wiki

For more detailed server settings explanations go to: shockbyte

Using discord webhooks

  1. Generate a webhook url for your discord server in your discord's server settings.

  2. Set the environment variable with the unique token at the end of the discord webhook url example: https://discord.com/api/webhooks/1234567890/abcde

send discord messages with docker run:

-e DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/1234567890/abcde" \
-e DISCORD_PRE_UPDATE_BOOT_MESSAGE="Server is updating..." \

send discord messages with docker compose:

- DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/1234567890/abcde
- DISCORD_PRE_UPDATE_BOOT_MESSAGE=Server is updating...

Locking Specific Game Version

Warning

Downgrading to a lower game version is possible, but it is unknown what impact it will have on existing saves. This requires you to set STEAM_USERNAME and STEAM_PASSWORD to a Steam account that owns the game. Accounts with Steam Guard enabled are currently not supported. Please do so at your own risk!

If TARGET_MANIFEST_ID environment variable is set, will lock server version to specific manifest. The manifest corresponds to the release date/update versions. Manifests can be found using SteamCMD or websites like SteamDB.

Version To Manifest ID Table

VersionManifest ID
0.1.3.01354752814336157338
0.1.4.04190579964382773830
0.1.4.16370735655629434989
0.1.5.03750364703337203431
0.1.5.12815085007637542021
0.2.0.61677469329840659324
0.2.1.08977386334474359538
0.2.2.03713294686782778004
0.2.3.05441332432956841998
0.2.4.03872500952532478729
0.3.14278745071359475598
0.3.27197559707261547198
0.3.38939748203712584968
0.3.42579525995905578621
0.3.56538676263384401448
0.3.67750307484972290423
0.3.72342038768084482228
0.3.88676441150170012909
0.3.97493245879597781625
0.3.10752220234171168889
0.3.112179856120374736396
0.3.124799126612816973970
0.4.128740356471807192597
0.4.137797657007844256194
0.4.142423583208459052375
0.4.151367771460964183113
0.4.15.668807437307725616060428
0.5.16596731130030310701
0.5.2267999471071788047
0.5.37732507078282743071
0.5.45539885758268531766
0.5.57828355383304947
0.6.03764729529995383980
0.6.17756643464666999838
0.6.2827371074969047862
0.6.43612882697748699584
0.6.55432643748200410263
0.6.66415730362733705279
0.6.73995671553375425471
0.6.87543835373978771853
0.6.93893574637546538559
0.7.0425036885590395310
0.7.12194336714352902668
0.7.27743228609268535996
0.7.35125159522749666228
1.0.03392720560779800260

Reporting Issues/Feature Requests

Issues/Feature requests can be submitted by using this link.

Known Issues

Known issues are listed in the documentation