Skip to content
100% local

Story branch checker

Find broken links and orphaned nodes in a branching story or dialogue tree.

Input
Output

Story branch checker

Paste a branching story, dialogue tree or chatbot flow script and this tool maps every node and the links between them, then reports what's broken. It reads headings such as "# NodeName" as node definitions and inline references like "[NodeName]" or Ink-style "-> NodeName" as outgoing links from whichever node they appear under.

Two kinds of problems get flagged. Broken links are references that point to a node heading which doesn't exist anywhere in the document — the usual result of a rename, a typo, or a deleted passage that other nodes still point to. Orphaned nodes are the opposite problem: passages that exist and are fully written, but that no other node ever links to, so a player or user can never actually reach them. Both are easy to miss by eye once a script grows past a dozen or two passages, and both are exactly the kind of bug that only surfaces during playtesting — or after publishing.

Three options tune the check to how you write. "Case-sensitive node names" makes "[Forest]" and "[forest]" count as different targets instead of the same node — useful if your naming convention relies on capitalization. "Ignore a node's link to itself" keeps a passage that loops back on its own choice from counting as a reference for orphan detection, so it doesn't quietly hide a genuinely unreachable node. "Treat first node as the entry point" exempts the very first heading from the orphaned-node report, since a script's opening passage is reached by starting the story, not by another node's link.

Everything runs in your browser: the tool only parses text and never uploads your script anywhere, so unpublished chapters, unreleased game content and client work stay private. Paste a chapter, a whole game script, or a single branching scene — the tally under the output shows node, broken-link and orphaned-node counts at a glance, and the full report lists exactly which line each broken link came from.

FAQ

What heading and link formats does it understand?
Node names come from Markdown-style headings ("# NodeName" through six levels of "#"). Outgoing links are either bracketed references ("[NodeName]") anywhere in a node's text, or Ink-style arrows ("-> NodeName") on their own.
What counts as a broken link?
Any "[Target]" or "-> Target" reference whose target does not match any node heading in the document, once case handling is applied. The report lists the source node, the target and the line number for each one.
Why is my starting node never flagged as orphaned?
With "Treat first node as the entry point" enabled (the default), the first heading in the document is assumed to be where the story begins, so it is exempt from the orphaned-node check even if nothing links to it.
Does it render a visual graph?
No. This is a text-based check — it lists broken links and orphaned nodes as a report, it does not draw a diagram of the story structure.
Is my script uploaded anywhere?
No. Parsing runs entirely in your browser and your text never leaves your device.