Skip to content

Why Patter

There are good tools for branching narrative already. This page is for the person deciding whether to bring one to their team. It says what Patter optimises for and how it differs from the ones you have probably heard of, Ink, Yarn Spinner, and articy:draft.

Patter is built indie-first, but team-ready. Your story is plain files you own. Your writers work in a calm screenplay-style editor with no markup and no node graph. The same compiled bundle plays identically on JavaScript, Unity, Unreal, and Godot, and that is tested rather than promised. It leans on your existing version control rather than a server, and because it can merge a whole team’s edits without collisions, it scales from one writer to a large team on git or Perforce. It also cares about production, localisation, and recording scripts.

If you would rather start with the ideas, Core concepts is the primer, Getting started is the ten-minute path, and How it fits together shows how the pieces connect. If you’re evaluating for a game team, Playing in your game shows the integration for your engine.

The editor, Patterpad, feels like writing a screenplay, with character cues, lines, and directions. There’s no scripting syntax to learn and no flowchart to wire, so a writer is productive on day one. Logic lives in a side panel, never in the prose.

Patter is built around the lines characters say, and it’s especially at home when those lines are performed and voiced. Every line has its own id, a recording status, and a place in the voice script, and a writer can even record a rough scratch take at their desk to hear a scene read back. Some other tools are aimed mainly at on-screen text. Patter is aimed at dialogue you can hear.

A project is text files on disk (scenes, strings, authoring notes) in git, Perforce, Plastic, or SVN. Patter is lock-aware, and it combines a whole writing team’s edits instead of letting them collide. There’s no database, no server, and no proprietary store.

Patter tracks how finished each line is, shows live production stats, and exports a voice-recording script and localisation files straight from the project, so writing, recording, and translation all run off the one source.

Reviewing is built in too. Threaded comments, suggested rewrites, and notes that route themselves into the voice script or the translation hand-off all live on the script itself, Word/Docs style, in your project files. It’s the collaboration layer a plain script language leaves to a separate process.

A coverage test walks the flow thousands of times and flags every beat that is unreachable or only reachable with the right game state. That is narrative QA you can fail a build on in CI.

Your writing compiles to a single .patterc bundle, and every runtime plays it the same way. Choices, conditions, save/load, localisation, and even the random draws land identically on each engine, and a shared test suite proves it, engine by engine.

Save in Patterpad and a linked running game picks up the change without restarting, while the editor follows the game’s play cursor like a debugger. Reword a line mid-playthrough and hear the fix on the next pass.

The editor, the CLI, and CI all run the same core, so what you validate in a PR is what the writer sees in the app. And all of it’s open and free. MIT-licensed, no seats, no subscription, no telemetry.

Patter Ink (inkle) Yarn Spinner articy:draft
Author writes in A screenplay-style editor (Patterpad) A markup language (.ink) in Inky A light node script (.yarn) A visual flow + entity database
Learning curve for writers Low (it reads like a script) Medium (a scripting syntax to learn) Low to medium (nodes plus a little syntax) Medium to high (a rich desktop app)
Unit of authoring Complete, identified lines Woven-together text fragments Lines inside nodes Nodes and entities
A stable id per line (for translation + audio) Yes, every line, built in No (needs community tooling) Yes, line tags for string tables Database ids
Logic Edited visually, stored beside the prose Inline in the markup Inline commands and variables In nodes plus a variable system
Project on disk Plain text files, VCS-native A .ink file (text, VCS-friendly) .yarn files (VCS-friendly) A project database (server for teams)
Localisation Built in (two modes, live language switch) Community tooling Built in (string tables) Built in (a core strength)
Runtimes JS, Unity, Unreal, and Godot, all tested to match C#/Unity, JS (inkjs), community ports Unity-first; community ports elsewhere Unity and Unreal importers
Licence / cost Open source, free Open source, free Open source, free Commercial (free tier available)

Ink is a beloved, well-proven tool, and it’s the inspiration for Patter. Its most fundamental choice is the one that matters most here. Ink was built to weave text fragments into flowing prose rather than to author complete, discrete lines. A passage of Ink is assembled from pieces, so there’s no stable notion of “this exact line” that stays put as the story changes. That is wonderful for fluid, reactive text. It’s also exactly what makes the two things many shipping games need most, translation and recorded audio, hard. With no id per line, a translator and a voice file have nothing steady to attach to, so both turn to bespoke, fragile tooling.

Patter is built the other way round. Its unit is a complete line with a permanent id, and everything hangs off that id. A translation is that line in another language, and an audio file is that line’s recording. Localisation and voice fall out of the model rather than being bolted on later. That difference, honestly, is the reason Patter exists.

Yarn Spinner is a friendly, open-source dialogue system, hugely popular in Unity (it began life on Night in the Woods). Writers work in .yarn files, light nodes with options, commands, and variables, so there’s still a little scripting syntax and a node-graph model to hold in your head. Unlike Ink, Yarn does give each line an id for its string tables, so localisation is built in, and that part of the problem it solves much as Patter does. Where Patter differs is that it puts writers on a screenplay surface rather than a scripting language, keeps logic out of the prose entirely, and ships one tested runtime per engine (JS, Unity, Unreal, Godot) rather than being Unity-first with community ports elsewhere. If your whole game lives in Unity and your writers are happy in a light markup, Yarn is a strong, proven choice. Patter aims at teams who want an engine-neutral pipeline and a writing surface with no syntax at all.

Articy is a deep, polished visual database for narrative design, excellent for large teams who want entities, a server, and rich flow diagrams. Patter is lighter and file-based, with no server, no node graph to untangle as the story grows, and the source in your repo next to the rest of the game. If you want a screenplay your writers own in git or Perforce rather than a database they connect to, Patter is the fit.

Storylet Studio is the sibling project. It’s built for storylets, chunks of story with a condition on the front, dealt to the player when they fit. You don’t need it. Patter knows nothing about Storylet Studio, and nothing in a scene refers to it unless you put it there yourself. What the two share is your game’s state. Both read and write the same @world values, so a conversation running here and a beat chosen there work from one picture of the world. If you run both, the division that works is that Storylet Studio decides which beat happens and Patter performs it.

  • You want a pure visual node graph as the primary authoring metaphor. Articy or a flowchart tool will feel more natural.
  • You need live, Google-Docs-style concurrent editing of the same scene. Patter leans on your existing VCS for collaboration (lock-aware, with structural merge), which scales to large teams but is check-out-and-merge rather than simultaneous co-editing.
  • You’re already deep in Ink and happy writing markup. There’s little reason to move.
  • Choosing what happens next is the spine of your game rather than the conversation itself, with a pool of beats, each with a condition on the front, dealt as the world changes. That is a storylet system, and Storylet Studio is built for it. The two pair well. It picks the beat, and Patter performs it.

Open source under the MIT licence, made by .