Palworld Operator by DataKnifeAI

Hold a world. Let friends find Pals.

One PalworldServer CR hosts a dedicated world on Kubernetes — so your crew can join, explore, and capture together.

Built for hosting a world

Not a game storefront — an operator that stands up the dedicated server your players join.

  • Declare × Reconcile

    Apply a CR. The controller builds Deployment, PVC, ConfigMap, Secret mounts, and Envoy Gateway routes.

  • Host × Persist

    Saves live on a PVC. Gateway address and game port surface in status for a clean share string.

  • Join × Capture

    Players open Palworld, direct-connect to your world, and get back to finding Pals — you keep the cluster side.

How it works

Three steps from CRD to a running world.

  1. Install the operator

    kubectl apply -k config/default — CRDs, RBAC, and controller land in your cluster.

  2. Declare a PalworldServer

    Apply a sample CR. The reconciler wires the dedicated server image, storage, passwords, and UDP routes.

  3. Share the address

    Read status.connectionAddress and status.connectionPort, then connect from inside the game.

Browse the sample CR →

Local / minimal PC

No Kubernetes required. Run the same official ghcr.io/pocketpairjp/palserver image with Docker Compose on a gaming PC or laptop — then graduate to the operator when you want cluster hosting. Guide: docs/LOCAL.md.

cp compose/.env.example compose/.env   # set SERVER_PASSWORD / ADMIN_PASSWORD
make compose-up
# Palworld → Join Multiplayer Game → 127.0.0.1:8211
make compose-down
  • Players Default max 4 — keep small on a shared PC
  • RAM ~8 Gi free recommended · compose cap 6g (raise if OOM)
  • Game port 8211 / UDP · REST (and legacy RCON) on localhost only

Saves live under compose/Saved/. Passwords seed into PalWorldSettings.ini on first start from .env. Cluster path (Envoy Gateway + CR) stays the production default above.

Connect from inside Palworld

Once the CR is Ready, players join from the game client — not from kubectl. Full write-up: docs/CONNECT.md.

1. Read the address (admins)

kubectl get palworldserver -n game-servers
# ADDRESS + PORT columns map to status.connectionAddress / connectionPort

kubectl get palworldserver palworld-server -n game-servers \
  -o jsonpath='{.status.connectionAddress}:{.status.connectionPort}{"\n"}'

Share connectionAddress:connectionPort (default port 8211 UDP). Example: 192.168.14.187:8211.

2. Join Multiplayer Game

  1. Launch Palworld → choose Join Multiplayer Game.
  2. In the direct-connect field at the bottom, enter IP:PORT from status.
  3. If the world has a join password, enable Enter password, type the server-password Secret value, then click Connect.

3. Join password vs admin password

  • server-password Join / ServerPassword — share with players
  • admin-password Admin / REST basic auth — keep private
# Secret name: status.credentialsSecretName (sample BYO name below)
kubectl get secret palworld-server-secrets -n game-servers \
  -o jsonpath='{.data.server-password}' | base64 -d; echo

kubectl get secret palworld-server-secrets -n game-servers \
  -o jsonpath='{.data.admin-password}' | base64 -d; echo

Bring-your-own Secret refs, or set spec.generateSecrets: true so the operator creates {cr-name}-secrets. Passwords are never written into status.

4. Community browser vs direct connect

Direct connect is the reliable path for private operator worlds. The Community Servers list needs spec.community.enabled: true and query port 27015 UDP — useful for public discovery and for consoles that cannot enter an IP.

Crossplay (Steam / Xbox / PS5 / Mac) is controlled by spec.crossplayPlatforms. Console clients usually still need community listing even when crossplay is on. Consoles cannot load PC client mods; server content mods can lock consoles out — see Mods on Linux.

Ports

  • Game 8211 / UDP
  • Steam query 27015 / UDP
  • RCON 25575 / TCP (deprecated, ClusterIP)
  • REST API 8212 / TCP

REST is the admin API (Pocketpair deprecated RCON). Keep REST off the public internet unless you mean it. See CONNECT.md for password-prompt quirks and a share template.

Game settings (optionSettings)

spec.optionSettings is a passthrough map of PalWorldSettings.ini OptionSettings keys. Pocketpair’s list is the source of truth: Configuration parameters (Performances, Server management, Features, Game balances). Full operator notes: docs/PALWORLD_SERVER.md.

spec:
  optionSettings:
    bExistPlayerAfterLogout: "True"

Reserved keys — ServerName, passwords, ports, RCON/REST, CrossplayPlatforms — come from dedicated CR fields and override the same keys in the map. Never put passwords here.

Apply with a merge-patch, then roll the game Deployment so seed-settings re-copies the INI onto the PVC. The world save stays intact (do not delete the CR/PVC). Players disconnect briefly during the roll.

Do not dump Pocketpair’s full key list into the CR or this repo — link the official docs and set only the keys you need. bAllowClientMod is a join policy only (see Mods); it does not install client mods on the server.

