Game-Data / Interactive-Fiction / Narrative DSLs Family Index
type: language-family-index family: game-data-narrative languages_catalogued: 26 tags: [language-reference, family-index, game-data-narrative, interactive-fiction, narrative-design, ink, yarn, twine, renpy, inform, choicescript]
Game-Data / Interactive-Fiction / Narrative — Family Index
Family overview
Narrative DSLs are the textual languages used to describe story, dialogue, choice trees, and scene flow — the data layer of interactive fiction and narrative-driven games. The defining problem they all solve is the same one Robert Pinsky’s Mindwheel (1984) and Infocom’s parser games already grappled with in the 1980s: how do you write down a branching story in a form that a runtime can execute, that an author who is not a programmer can read and edit, and that a localiser can translate without breaking? The answers split along a few axes — parser vs choice-based (Inform 7 / TADS 3 vs ChoiceScript / Twine), engine-coupled vs portable (Ren’Py vs Ink), prose-flavoured vs JSON-flavoured (Ink, Yarn vs Articy:draft export) — but every entry below is fundamentally a notation for what happens next.
The classic interactive-fiction (IF) tradition runs from Infocom’s ZIL through Inform 1–6 (Graham Nelson, 1993+), TADS (Mike Roberts, 1988+), Hugo, AGT, and ALAN — all parser-driven, all compiling to a portable bytecode VM (Z-machine for Inform 1–6, Glulx for Inform 7+ and TADS 3 via tads2glulx, ALAN’s arun). Inform 7 (2006) was the radical re-think: a near-natural-language surface — “The boy is in the kitchen. The kitchen contains a kettle.” — that compiles down through Inform 6 and on to Glulx. Graham Nelson open-sourced Inform 7 in April 2022 with v10.1.0, and the 10.x line has continued — version 10.2.0 of the core compiler is current, with the Windows front-end seeing a 10.1.2 update as recently as February 2026. ChoiceScript (Choice of Games, 2010+) carved out a commercial wedge by abandoning the parser entirely and shipping 100+ choice-based titles on a deliberately narrow DSL.
The modern narrative-design wave is what indie and AAA studios actually use to ship branching dialogue: Ink (inkle Studios, 2016 OSS, 1.0 in 2021, 1.2.0 “Highland” current) powering Heaven’s Vault, 80 Days, Sorcery!, Pendragon, and many third-party titles via the Unity plugin; Yarn Spinner (open source, originally written by Tim Nugent and Paris Buttfield-Addison for Night in the Woods in 2017, now at Yarn Spinner 3.1, December 2025, with native Unreal + Godot support and a Visual Novel Kit on the 2026 roadmap) covering the Unity-friendly indie market; Twine (Chris Klimas, 2009) plus its plurality of compile-target story formats (Harlowe 4 development, SugarCube 2.36+, Chapbook, Snowman) covering the hobbyist / web-IF authoring world; and Ren’Py (PyTom, 2004; 8.5.2 “In Good Health” January 2026, 8.5.3 prerelease April 2026) absolutely dominating the visual-novel / dating-sim / anime-flavoured space on a Python 3 backend.
A separate generative-narrative micro-genre exists alongside, anchored on Kate Compton’s Tracery (2015) — a JSON bag-of-grammars notation that powers thousands of Twitter/Mastodon bots and small generative games, and that has direct ports in Python (pytracery), Ruby, and as a Twine Story Format. Narrative DSLs differ from chat/intent DSLs (see chatbot-intent-dsls) along one clean axis: narrative DSLs are author-driven — the system delivers a story the author wrote — whereas chatbot/intent DSLs are user-input-driven — the system classifies what the user said and routes accordingly. The boundary blurs at Yarn Spinner’s flow-control, Articy:draft’s branching graphs, and the new wave of LLM-NPC hybrids, but the design centre of gravity is unambiguously different.
In our deep library
- game-scripting — sibling family, covers per-game gameplay scripting (UnrealScript, GDScript, Pawn, Wren, AngelScript, Lua-as-game-script, Squirrel, Papyrus). Ren’Py script appears in both indexes — it is dual-classified because its DSL is both a gameplay script (loops, conditions, calls into Python) and a narrative format (
label start:/"Eileen" "Hello, world!"). - game-engine-scripting — sibling family, covers engine-side level/data formats (Quake .map, Source FGD, Unity prefab YAML, Blueprint visual scripting). Different artefact: scenes and assets, not story.
- chatbot-intent-dsls — adjacent: same conversational primitives (utterance → response), different driver (user input vs author-scripted).
- notation-spec — Tracery is a formal-grammar narrative DSL; the broader story-grammar / generative-text tradition (Mateas, Compton) sits at the boundary.
- python — Ren’Py’s host language. Ren’Py script is a Python-flavoured DSL;
$ score += 5is literal Python embedded in the script. - document-typesetting — Final Draft / Fade In are screenwriting DSLs that occasionally creep into narrative-game pipelines.
- api-description — Articy:draft / Articy X export to XML and JSON for runtime consumption; the export schemas effectively are an API description for the narrative graph.
Tier 3 family table — Modern narrative engines
| Language / DSL | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| Ink | 2016 OSS, 1.0 Feb 2021 | inkle Studios (Joseph Humfrey, Jon Ingold) | Markup-light branching narrative DSL; runtime in C# (+ inkjs JavaScript port) | Very active; current 1.2.0 “Highland”; powers Heaven’s Vault, 80 Days, Sorcery!, Pendragon, A Highland Song | https://www.inklestudios.com/ink/ |
| Yarn / Yarn Spinner | 2015 prototype, 2017 with Night in the Woods; 2.0 Apr 2022; 3.0 2024; 3.1 Dec 2025 | Secret Lab (Tim Nugent, Paris Buttfield-Addison); MIT / community-led | Open-source dialogue DSL; Unity-first, native Unreal Engine + ongoing Godot support; C# core | Very active; 3.1 ships async dialogue runner, option fallthrough, reworked typewriter; 2026 roadmap includes Visual Novel Kit and Story Solver debugger | https://www.yarnspinner.dev/ |
| Twine (authoring tool) | 2009 (Chris Klimas) | Chris Klimas / community | Visual web-based authoring tool; emits HTML | Very active; Twine 2.x is current line | https://twinery.org/ |
| Twee | 2010s (community) | Twine community | Plain-text source format that compiles to Twine HTML; tweego / extwee compilers | Active | https://github.com/iftechfoundation/twine-specs |
| Harlowe (Twine story format) | 2014 | Leon Arnott | Macro-based story format; default in Twine 2 | Active; Harlowe 3.3.8 stable, Harlowe 4 in development (unstable build May 2025) | https://twine2.neocities.org/ |
| SugarCube (Twine story format) | 2013 | Thomas Michael Edwards | Carries Twine 1 traditions forward; richer macro library; save-slot system | Active; 2.36+ current | https://www.motoslave.net/sugarcube/2/ |
| Snowman (Twine story format) | 2014 | Chris Klimas | Minimalist story format; expects authors to know JavaScript; underscore.js + Marked | Active but quiet; 2.x maintained | https://klembot.github.io/snowman/ |
| Chapbook (Twine story format) | 2019 (1.0) | Chris Klimas | ”Second-generation” Twine 2 format; inserts + modifiers model | Active; designed for newer users | https://klembot.github.io/chapbook/guide/ |
| Tracery | 2015 (Compton & Mateas, FDG paper) | Kate Compton (UC Santa Cruz) | JSON story-grammar / bag-of-grammars notation; recursive #symbol# expansion | Stable / canonical; powered 10k+ bots; available for Node.js, Python (pytracery), Ruby, and as a Twine story format | https://github.com/galaxykate/tracery |
Tier 3 family table — Interactive fiction (IF) traditional
| Language / DSL | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| Inform 7 | 2006; open-sourced April 2022 with v10.1.0 | Graham Nelson | Natural-language IF authoring language; compiles via Inform 6 → Glulx (or Z-machine for legacy targets) | Active; core compiler 10.2.0; Windows front-end Inform 10.1.2 update Feb 2026 | https://ganelson.github.io/inform-website/ |
| Inform 6 | 1993 | Graham Nelson | Procedural sibling of Inform 7; remains alive as the compilation back-end for I7 and as a language some authors prefer | Active as compilation target; modest direct-author use | https://www.inform-fiction.org/inform6.html |
| TADS 3 | 2006 | Mike Roberts | Comprehensive object-oriented IF authoring system; compiles to T3 VM (also tads3glulx export) | Active but small community; v3.1 added web-play capabilities | https://www.tads.org/ |
| TADS 2 | 1988 | Mike Roberts | Earlier TADS; still has installed base of game source | Legacy but compilers still maintained | https://www.tads.org/tads2.htm |
| ChoiceScript | 2010 | Dan Fabulich / Choice of Games | Branching-narrative DSL; choice-based, no parser; transpiles to JavaScript runtime | Very active commercially; 100+ shipped titles; new releases through 2025 (e.g. Hunter: The Reckoning — Beast of Glenkildove, The Last Scion) | https://www.choiceofgames.com/make-your-own-games/choicescript-intro/ |
| Quest (textadventures.co.uk) | 2002+ | Alex Warren / Texture Writer Ltd | UK-based IF authoring tool; XML-based source; both parser and choice modes | Active but slow; community continues to ship competition entries | https://textadventures.co.uk/quest |
| Squiffy | 2014 | Alex Warren (Quest author) | Lighter sibling of Quest; markdown-flavoured choice-based IF; open source | Active; 2024 IFComp entries used it | https://textadventures.co.uk/squiffy |
| ALAN | 1992 (v1), 2001 (v3) | Thomas Nilsson, Göran Forslund | Parser IF authoring language; descriptive, English-flavoured; compiles to ARUN VM | Maintained; small community | https://www.alanif.se/ |
| ADRIFT | 1997 | Campbell Wild | Form-based IF authoring tool (less of a textual DSL, more of a GUI builder); generator format .taf | Active in IF community | http://www.adrift.co/ |
| Hugo | 1995 | Kent Tessman | Procedural IF authoring system; multimedia-capable; own VM | Legacy / dormant but games still ship | https://www.generalcoffee.com/hugo |
| AGT (Adventure Game Toolkit) | 1987 | David Malmberg | Early commercial IF authoring system; ALL-CAPS, BASIC-like | Historical only; readers exist for old games | http://www.ifwiki.org/index.php/AGT |
| Z-machine (story file VM) | 1979 | Joel Berez & Marc Blank, Infocom | 16/32-bit virtual machine; the canonical IF runtime since Infocom; targeted by Inform 1–6 and Inform 7 (legacy) | Universal; every modern interpreter speaks Z-code | https://www.inform-fiction.org/zmachine/standards/ |
| Glulx (story file VM) | 1999 design, 2000s adoption | Andrew Plotkin | 32-bit successor to Z-machine; lifts memory + I/O limits; default I7 target since 2006 | Universal; standard modern target for I7 and TADS 3 | https://www.eblong.com/zarf/glulx/ |
Tier 3 family table — Visual-novel / adventure-game
| Language / DSL | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| Ren’Py script language | 2004 | PyTom (Tom Rothamel) | Python-flavoured visual-novel scripting DSL; label, scene, show, dialogue lines | Very active; 8.5.2 “In Good Health” Jan 2026, 8.5.3 “We Can Go to the Moon” prerelease Apr 2026 | https://www.renpy.org/doc/html/language_basics.html |
| Ren’Py screen language | ~2010 | PyTom | UI/screen DSL within Ren’Py for HUDs, menus, dialogue boxes | Very active; same release cadence as core Ren’Py | https://www.renpy.org/doc/html/screens.html |
| AGS Script | 1997 (AGS itself) | Chris Jones / AGS team | C-like scripting for the Adventure Game Studio engine; integrated IDE | Active; AGS 3.x master + AGS 4 in development; 2025 demo updates | https://adventuregamestudio.github.io/ags-manual/ |
| Wintermute Engine Script (WME script) | 2003 | Jan Nedoma (Dead:Code) | C-like object-oriented scripting language for the Wintermute adventure-game engine | Maintained; Wintermute Lite on Bitbucket since 2013 under MIT | http://dead-code.org/home/ |
| Fungus (Unity plugin DSL) | 2014 | snozbot / Chris Gregan | Visual flowchart-based dialogue DSL plugin for Unity; node-based editor | Active on GitHub (delisted from Asset Store); develop branch staging Fungus 3.14 | https://github.com/snozbot/fungus |
Tier 3 family table — Authoring / pipeline tools
| Language / DSL | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| Articy:draft X | 2008 (articy:draft 1) → articy:draft X (2020+) | Articy Software GmbH (formerly Nevigo) | Visual narrative authoring tool; XML/JSON export schemas serve as the runtime contract | Very active; major August 2025 update (voiceover prototyping plugin, searchable dropdowns, Perforce SSO); macOS launch April 2025 | https://www.articy.com/en/ |
| Chat Mapper | 2011 | Urban Brain Studios | Visual dialogue authoring; XML/JSON export | Maintained but quiet; primarily used in serious-games / training-sim pipelines | https://www.chat-mapper.com/ |
| Final Draft | 1991 | Final Draft Inc. (Cast & Crew) | Screenwriting DSL (.fdx XML format); occasional use as pre-prod for narrative games | Very active commercially; FDX is widely supported import format | https://www.finaldraft.com/ |
| Fade In | 2011 | Kent Tessman (also Hugo author) | Screenwriting tool with .fadein source; cross-platform | Active | https://www.fadeinpro.com/ |
| Celtx (legacy) | 2007 | Celtx Inc. | Pre-production / narrative editor; cloud-pivoted in 2010s | Legacy; no longer the narrative-game tool of choice | https://www.celtx.com/ |
| Inky (Ink editor) | 2016 | inkle Studios | The official Ink editor; not a separate DSL but the canonical authoring environment | Active; tracks Ink releases | https://github.com/inkle/inky |
Notable threads
-
Ink as the de facto AAA-and-indie branching-narrative substrate. inkle’s open-sourcing of Ink in 2016 (followed by 1.0 in February 2021 and the current 1.2.0 “Highland”) was the right artefact at the right time: a markup-light, prose-readable DSL that compiles to a small JSON runtime; a permissively-licensed C# runtime; and a Unity plugin that bolts straight into a typical indie pipeline. The shipping list — Heaven’s Vault, 80 Days, Sorcery!, Pendragon, A Highland Song, plus dozens of third-party titles — gives Ink the credibility no other narrative DSL has matched. The closest comparator is Yarn Spinner; the dividing line is roughly “Ink for sweeping branching prose, Yarn Spinner for character-line-driven dialogue with a scene/runner abstraction.”
-
Yarn Spinner’s open-source momentum and 2026 platform expansion. Night in the Woods (2017) put Yarn on the map. Yarn Spinner 2.x defined the modern era; Yarn Spinner 3.1 shipped December 2025 with async dialogue-runner methods, option fallthrough (a soft-lock fix), and a reworked typewriter system. The 2026 roadmap is ambitious: a Visual Novel Kit, a rebuilt VS Code extension, native Unreal Engine support, continued Godot work, and a new “Story Solver” narrative-debugging tool. The Secret Lab + community model has held up for nearly a decade — rare among narrative DSLs.
-
Inform 7 going open source: 2022 was a turning point. Graham Nelson released Inform 7 v10.1.0 as open source on 28 April 2022, finally exposing what had been a closed authoring system for 16 years. Version 10.2.0 of the core compiler is current; the Windows front-end saw a 10.1.2 update in February 2026. The natural-language surface — “The kettle is on the stove. The stove is fixed in place.” — remains a radical experiment that mostly works for short pieces and parses surprisingly well for full-length games, but it remains rare in commercial titles; Inform 7 is dominantly an IF-community / hobbyist-author tool.
-
Twine’s longevity comes from its story-format pluralism. A single
.tweesource file can compile via Harlowe (default, macro-based, Harlowe 4 in development as of 2025), SugarCube (more programming-flavoured, 2.36+, save slots, deep macro library), Snowman (minimal, expects JavaScript fluency), or Chapbook (insert/modifier model, designed for newcomers). Each story format is its own runtime DSL; Twine is the editor, and the choice of format determines the language. This decoupling has kept Twine relevant since 2009 — when one format ages, another takes over. -
Tracery and the generative-narrative subgenre. Kate Compton’s Tracery (2015 FDG paper, with Michael Mateas) established a small, beloved authoring language for grammar-based generative text. The notation is approachable JSON:
{ "origin": ["#hello#, #name#!"], "name": ["world","cosmos","void"] }. Ports to Python (pytracery), Ruby, and as a Twine story format keep it in active use; the canonical deployment vector was Twitter bots through the late 2010s, with the population now spread across Mastodon, Bluesky, and small generative-art games. Tracery’s design philosophy — “tools for poets, artists, kids, and weirdos” — has had outsized influence on the casual creator movement. -
Ren’Py as the visual-novel monoculture. The Lemma Soft community, the indie VN scene, the anime / dating-sim pipeline, the itch.io romance-game wave, and a substantial chunk of Doki Doki Literature Club–era English-language VNs all run on Ren’Py. Ren’Py 8.x runs on Python 3 (a multi-year migration off Python 2 finalised before 8.0); 8.5.2 “In Good Health” shipped January 2026, with 8.5.3 “We Can Go to the Moon” in prerelease since April 2026. 8.5 added Live2D support on the Web platform, an automated testing framework, and Unicode 17. The dual-DSL split (script language for narrative flow; screen language for UI/HUD) is something most narrative engines lack and is one reason Ren’Py keeps winning the visual-novel space outright.
-
ChoiceScript: a narrow DSL is a viable commercial moat. Choice of Games shipped 100+ titles on ChoiceScript and continues at a steady cadence (e.g. Hunter: The Reckoning — Beast of Glenkildove, January 2025; The Last Scion, June 2025), with roughly 46 staff across five continents as of October 2025. The language deliberately omits parser, graphics, and most engine features — it is choice-based, statful (with
*setand*if), and transpiles to a JavaScript runtime that runs equally on Steam, mobile, and the Choice of Games web reader. The lesson: in narrative-DSL design, less is sometimes a feature. -
The chatbot-narrative boundary. Yarn Spinner’s flow-control vs Rasa’s classical NLU stories vs Articy:draft’s branching graphs vs the 2025-era LLM-NPC experiments are increasingly hard to disentangle. The classic axis — narrative DSLs are author-driven, intent DSLs are user-input-driven — still holds, but tools like Articy X are layering AI-assisted dialogue generation, and Unity-side LLM-NPC plugins now consume Yarn or Ink as scaffolding then fill in lines via API call. Cross-link chatbot-intent-dsls for the user-driven side; the convergence story is still developing.
-
The story-file VM tradition still anchors classical IF. Z-machine (1979) and Glulx (Plotkin, 2000s) remain the portable IF runtime targets. Inform 7 compiles to Glulx by default (Z-code for legacy compatibility); TADS 3 has its own T3 VM with optional tads3glulx export; ALAN compiles to ARUN. Modern interpreters (Frotz, Glulxe, Gargoyle, Lectrote, Spatterlight) speak both, so a story file from 1985 (e.g. A Mind Forever Voyaging) and one from 2024 IFComp run side-by-side on the same reader. This 45-year backward compatibility is something almost no other game-data format has achieved.
Citations
- Ink (inkle Studios): https://www.inklestudios.com/ink/
- Ink GitHub repository: https://github.com/inkle/ink
- Inky (Ink editor): https://github.com/inkle/inky
- Yarn Spinner: https://www.yarnspinner.dev/
- “Yarn Spinner in 2026” roadmap: https://www.yarnspinner.dev/2026
- Yarn Spinner 3.1 release notes: https://hey.paris/posts/yarnspinner31/
- Twine: https://twinery.org/
- Twine Cookbook: https://twinery.org/cookbook/
- Harlowe manual: https://twine2.neocities.org/
- SugarCube: https://www.motoslave.net/sugarcube/2/
- Chapbook: https://klembot.github.io/chapbook/guide/
- Snowman: https://klembot.github.io/snowman/
- Inform 7 documentation: https://ganelson.github.io/inform-website/
- Inform 7 GitHub (Graham Nelson): https://github.com/ganelson/inform
- Inform 7 v10.1.0 open-source announcement (April 2022): https://intfiction.org/t/inform-7-v10-1-0-is-now-open-source/55674
- Inform - Wikipedia: https://en.wikipedia.org/wiki/Inform
- TADS: https://www.tads.org/
- ChoiceScript introduction: https://www.choiceofgames.com/make-your-own-games/choicescript-intro/
- ChoiceScript Wiki: https://choicescriptdev.fandom.com/wiki/ChoiceScript_Wiki
- Ren’Py: https://www.renpy.org/
- Ren’Py 8.5 release notes (Lemma Soft): https://lemmasoft.renai.us/forums/viewtopic.php?t=70458
- Ren’Py GitHub: https://github.com/renpy/renpy
- articy:draft X: https://www.articy.com/en/
- articy:draft X August 2025 release announcement: https://www.prnewswire.com/news-releases/articy-software-releases-major-articydraft-x-update-to-boost-narrative-design-workflows-302529168.html
- Tracery (galaxykate): https://github.com/galaxykate/tracery
- Tracery FDG 2015 paper (Compton & Mateas): http://www.fdg2015.org/papers/fdg2015_extended_abstract_18.pdf
- pytracery: https://github.com/aparrish/pytracery
- Adventure Game Studio manual: https://adventuregamestudio.github.io/ags-manual/
- Wintermute Engine: http://dead-code.org/home/
- Fungus (snozbot/fungus): https://github.com/snozbot/fungus
- Squiffy: https://textadventures.co.uk/squiffy
- Quest: https://textadventures.co.uk/quest
- ALAN: https://www.alanif.se/
- Z-machine standards: https://www.inform-fiction.org/zmachine/standards/
- Glulx (Andrew Plotkin): https://www.eblong.com/zarf/glulx/
- IFWiki (general IF reference): https://www.ifwiki.org/