Parlance and the alternatives
Parlance is built for a specific shape of project: a story that's structured data as much as prose, authored by people who already live in git. Different tools fit different shapes, and pretending otherwise helps nobody — so this page covers where Parlance wins, and where one of the others is the better call.
At a glance
| Parlance | articy:draft | Twine | ink | Yarn Spinner | |
|---|---|---|---|---|---|
| Static validation & CI story | ✓ 30 check families on save + ci-check + independent reference validator |
◑ in-app checks | ✗ | ◑ compiler errors | ◑ compiler errors |
| State-aware dialogue selection | ✓ dialogue offers, spec'd + conformance-tested | ◑ via scripting | ◑ via macros | ◑ weave/logic in-script | ◑ via commands |
| Branch-based review workflow | ✓ narrative diffs, comments, suggestions, verdicts — plain git | ✗ (server products exist) | ✗ | ◑ text diffs review fine in PRs | ◑ text diffs review fine in PRs |
| AI / MCP integration | ✓ MCP server, validated writes | ✗ | ✗ | ✗ | ✗ |
| Graph and text authoring, same document | ✓ canvas ↔ script view, both fully editable, lossless byte-level round-trip | ◑ flow editor is primary; no text form of a scene | ◑ Twee import/export round-trips, including layout — not a live second view | ✗ text only | ◑ graph view adds and moves nodes; branching is authored in text |
| Structured entities beyond dialogue (quests, factions, items, endings) | ✓ 12 first-class types, plus custom types you declare, edited in a grid | ✓ templates & objects | ✗ | ✗ variables only | ✗ variables only |
| Engine integration model | ✓ no export step — your engine reads the files the editor writes; published contract + conformance vectors | ◑ exporter + official Unity/Unreal plugins | ◑ web-native; engine use is DIY | ✓ excellent Unity runtime; C/C#/others | ✓ first-class Unity |
| Source format | ✓ plain JSON, per-entity files, clean diffs | ✗ proprietary project (X exports XML/JSON) | ◑ HTML/Twee archive | ✓ plain-text .ink |
✓ plain-text .yarn |
| Visual node editing | ✓ dialogue, quest, location canvases | ✓ mature flow editor | ✓ passage map | ✗ text-first | ◑ graph view, text-first |
| In-tool playtesting | ✓ seeded, rewindable, forced outcomes, live state; an explorer that walks every choice and check outcome | ✓ presentation/simulation | ✓ play in browser | ✓ inky player | ✓ preview |
| Shareable playable build of a scene | ✓ single-file HTML export | ✗ | ✓ whole story is HTML | ◑ export for web via tooling | ✗ |
| Localization & VO tooling | ✓ stable keys, coverage, stale detection | ✓ mature | ✗ | ◑ community tooling | ◑ line-tag based |
| Open spec | ✓ MIT schemas + conformance vectors, published separately (details) | ✗ | ◑ formats documented | ✓ open source | ✓ open source |
| License / price | free, including commercial use — MIT open spec, editor not open source | commercial, per-seat | free, open source | free, open source | free, open source (paid add-ons) |
✓ first-class ◑ possible with work or partial ✗ not a goal of the tool †
Choose Parlance if…
Parlance is the only tool here that treats the whole story layer as validated, reviewable data — dialogue, quests, factions, reputation, items, endings — in files your engine reads directly, with no export step in between. One JSON file per entity means a save touches one file and a diff reads like a change to one scene, not to a project. If your narrative has outgrown what one person can hold in their head, that's the problem it's built for — here's what that looks like on a public 112-dialogue project.
Choose Parlance if:
- Your team already lives in git and wants narrative to work like code: branches, reviewable diffs, CI gates.
- Your story is structured data as much as prose — quests, factions, reputation, items, endings, codex — and you want one validated model for all of it, not a dialogue tool plus a spreadsheet. Data the built-in types don't cover can be declared as your own types, validated and edited in a grid.
- You want validation as a guarantee, not a vibe: thirty check families on every save and in CI, so a dangling reference or an unwinnable quest fails the build instead of shipping.
- You want the engine to read the same files the editor writes — a published contract with conformance vectors instead of an export step.
- You playtest constantly and want seeded, rewindable sessions and one-file playable handoffs.
When another tool is the better fit
articy:draft
You're a mid-size-or-larger studio that wants a mature, commercial, all-in-one narrative pipeline with official Unity and Unreal plugins, template-driven game objects, and years of shipped-title track record. For a studio that wants one vendor-supported pipeline covering everything, nothing else commercial comes close. The trade-offs are the proprietary project format (version control works on binary/opaque data, with server products sold to solve the collaboration problem git would otherwise give you) and per-seat licensing.
Twine
You're writing hypertext fiction that ships as a web page, teaching interactive fiction, or jamming — nothing gets you from zero to playable branching story faster, and the output is the delivery format. It's not built for driving a game engine, structured game data, or team review workflows.
ink
Your game is prose-first and your writers are comfortable in a lightweight scripting language. ink's writing ergonomics for dense, weave-style branching prose are unmatched, its Unity integration is excellent, and its shipped-game pedigree (80 Days, Heaven's Vault, countless others) speaks for itself. The structured layer is yours to hand-roll — quests, factions, items, endings — as are any static guarantees beyond compiler errors.
Yarn Spinner
You're Unity-first and want a friendly, well-supported dialogue system with a strong community, voice-over-oriented line tagging, and a syntax writers pick up in an afternoon. Like ink, it stays a dialogue tool: quests, factions, items, endings, and the validation over them are yours to build and maintain.
If you've already written it
Three of the tools on this page are ones Parlance can import from: ink, Yarn Spinner,
and Twine (Harlowe and SugarCube stories). There are importers for ChoiceScript, Arcweave
and Ren'Py too.
The importers are agent skills in the open SKILL.md format — coding agents that support it load them natively, and any other agent can follow a skill's SKILL.md as instructions. You can download them from the open spec repository.
Once installed, you instruct the agent to run the import. It will check every emitted string against your source byte for byte and name anything it can't carry, so the question "do I have to retype my script" has a concrete answer. How migration works.
Worth knowing before you weigh it: conditional text — { cond: line } in ink,
<<if>> in Yarn — had no equivalent in Parlance until v0.11.0. It does now
(conditional narration), and the importers map
guarded lines onto it. That is what turned moving a real manuscript into a conversion
rather than a rewrite.
The fastest way to judge: play the demo, then open it in the editor.
† This table is maintained by us, about our competitors — read it with that grain of salt, and tell us if a cell is unfair or out of date.