Skip to content

Repository files navigation

Palworld Operator

Tests Lint Build License Version

World Keeper — Palworld Operator

Spin up a Palworld dedicated server on Kubernetes with one CR. You declare a PalworldServer; the operator builds Deployment, PVC, services, and Envoy Gateway exposure around the official Pocketpair image.

Congrats to Pocketpair on Palworld 1.01.0 announcement · Steam.

Site: dataknifeai.github.io/palworld-operator · Operator image: harbor.dataknife.net/library/palworld-operator

How it works

flowchart LR
  CR["PalworldServer CR"] --> Op["Operator"]
  Op --> Stack["Deployment · PVC · Services<br/>ConfigMap · Secret"]
  Stack --> EG["Envoy Gateway"]
  EG --> Players["Players"]
Loading

Full resource layout: docs/ARCHITECTURE.md.

Local / minimal PC (no Kubernetes)

cp compose/.env.example compose/.env   # set SERVER_PASSWORD / ADMIN_PASSWORD
make compose-up
# Join Multiplayer Game → 127.0.0.1:8211
make compose-down

Details (RAM, ports, LAN): docs/LOCAL.md.

Quick start (Kubernetes)

Prerequisites: Kubernetes 1.28+, Envoy Gateway (GatewayClass envoy), a StorageClass for saves, and one dedicated external IP per server (spec.gateway.address).

# Optional: bring-your-own credentials (skip if using spec.generateSecrets: true)
kubectl -n game-servers create secret generic palworld-server-secrets \
  --from-literal=admin-password='CHANGE_ME_ADMIN' \
  --from-literal=server-password='CHANGE_ME_JOIN'

kubectl apply -k config/default
kubectl apply -f config/samples/palworld_v1alpha1_palworldserver.yaml
kubectl get palworldserver -n game-servers

Connect with .status.connectionAddress / .status.connectionPort (default 8211 UDP). The operator learns/seeds DedicatedServerName from REST worldguid (or spec.dedicatedServerName) so Recreate rolls keep the world. Opt-in image auto-update: spec.update.autoUpdateImage (see docs/PALWORLD_SERVER.md). Read join/admin passwords from the credentials Secret (docs/CONNECT.md):

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

Tune the sample CR for VIP, StorageClass, and resources — BYO Secret or generateSecrets: true.

kubectl delete palworldserver palworld-server -n game-servers

Docs

Doc Contents
docs/FAQ.md Incapable version, passwords, world pin, updates, sizing
docs/LOCAL.md Docker Compose — local / minimal PC
docs/CONNECT.md In-game join, passwords, community, crossplay
docs/ARCHITECTURE.md Owned resources, Gateway layout
docs/PALWORLD_SERVER.md Ports, mounts, INI/env, Steam updates
docs/GITLAB_MIRROR.md GitHub CI + GitLab Harbor publish
CHANGELOG.md Release notes / known gaps

Development

Go 1.25+ and golangci-lint. Common targets: make generate manifests, make test, make lint, make ci, make build. See docs/GITLAB_MIRROR.md and TASKS.md.

License

Apache License 2.0 — see LICENSE. Maintained by DataKnifeAI.

About

Kubernetes operator for Palworld dedicated game servers (Envoy Gateway pattern, community Docker image)

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages