Skip to content
agones · palworld · relay · rust · irc · clickhouse

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/players on a fixed interval.
  • One-way IRC — irc-gateway is the single integration point to Discord.
agones-palworld-relayApp
Rust sidecarStack
#generalIRC channel
ClickHouseTelemetry

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 (default http://127.0.0.1:8212) for info, metrics, and players, diffing successive player lists into typed GameEvents for join/leave.
  • Agones health/ready — a successful REST poll drives the Agones SDK Health() heartbeat and Ready() call (after AGONES_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 the irc-gateway service, 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 gatedPALWORLD_RCON_ADDR (default 127.0.0.1:25575) remains available for admin actions the REST surface doesn’t cover.

Configuration

Runtime knobs

EnvDefaultNotes
PALWORLD_REST_ADDRhttp://127.0.0.1:8212Base URL of the Palworld REST API polled every cycle
PALWORLD_ADMIN_PASSWORD(required)REST API basic-auth password, mounted from SealedSecret
PALWORLD_RCON_ADDR127.0.0.1:25575Same-pod loopback; RCON server lives in the game container
PALWORLD_RCON_PASSWORD(unset)Mounted from SealedSecret when RCON admin actions are needed
PALWORLD_SERVER_IDpalworld-defaultStamps every ClickHouse row
PALWORLD_POLL_INTERVAL_SECS10REST poll cadence
IRC_SERVERirc.kbve.com
IRC_PORT6697TLS
IRC_USE_TLStrue
IRC_NICKpalworld-bot
IRC_CHANNEL#generalSingle 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_DATABASEgameops
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_SECS5Cadence for POSTing /health to the Agones SDK on a successful REST poll
AGONES_REST_PROBE_TIMEOUT_SECS2How long to wait for the REST poll before treating the game as down
AGONES_INITIAL_READY_DELAY_SECS60Delay 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.