Palworld GM Lab is the server my friends actually play on, plus the tooling I always wished game servers came with: a game-master portal in the spirit of a WoW GM console. Spawn items and pals, grant coins, edit stats and inventory, teleport players: player paradise on demand.
Why it exists
Palworld’s dedicated server ships with a bare REST API and not much else. Running a private server for friends means you’re the GM, and typing raw API calls is a lousy GM experience. I wanted a real operator surface, and a server stack that survives game patches without hand-surgery.
Highlights
- Windows server, Linux container. The stack runs the Windows PalServer build under Wine inside Docker (the configuration the modding runtime actually supports) with the whole thing reproducible from one compose file.
- A repository-owned GM bridge. A UE4SS Lua mod embedded in the game process exposes game-master operations the official REST API doesn’t have. Transactional update and rollback scripts keep the bridge alive across Palworld patches.
- A loopback-only GM portal. A Python backend and TypeScript frontend give the operator a point-and-click console. It binds to loopback only; players get a game server, not an attack surface.
- Boring, reliable operations. Hourly backups with seven-day retention, an external Docker volume that survives full stack rebuilds, and a public UDP tunnel that stays up independently of game restarts.
- Right-sized engineering. The project has an explicit engineering bar: fun over Fort Knox. Exactly one guardrail exists: a slot-identity recheck so a destructive operation can never hit the wrong target, because the worst realistic failure is “re-grant a virtual item in five seconds.”
Technical approach
Docker Compose orchestrates the game container, GM portal, and tunnel agent as separate services on a static internal network. The GM bridge drains game state through UE4SS into a REST surface the portal consumes; mutations sit behind a single explicit flag. A disposable lab environment proved the Wine runtime and bridge through 25 versions before anything was promoted to the production stack.


