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.
-
Install the operator
kubectl apply -k config/default— CRDs, RBAC, and controller land in your cluster. -
Declare a PalworldServer
Apply a sample CR. The reconciler wires the dedicated server image, storage, passwords, and UDP routes.
-
Share the address
Read
status.connectionAddressandstatus.connectionPort, then connect from inside the game.
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
- Launch Palworld → choose Join Multiplayer Game.
- In the direct-connect field at the bottom, enter
IP:PORTfrom status. -
If the world has a join password, enable Enter password, type the
server-passwordSecret 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
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
Controls
Announce, save, Save & restart (REST save then Recreate). Optional shutdown with a confirm.
-
3
Updates
Pinned vs latest image, Check now, Save & force update (save, 10s announce, then Recreate), and auto-update settings.
-
4
Saves
Download a zip of
SaveGames/(optional Config, passwords redacted). Upload replaces the live world — confirm twice, then restart. -
5
Mods
List / upload / delete on the mods PVC. Palworld Server does load community pak files under
paks/~WorkshopMods. -
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.