KRAKEN

Every game server you own, on one pane.

Kraken is a self-hosted control plane for dedicated game servers. One Panel drives a lightweight Agent on every host you own, and each Agent runs your servers as Docker containers on Linux, on native Windows, or under Wine, all from one declarative Game Spec.

go panel + agent· postgres state· docker runtime· gpl-3.0· v0.26.0

Pelican-class capability, without the operational weight.

Kraken assumes one competent operator, a handful of machines they already own, and a home LAN that has to keep working when the internet does not.

It runs on your hardware.

No hosting bill, no vendor, no per-server plan. The Panel is the source of truth, Postgres is the datastore, and both live on machines you can walk over to.

zero outbound internet · integrations are optional

One pane, whole fleet.

Nodes, servers, consoles, files, backups and schedules in a single full-bleed surface. Wider screens show more of the fleet, not a bigger version of it.

console and stats stream live over websocket

Two binaries and Postgres.

The Panel embeds the web UI, so there is no static host to run. Add a machine by installing the Agent and pasting one enrollment token.

no broker, no cache, no kubernetes

What the Panel actually does.

Everything below is in the shipped build: the operator surface for a fleet you own, instrumented end to end.

fleet5 capabilities
Multi-host fleet One Panel, many hosts. Each machine runs a lightweight Agent; node health is honest and tri-state: online, partial, offline.
Declarative Game Specs Install script, image, startup command, ports, settings and config templates in one spec. Nine ship in the box, including Valheim, Palworld, V Rising, Enshrouded, Factorio, Abiotic Factor and DragonWilds.
Guided deploys Pick a game, pick options, launch. The scheduler chooses a node that can actually host it, and says so plainly when none can.
Live console and stats Stream a server's console, CPU, memory and online-player count in the browser. The socket terminates at the Panel, which bridges it to the Agent.
Crash watchdog A server that dies comes back, and a node that returns from the dead is re-adopted with its containers intact rather than duplicated.
data5 capabilities
Files and editor Browse, edit, upload and download a server's data in the UI. All file work is native Go against a host bind mount, identical on Linux and Windows.
Per-server SFTP Each server gets its own credentials, chrooted to its own data directory, for the times a browser is the wrong tool.
Backups and replication On-demand and scheduled tar.gz backups with destination templating, plus optional off-node replication to a NAS share or an SFTP remote.
Cron schedules Standing orders for power actions and backups. A nightly restart at 03:00 is a row you can read, pause and resume.
BepInEx mods Opt-in mod loader for Unity titles, installed and wired at deploy time rather than by hand afterwards.
network2 capabilities
Networking automation Optional Cloudflare DNS records and UniFi port forwards, published from the same screen that assigned the port. Both degrade cleanly when unconfigured.
Reverse-tunnel nodes A node can dial the Panel and serve over an mTLS tunnel instead of opening an inbound gRPC port. That is the default for new nodes.
security3 capabilities
Auth and RBAC argon2id passwords and four roles (owner, admin, operator, read-only) with per-server object-level ownership on top.
Sealed secrets Steam credentials, API tokens and keys are AES-256-GCM encrypted at rest; session tokens are stored as digests. Nothing infrastructural is persisted in the clear.
Audit log and metrics Every privileged action is recorded with its actor and status, and the Panel exports Prometheus metrics and a published OpenAPI spec with Swagger UI.

One spec. Linux, Windows, or Wine.

Most panels pick an operating system and make the games fit it. Kraken makes the spec describe the game, and the scheduler decides which of your machines can run it.

Placement is a decision, not an assumption.

A Game Spec carries per-platform overrides: image, install script, startup command. When a game ships a native Linux dedicated server, that is what gets scheduled. When it only ships a Windows build, Kraken runs it on a native-Windows node, or under Wine on a Linux one.

Everything downstream stays identical either way: the file browser, the editor, the backups and the restore path are native Go filesystem work against a host bind mount, not the Docker archive API.

game spec · one file
linuxpreferred
windowsnative containers
winefallback
the scheduler picks; the operator does not have to

How it fits together.

Four moving parts, one direction of trust. The browser only ever talks to the Panel; the Panel is the only thing that talks to an Agent.

client Browser svelte 5 + typescript, embedded in the panel binary
control plane Panel go · rest + websocket · source of truth in postgres
per host Agent go daemon · docker, files, backups, sftp
runtime Servers docker containers on host-native bind mounts
browser ⇄ panel
REST over the OpenAPI surface, plus WebSocket for console and stats.
panel ⇄ agent
gRPC over mutual TLS. The Panel dials in, or the node dials out and serves over a reverse tunnel with no inbound port.
panel ⇄ postgres
All fleet state, sessions and audit history in one durable datastore.
browser ⇄ agent
Never. Console and stats are bridged by the Panel, so an Agent needs no browser-facing surface at all.

Install it in an evening.

One command brings up the first host. Every host after that is the same command with an enrollment token minted in the Add node dialog.

# first host: binaries, a kraken system user, systemd units
$ curl -fsSL https://raw.githubusercontent.com/briggleman/kraken/main/deploy/install.sh | sudo bash
$ docker compose -f deploy/docker-compose.yml up -d# or your own postgres
$ sudo systemctl enable --now kraken-panel kraken-agent
# every host after that: dials out, no inbound ports
$ curl -fsSL .../deploy/install.sh | sudo bash -s -- --role agent --tunnel \
--panel-url http://<panel-host>:8080 \
--enroll-token <one-time-token> --ca-fingerprint <sha256>
# then open http://<panel-host>:8080, pick a game, deploy

Linux or Windows hosts

Native containers on either, driven from the same Panel. Docker Compose covers the Linux path; Windows nodes run the Agent as a service.

Idempotent installer

Re-running upgrades to the latest release without clobbering your /etc/kraken/*.env.

Bring your own Postgres

The bundled compose file is a convenience, not a requirement. Point KRAKEN_DATABASE_URL anywhere.

read the deploy guide

Stop renting. Own the depths.

Kraken is free software under GPL-3.0. Clone it, read it, run it on hardware you already have.

view the repository