An engine for dice-driven creative-practice games: the kind where you roll on a table, take whatever constraint comes up, make something under it, and occasionally suffer a result that reaches backwards and damages what you made an hour ago. Games like that are usually played on paper, and the bookkeeping is what breaks: backwards targeting, states that pile up, counters, deferred rolls. None of that is the interesting part of the game, and all of it is what a computer is for.
Runlog is a referee and a run log, not a rulebook. It does not know what game you are playing. It reads a pack (a YAML or JSON file describing your tables, states, counters, flow and modes) and becomes that game: every noun on screen comes from your vocabulary, every step from your flow. Everything runs in the browser, and nothing leaves your machine unless you sign in. It also runs a stream: the next twist drawn where chat can see it, a scoreboard for a roster taken from chat, and widgets on a scene as plain browser sources.
npm install
npm run devThe packs that ship with it are free, in the marketplace:
| Pack | Shape | What it exercises |
|---|---|---|
| Forfeits | a penalty wheel for any stream; the pack a new device gets | a counter with a threshold trigger, a move from outside the flow, states that lift when the round is left, moderated and seeded modes |
| Elden Ring: TarnishedTool | a challenge run a tool plays for you | ten-minute scenes, curses applied to the game itself, a hidden counter that picks you up and puts you elsewhere |
| Rocket League: Mechanics Ladder | a challenge pack for a game | ladder, quick, endless and shared modes |
| Rocket League: Showdown | a moderated race | one person moderates, a roster races the drawn mechanics, points by rank |
| Practice Room | deliberate practice for any skill | timers as the spine, a required journal line, a run-end bands roll |
| Run of Show | a rehearsal, segment by segment | a card per segment, time you set yourself, running over as a cost |
| Ladder Work | training log | no targeting at all, runs spanning days, timers |
| Twenty-five | one task per twenty-five minutes | a bell that means stop, a break card, debt for running over |
Runlog has no map, no tokens and no character sheets. A virtual tabletop is where a group of role-players meets, and it is good at that; a wheel is a spin with no memory; a chaos platform is a remote control for viewers, where chat pays and something happens to the game. Runlog answers a different question: what the run says happens next, and whether it counts. It is the referee, so anything can be the hand that acts. The guide's A stream run by dice puts them side by side and a first stream in order.
npx @scrthq/runlog init my-game.yaml
npx @scrthq/runlog validate my-game.yaml --strict
npx @scrthq/runlog test my-game.yaml # replays the fixtures your pack ships- The authoring guide: why you would reach for any of it, with a complete pack you can copy.
- The reference: every field, generated from the schema, so it cannot be wrong about what loads.
| Hosted | https://runlog.scrthq.com, the copy Secret Headquarters runs, with accounts, sync, tables with company and the marketplace |
| Anyone, no account | https://scrt-hq.github.io/runlog/, GitHub Pages, tracks main, no sign-in and no sync |
| Your own | The guide's Running your own copy: on your machine, on a static host, or on your own AWS |
- docs/README.md: the documents, indexed by who you are.
- The guide: playing, streaming, Discord and running a copy. It is in the app under Menu and needs no account.
- CONTRIBUTING.md: the shape of the code, and how a change lands.
- hosted/README.md: running a copy as a service.
MIT, for everything in this repository: the engine, the schema, the app, the command line and the docs. See LICENSE. The packs you write with it are yours, under whatever license their own license field says, and the app honors that field; the authoring guide says how. The repository contains no particular game, by design; CONTRIBUTING.md says why.
See CONTRIBUTING.md. Runs, packs and questions that are not bugs go to r/runlog_scrthq or the Discord server.