Self-hosted gaming presence for your organization - see who's playing what, in real time.
KFIRE (Knight FIRE) is an open-source, self-hosted gaming presence tracker inspired by Xfire (2004–2015). One server instance = one organization (clan, guild, team): your members run a lightweight desktop client, and you see - in real time - who is playing what, with history, stats and internal leaderboards.
This repository is the backend + admin web UI. It ships as a single static Go binary (the SvelteKit admin SPA is embedded) and self-hosts with Docker.
- 🎮 Live presence - real-time "who's playing what", over WebSocket
- 📊 Profiles & stats - per-game playtime, session history, achievements
- 🏆 Per-game leaderboards - who plays the most in your org
- 🗂️ ~10k games catalog - auto-seeded from Discord's detectable-apps list, with cached artwork
- 🔗 Steam, Battle.net & Riot connectors - link your accounts, import Steam library playtime & achievements; activatable per-game plugins (WoW, Diablo III, StarCraft II, League of Legends)
- 🌐 Multi-guild client - one desktop app reports to several KFIRE servers at once, one per guild
- 🔒 Privacy & status - go online / invisible / offline from the client (global or per guild), plus per-member web toggles to hide your current game or your recent-sessions history
- 👑 Member management - invite links, roles, ban; invite-only registration
- 🖥️ Frictionless client linking - approve devices from the browser, no password in the app
- 🛡️ Secure by default - Argon2id, short JWTs + device-bound refresh tokens, HTTPS
Go + Fiber · PostgreSQL · Redis · SvelteKit + Tailwind (embedded) · Caddy (auto-HTTPS).
git clone https://github.com/knightsofeternity/kfire-server
cd kfire-server
cp .env.example .env # fill in the secrets (openssl commands are in the file)
docker compose up -d # server + postgres + redis + caddy (auto-HTTPS)The first account you create becomes the admin. From there, invite your members and point them to the download page for the desktop client.
Behind an existing reverse proxy (no public IP / shared host)? Use
docker-compose.proxied.yml- see the deployment guide.
| Repo | What | License |
|---|---|---|
| kfire-server | Backend + admin web UI | AGPL-3.0 |
| kfire-client | Desktop tray client | MIT |
| kfire-protocol | API & WebSocket contract | Apache-2.0 |
Requires Go ≥ 1.25, Node ≥ 22 + pnpm, and Docker.
docker compose up -d postgres redis
export KFIRE_DATABASE_URL="postgres://kfire:dev@localhost:5432/kfire?sslmode=disable"
export KFIRE_JWT_SECRET=$(openssl rand -hex 32)
export KFIRE_MASTER_KEY=$(openssl rand -base64 32)
go run ./cmd/kfire-server # API only
cd web && pnpm install && pnpm dev # admin UI with hot reload (proxies to :8080)AGPL-3.0 - if you host a modified version, you must publish your changes.
