Sidecar relay forPalworld
A Rust sidecar in the Palworld Agones GameServer pod. It polls the base image's REST API on a fixed interval, drives Agones Ready/Health from that poll, relays events one-way to the kbve IRC network, and writes telemetry to ClickHouse, so the Palworld container itself can stay vanilla.
REST-poll, not log-tail
Unlike the Factorio relay's log-tail approach, this sidecar polls the base image's REST API for info, metrics, and players — a more structured signal that also doubles as the Agones health/ready probe.
- REST poll — reads
/v1/api/info,/v1/api/metrics,/v1/api/playerson a fixed interval. - One-way IRC — irc-gateway is the single integration point to Discord.
What it gives you
Features
REST poller
Polls PALWORLD_REST_ADDR (default http://127.0.0.1:8212) for info/metrics/players and diffs player lists into typed GameEvents.
Agones health/ready
Drives the Agones SDK health and ready calls from REST poll success instead of a separate probe loop.
One-way IRC bridge
Forwards in-game chat to the configured channel (default
ClickHouse writer
Inserts snapshots and player events into gameops.palworld_* tables for observability.
Sidecar
Architecture & roles
Rust binary that runs as a sidecar container in the Palworld Agones GameServer pod (apps/kube/agones/palworld/). It exists so the Palworld container itself can stay vanilla — no Agones SDK plumbing, no chat-bridge logic, no telemetry — and lifecycle work happens out-of-process, polling the base image’s own REST API rather than tailing logs.
Roles, one process:
- REST poller — polls
PALWORLD_REST_ADDR(defaulthttp://127.0.0.1:8212) forinfo,metrics, andplayers, diffing successive player lists into typedGameEvents for join/leave. - Agones health/ready — a successful REST poll drives the Agones SDK
Health()heartbeat andReady()call (afterAGONES_INITIAL_READY_DELAY_SECS), so there is a single source of liveness truth instead of a separate probe. - One-way IRC bridge — forwards in-game chat to the configured channel (default
#general) on the existing kbve IRC network. Chat is captured by a native-Linux UE4SS mod (PalChatRelay) that hooks the Palworld chat function in-process and appends each message to a shared log the relay tails. IRC → Discord is already wired by theirc-gatewayservice, so this is the single integration point the game needs. The bridge is one-way (game → IRC only); no chat is relayed back into the game. Join/leave and snapshot events continue to flow to ClickHouse but are no longer forwarded to IRC. - ClickHouse writer — inserts snapshots and player events into
gameops.palworld_*tables. - RCON, kept and gated —
PALWORLD_RCON_ADDR(default127.0.0.1:25575) remains available for admin actions the REST surface doesn’t cover.
Configuration
Runtime knobs
| Env | Default | Notes |
|---|---|---|
PALWORLD_REST_ADDR | http://127.0.0.1:8212 | Base URL of the Palworld REST API polled every cycle |
PALWORLD_ADMIN_PASSWORD | (required) | REST API basic-auth password, mounted from SealedSecret |
PALWORLD_RCON_ADDR | 127.0.0.1:25575 | Same-pod loopback; RCON server lives in the game container |
PALWORLD_RCON_PASSWORD | (unset) | Mounted from SealedSecret when RCON admin actions are needed |
PALWORLD_SERVER_ID | palworld-default | Stamps every ClickHouse row |
PALWORLD_POLL_INTERVAL_SECS | 10 | REST poll cadence |
IRC_SERVER | irc.kbve.com | |
IRC_PORT | 6697 | TLS |
IRC_USE_TLS | true | |
IRC_NICK | palworld-bot | |
IRC_CHANNEL | #general | Single channel for v1 |
IRC_PASSWORD | (unset) | NickServ identify |
CLICKHOUSE_URL | (unset) | When unset, the ClickHouse writer is disabled; the relay still bridges IRC and Agones health |
CLICKHOUSE_USER | (unset) | |
CLICKHOUSE_PASSWORD | (unset) | |
CLICKHOUSE_DATABASE | gameops | |
AGONES_SDK_HTTP | (unset) | Base URL of the in-pod Agones SDK sidecar. When unset, the health module is a no-op |
AGONES_HEALTH_INTERVAL_SECS | 5 | Cadence for POSTing /health to the Agones SDK on a successful REST poll |
AGONES_REST_PROBE_TIMEOUT_SECS | 2 | How long to wait for the REST poll before treating the game as down |
AGONES_INITIAL_READY_DELAY_SECS | 60 | Delay before the relay also POSTs /ready |
References — Issue #14503 (Palworld Agones integration) · Agones GameServer CRD · sibling image — kbve/agones-palworld.
Questions
Frequently asked
What does the Agones Palworld relay do?
It runs as a sidecar in the Palworld GameServer pod, polling the base image's REST API instead of tailing logs or RCON, driving Agones Ready/Health from that poll, bridging events one-way to the kbve IRC
Why REST polling instead of RCON or log-tail like the Factorio relay?
The thijsvanloef/palworld-server-docker base image ships a REST API (info/metrics/players/announce/shutdown) that is more structured and reliable than scraping Palworld's server log, so the relay polls it directly and only falls back to RCON for admin actions the REST surface doesn't cover.
How does chat reach Discord?
The relay forwards in-game chat one-way to the kbve IRC network via a native-Linux UE4SS mod that hooks the chat function and writes to a shared log the relay tails, and the existing irc-gateway service already relays IRC to Discord, so IRC is the single integration point the game needs. Join/leave stay in ClickHouse and no longer reach IRC.
