Skip to content

Repo & packages

WAGE is a monorepo. This is the map for anyone reading or contributing to the code (or hand-authoring a game and wondering where it goes).

wage/
├── apps/
│ ├── wage-engine/ Deno + TypeScript server (the authority)
│ │ └── src/games/ the built-in game bundles ← author games here
│ ├── wage-client/ Expo + TypeScript phone app (players)
│ ├── wage-web/ GM console (browser; served by the engine)
│ └── wage-website/ this marketing site + these docs (Astro)
├── packages/
│ └── wage-protocol/ shared TypeScript types (the wire contract)
└── docs/ internal design notes (not published)

The server-authoritative core: it loads rulesets, runs sessions, holds world state, ticks, evaluates rules, drives bots, and serves the WebSocket + HTTP API. Runs on Deno. The architecture and protocol pages describe its behavior.

Games live under apps/wage-engine/src/games/<id>/ — each a bundle of game.yaml (or game.json) plus an optional README.md and thumbnail.png. The engine auto-discovers and validates them at load. This is where you add a game.

The Expo/React Native phone app. Players join with a code, stream GPS, and render the world (the five tabs: Map, Chat, Players, Inventory, Settings).

The browser app gamemasters use to create sessions, place zones on a map, manage bots and items, start/stop, and spectate. Served by the engine.

This Astro site: the marketing homepage at / and the documentation you’re reading at /docs (built with Starlight). Deploys to Azure Static Web Apps.

The shared TypeScript types both clients and the engine depend on — the source of truth for the ruleset format and the wire messages:

  • rules.tsRuleset, Condition, Action, Initializer, BotClass, BehaviorNode, item/interaction/visibility types.
  • world.ts — map types, Team, GameTheme, and the runtime World/Player/ Item.
  • events.ts — the ClientMessage / ServerMessage protocol.

The Ruleset reference is authored directly from rules.ts and world.ts.

Add a bundle under apps/wage-engine/src/games/<your_id>/, include a README.md (it’s shown to players as how-to-play) and ideally a thumbnail.png, and open a pull request. See Test & publish your game.