Optional Server Manager

An authenticated admin UI on the same Gateway VIP as the game (HTTPS by default). World pulse first, then actions, then image updates, then the save chest, then workshop PAKs, then settings — not a generic ops dashboard. REST stays on the pod; the UI proxies it. Leave it off on a live world (enabling Recreate-rolls the game pod).

  1. 1

    Overview

    Version, world GUID, FPS, player count, days/uptime/basecamps, who is online — from Palworld REST on localhost. Kick / Ban with an optional message; ban list from banlist.txt.

  2. 2

    Controls

    Announce, save, Save & restart (REST save then Recreate). Optional shutdown with a confirm.

  3. 3

    Updates

    Pinned vs latest image, Check now, Save & force update (save, 10s announce, then Recreate), and auto-update settings.

  4. 4

    Saves

    Download a zip of SaveGames/ (optional Config, passwords redacted). Upload replaces the live world — confirm twice, then restart.

  5. 5

    Mods

    List / upload / delete on the mods PVC. Palworld Server does load community pak files under paks/~WorkshopMods.

  6. 6

    Settings

    Server profile and Pocketpair game settings, then one Apply & restart. Masked join/admin rotate (copy-once). Official configuration docs — no Windows suffix.

Enable with spec.serverManager.enabled (spec.modManager is a deprecated alias). Basic auth: admin + admin-password. Log out in the header/nav clears the browser cache (GET /logout). Sidecar binary /server-manager in the operator image (rebuild Harbor). Official REST: palwold-rest-api. Details: PALWORLD_SERVER.md.

Mods on Linux vs Windows

Palworld Server does load community pak files. Only .pak is supported. Both the client and the server must have the mod installed. Mods typically align to PC players. Operator notes: docs/PALWORLD_SERVER.md.

  • Community .pak under Pal/Content/Paks/ Yes — Palworld Server does load community pak files. Overlays ~WorkshopMods and LogicMods only — never the whole Paks/ dir.
  • Official Workshop / PalModSettings.ini / -workshopdir Not supported. Windows PalServer only.
  • Client mods (bAllowClientMod) Join policy only — does not install mods. Consoles cannot load PC client mods.
  • UE4SS / Lua / Win64 DLL Not supported.

What spec.mods actually mounts

Opt-in PVC (default off). Enabling rolls the game pod — leave it off on a live world. The image has no Mods/ directory; the saves PVC is /pal/Package/Pal/Saved only.

  • /pal/Package/Mods Forward-looking Pocketpair path (Workshop tree)
  • Paks/~WorkshopMods Linux community PAK overlay
  • Paks/LogicMods Linux community PAK overlay

Overlays do not replace Pal/Content/Paks or hide Pal-LinuxServer.pak. Server content mods can lock consoles out of a crossplay world.

Caveats: an incompatible .pak can fail startup — backup the saves PVC and pin spec.serverImage first. Optional Server Manager (spec.serverManager) is an authenticated admin UI on the Gateway VIP (port 8088) with stats, REST controls, save zip, and this Mods tab. Leave it off on a live world. Pocketpair mods · FAQ.

FAQ

Short answers to issues we’ve hit hosting Palworld. Full write-up: docs/FAQ.md.

“Incapable version”

Client/server build mismatch — usually the server image is behind a Steam client update. Bump spec.serverImage to a current Pocketpair tag (e.g. v1.0.1.100619), or enable opt-in spec.update.autoUpdateImage. Wait for Ready, confirm REST version. Players: update the game on Steam.

“No password entered”

Enable Enter password and use the join Secret key server-password (not admin). Or set spec.generateSecrets: true and read the generated Secret.

Game settings reset after restart

The init overwrites PalWorldSettings.ini from the ConfigMap every start. Put lasting keys in spec.optionSettings (e.g. bExistPlayerAfterLogout: "True"), merge-patch the CR, then roll the game pod. Official list: Configuration parameters.

Empty / different world after restart

The operator seeds DedicatedServerName from REST worldguid (or spec.dedicatedServerName) into GameUserSettings.ini. Confirm REST worldguid after rolls.

Server mods on Linux?

Palworld Server does load community pak files under Paks/~WorkshopMods / LogicMods. Only .pak is supported. Official Workshop, UE4SS, Lua, and Win64 DLLs are not supported. Both the client and the server must have the mod installed. If Crossplay is enabled, console players may fail to connect if unsupported mods are enabled. Optional Server Manager is an authenticated admin UI on port 8088 (same VIP). Client join policy is bAllowClientMod only; consoles cannot load PC client mods. Full comparison: Mods on Linux vs Windows.

How do game patches reach the server?

Official image = new container tag, not SteamCMD on boot. Opt-in spec.update.autoUpdateImage polls GHCR and pins vX.Y.Z.W (optional cron windows, REST announce before roll). Community images may use updateOnBoot. Details in FAQ / PALWORLD_SERVER.md.

Open the full FAQ →