KATFORGE Ecosystem
A shared platform for building game and analytics sites. One identity, one API, one set of composable packages.
Platform
The shared backend: identity, OAuth, realtime SSE, avatars, transactional email, and rate limits.
- Identity
- Authentication
- Realtime
- Avatars
- Errors
Packages
Composable libraries that snap together into a full game stack: SDK, UI, engine, ECS, data, combat.
- SDK
- Spark
- Forge
- Anvil
- Tactician
- Katalyst
Codex
Server-of-truth game data — extracted from each patch, snapshot-versioned in Postgres, served read-only over HTTP.
- Identifiers
- Entities
- Assets
- Patches
- JS SDK
- PHP SDK
- CLI
Hearth
One CLI for the dev stack, encrypted secrets, multi-stage environments, and one-command deploys.
- Install
- Commands
- Local dev
- Secrets
- Deployment
- Troubleshooting
API Reference
REST endpoints, payload schemas, response codes. Grouped by resource and per-game vertical.
- Gateway
- OAuth
- Users
- Tokens
- API Keys
- Realms
- Codex
Realms
Visual identity for the family of sites: typographic logos, palettes, and brand grammar.
- KATforge
- Stumper
- Lextris
- Goblins
- wc3stats
- DarkerDB
How it works
Every site shares the same backend:
- Identity: one
playerstable across every site. Guests, OAuth (Discord, Google, Apple, Steam), and cross-domain SSO via passport tokens. - API: one Symfony backend at
api.katforge.com. Per-game Postgres schemas, sharedpublic.playersandpublic.users. - Hearth: the orchestrator. One install, then every workflow — local dev stack, secrets, deploys — is
hearth <command>. See Hearth docs.
On top of that,
KATFORGE ships a set of composable packages. See Package composition.
Spinning up a new site
npx create-katalyst my-gamecd my-gamenpm run devKatalyst scaffolds a Vue 3 + Tailwind + Capacitor project wired to the API through the SDK. Auth, leaderboards, and cross-domain SSO out of the box; bring your own game logic.
Package composition
The packages compose into a game development stack. Sites pick what they need:
| Layer | Package | Role |
|---|---|---|
| Transport | @katforge/api | HTTP client, auth, pagination, error mapping |
| UI | @katforge/spark | Login modal, flash messages, theme CSS |
| Engine | @katforge/forge | Game loop, input, renderer, Vue composables |
| ECS | @katforge/anvil | Entity-Component-System for game state |
| Data | @katforge/codex | Typed collections, i18n, loot tables, item forging |
| Combat | @katforge/tactician | Deterministic encounter resolution |
| Scaffolding | @katforge/katalyst | CLI that generates a new game project |
An analytics site like
wc3stats or
DarkerDB only needs @katforge/api and @katforge/spark. A full game like Gear Goblins uses the entire stack.
Per-game schemas
Each game owns a Postgres schema. Doctrine migrations manage all schemas from one repo.
public.* players, users, oauth, email subscriptionsstumper.* lobbies, questions, answers, stats, favoriteslextris.* results (daily + random leaderboards)gear_goblins.* characters, equipment, spells, zones, currencyGame tables reference public.players.id as player_id. No game-specific user tables. One player, many games.