For tabletop players and storytellers
Storyboard the campaign, and track everything in it
Lay a campaign out as scenes on a board, keep every character, item and faction as an entity with typed attributes, and let console variables hold the state of the world while you play.
Every scene a card, every choice a wire
Players go where they like. The board shows the whole session at a glance, and the next scene is never further away than a right-click on the canvas.
- The branch you didn’t plan for is a card dropped on the board and wired in
- Chapters are boards of their own, and a Jump hands the story on
- Dice in standard notation, with the usual rolls as presets
- Press play at the table; pause, edit the board, and pick up where you were
Describe a goblin once. Spawn six.
Characters, items and factions are components; the ones the story makes and changes are entities. What the party did to the sword in chapter one is still true in chapter five, because it is the same sword.
- A component is a name and an ordered bag of typed attributes — no schema to design first
- Spawn makes as many as you ask, and finds the same ones again on a second visit
- Cards ask who is still standing, whether one exists, and take one away
- Python reads them too:
component("Goblin")["hp"]
| hp | int | 7 |
| attack | string | 1d6 |
| loot | list<asset> | [2 files] |
Entities the campaign holds
- Goblin 1
- Goblin 2
- Goblin 3
- Goblin 4
- Goblin 5
- Goblin 6
The state of the world, typed and in view
How alarmed the city is, whether the gates are open, which season it is. Console variables are the campaign’s own ledger, and any card or script can read the world from them.
- Declared once with a type: whole numbers, numbers, switches, text, Markdown, files and JSON
- Get, Set and Branch cards read and write them without a line of code
- Scoped to one board or to the whole campaign
- Watched live in a panel while the story plays
| city_alarm | int | 0 |
| gates_open | bool | false |
| season | string | autumn |
| patrons | json | {…} |
Set the mood for every scene
Music and ambience that follow the story at the table, without anybody reaching for a playlist: move on to the next scene and the sound moves with you.
- A soundscape is a timeline of clips: music under a scene, rain on the roof, a bell every half minute
- A passage names one, and it plays from there until another passage brings its own — or silence
- Clips loop gaplessly, play once, or repeat with a rest between plays
- Lanes you can name, lock, mute and solo while you work, every clip with its waveform
- A one-off sound — a door, a scream, a fanfare — is a card dropped where it happens
Open a folder and start writing
No account, no project scaffold, nothing written into your directory that you did not ask for.