Skip to content

What the plugin does

The one-screen mental model — your project becomes three files, and C# reads them. No parsing, no node-type table.

All documentation — Start here
On this page

A TaleShard project is a graph of boards and nodes whose types the author invents. There is no fixed vocabulary of node kinds, no built-in “dialogue node” with a speaker field and a text field. A project can have a type called Interrogation with a field called pressure, and it will work exactly as well as one that looks like a visual novel.

That single fact decides the whole architecture, because it makes the obvious design impossible.

Why there is no step.Text

The obvious design is a C# class per node type, and a game that writes if (node is DialogueNode d) Say(d.Speaker, d.Text). That cannot be built here. A node’s fields are addressed by ids minted when the author created the type, and a field inside a repeater block is keyed by an instance id that exists only in that one node’s data — so a function from type to field keys is not a function anyone can write. It is not that it would be tedious; it does not exist.

So the resolution happens once, before your game sees anything. The sync server runs the same TypeScript the browser player runs, and writes down the answer: each node with its fields already read out of whichever store held them, its references already looked up, its rich text already rendered, and its exits already classified.

Your game receives a step and asks it questions. It never re-derives what a node meant.

Three files

FileWritten byRead by
runtime.jsonthe sync serverthe runtime, at play time
codegen.jsonthe sync serverthe code generator, at sync time
generated .csthe code generatoryour compiler

The generated C# is the typed surface — your entities, your enums, your variables, your commands — so GameData.Database and GameVariables.Trust exist and are checked by the compiler. The payload is the story itself, and it is data rather than code because it changes every time a writer saves.

The three files covers who writes each and what changes when.

What you still write

The plugin does not draw anything. It hands you a step and a set of resolved fields, and your game decides what a field means on screen — which is the only way it could work, given the author owns the vocabulary. What you write is the presenter: read the fields you care about, draw them, and call Advance or SelectChoice when the player acts.

Play your first story is that loop, in about thirty lines.

Written for
Unity developers · Advanced integrators
Last updated