alamion18 downloadsStory graph for ink: browse knots, stitches, diverts and variables on a canvas, and edit the story by drawing links.
See and edit the structure of your ink story inside Obsidian.
Ink Graph draws knots, stitches, choices, diverts, tunnels and threads as a map, shows where every variable is
read and written, warns about loops that would hang the story, and lets you change the story by working on the map.
Every action is written back to your .ink text, so nothing else stores your story.

main.graph.json), so they travel with it in git.Works alongside Ink Player and Ink Language. Ink Graph does not
register the .ink extension itself.
Open any .ink file and run the command Open story graph (or click the network icon in the left ribbon, "Open ink graph"). The story root is found by
following INCLUDEs upwards, so the graph covers every file the story includes.
| Do this | To get this |
|---|---|
| Double-click a node | Jump to its source line |
| Click a node or a link | Details in the side panel |
| Drag nodes | Move them (saved) |
| Right-click the canvas | New knot |
| Right-click a knot | Add stitch, rename, delete |
| Drag from a node's right handle to another node | Link: choice, sticky choice, divert or tunnel |
| Drag from a handle and let go on empty canvas | A new knot, linked from the node you started at (the (start) block works too: an empty story grows its first knot this way) |
| Drag from a handle and let go inside a knot's group | A new stitch in that knot, linked the same way |
| Delete or Backspace | Delete the selected node or link |
| Ctrl/Cmd+Z in the graph | Undo the last graph edit |
knot.stitch paths and read
counts like {knot > 1}. Prose and comments are left alone.-> END that a new knot or stitch starts with gives way to the first link you draw from it: a
divert or a choice takes its place (a tunnel goes before it, since the story still ends there). Later links just add
lines. An -> END that belongs to a choice's branch, or is not the node's last line, is never touched.(start) block a link becomes a line above the first knot. If the story already starts with a divert, that
divert is named in the message: anything added after it would never run, so change that line instead.-> END. Tunnels, threads, function calls, read counts and divert variables cannot be
redirected, so the delete is refused and lists those places; click one to open it.{ condition: } or - else: wrapper that would be left empty.
| Setting | What it does |
|---|---|
| New knots go to | The story's root file, or a file you pick each time |
| Side panel | Open, closed, or automatic (collapsed in narrow panes) |
| Delete confirmation | Preview only bigger deletions, or always |
| Choice text length on links | Where long choice texts are cut |
| Choices shown per link | How many choices a link label lists before "+N more" |
From the community plugin list (once it is accepted): Settings → Community plugins → Browse → search for Ink Graph.
Manually: download main.js, manifest.json and styles.css from the
latest release into
<your vault>/.obsidian/plugins/ink-graph/, then enable the plugin.
{ can swallow the lines after it while you are typing, so parts of the graph briefly disappear.-> x) are shown but cannot be deleted from the graph.This repository is a monorepo (the plugin lives in apps/obsidian-ink-graph, the story parser and editor core in
packages/ink-core). See docs/DEVELOPMENT.md.