Heimdall project artwork: the watchman of the forge

Flagship — Remote Gaming Server · members only

HEIMDALL

the watchman of the forge — one registry, every game, one wallet protocol

Heimdall is a private, members-only build on this machine. It is not a commercial gaming operation, handles no real money and takes no real wagers: balances are play-money integers held per session. Every number on this page is read from the running service, not from a roadmap.

What it is

Heimdall is the Remote Gaming Server behind dilmun.at — and, underneath, a registry. It watches a shared games directory, reads each build's own manifest, loads the pre-computed books that decide its outcomes, and serves every title through one standardised wallet protocol. Four games are registered and all four are online — Book of Gnomes, Hive of Gold, Kernel Panic and Sun Emperor — carrying between three and eight mathematical modes each. Adding a game is dropping a folder, not writing a server.

The architecture

  1. 01

    Maths, offline

    Outcomes are simulated ahead of time into books — compressed round archives with weighted lookup tables. Nothing is rolled at request time.

  2. 02

    The game folder

    One directory per title: an info.json declaring id, name, version, entry point, bet ladder and an online flag — plus its published books.

  3. 03

    The registry

    Heimdall reads every manifest at start, registers the titles marked online, and exposes them as a list — no per-game server, no manual wiring.

  4. 04

    The wallet protocol

    Four verbs per game — authenticate, play, end-round, balance — namespaced under the game's own id, so one contract serves all of them.

  5. 05

    Identity

    The member is resolved by the platform’s login (Eanna) in front of the service and handed over as request headers. Heimdall reads them; it never mints a session.

  6. 06

    Delivery

    A push to the games repository syncs the build onto this box and restarts the service; the new title appears in the console on its own.

The math layer never touches the serving layer. Simulation produces books offline; the server selects from them; the client animates what comes back. A game's frontend is a renderer for a decision that was already made elsewhere, which is the only arrangement in which the outcome cannot be argued with from the browser.

One line matters more than any other: the split between the financial summary of a round — bet, win, balance, deliberately fixed and boring — and its presentation events — reveals, beams, free-spin triggers, fully game-specific. Holding that line is what lets a game invent new features without Heimdall ever learning what they are, and what would make a move onto a commercial aggregator a re-point rather than a rewrite.

Amounts are integers, never floats. Every value in the protocol carries six implied decimal places — 1,000,000 means 1.00 — so bets, wins and balances are added and compared exactly. A bet ladder is a list of those integers, declared per game in its manifest rather than assumed by the server. Money-shaped arithmetic done in floating point is a bug waiting for a rounding error; this avoids the class entirely.

Feature highlights

  • Drop-in game registry

    A folder with a manifest and its books becomes a playable title. Five registered, five online.

  • One wallet contract

    Authenticate, play, end-round, balance — the same four verbs for every game, namespaced per title.

  • Pre-computed books

    Compressed round archives with weighted lookup tables, three to eight modes per game.

  • Exact money arithmetic

    Integer amounts at six implied decimals throughout — no floating-point currency anywhere.

  • Shared session identity

    Members are read from the platform’s login in front of the service; an id passed in a URL is never trusted for it.

  • Per-game bet ladders

    Minimum, maximum, step and the full level list are declared by the game, not hard-coded in the server.

  • Git-driven deployment

    Push to the games repository; the build syncs to this box and the service restarts itself.

  • Closed by default

    The registry, the games and this page are all members-only: unauthenticated callers get a 401, not a lobby.

How it was built

Heimdall generalises a single-game predecessor. Eyes of Argus shipped with a mock RGS bound to one game's books; the protocol and the book format it established were kept, and everything around them was widened into a registry that treats a game as data. That title is next in line to join the games repository as one more folder.

It runs as a Python service on this machine, behind the same reverse proxy and the same login as the rest of the platform — deliberately the same shape as its neighbours rather than a special case, because a stack that repeats itself is a stack one person can still hold in their head.

Tech stack

  • Python
  • FastAPI
  • Uvicorn
  • PostgreSQL
  • JSON game manifests
  • Zstandard-compressed books
  • CSV lookup tables
  • Caddy
  • git pull-based deploy

Open the console

Open the Heimdall console

The console lists every online game and plays it in place. Members only — it lives on the members’ private network, so the link works only for members who have joined it; it is not reachable from the public internet.

Heimdall — the Remote Gaming Server for dilmun.at. Play money, real architecture.