Knot

A Twine IDE that actually understands your story. A Rust language server models your project as a graph of passages, tracks variables as they flow, and checks your macros against the exact SugarCube version your story pins — navigation, diagnostics, and insight that pattern-matching alone can't provide.

v2.1.0 SugarCube 2 — full support Rust core, LSP-native Free, source-available

That's Knot working: it read your pinned format-version, resolved the macro's lifecycle against it, and checked the link against the real passage graph — as you type. See everything it does →

73macros in the versioned SugarCube union catalog, filtered to your story's pinned version
11configurable diagnostics — broken links, unreachable passages, uninitialized variables, and more
500+CSS properties in the linting registry behind unknown-property detection
4release platforms — Windows x64, macOS ARM, Linux x64, Linux ARM64

Why Knot

The bulk of Knot lives in a language server written in Rust that talks to editors through the Language Server Protocol. That design choice matters: Knot is not strictly tethered to VS Code. The VS Code extension is its first host, but the same Rust core can power other editors — and, in time, become a standalone IDE for Twine.

Most Twine tooling treats stories as text. Knot treats them as what they are: a directed graph of passages with variables flowing through it. Build the model the way the engine sees it, and the editor can answer real questions instead of approximating them.

Structural understanding

Knot parses your project into passages and the links between them. It answers "where is this variable set?" and "is this passage reachable?" with graph analysis — questions pure text matching gets wrong.

Version-aware SugarCube

The macro catalog is versioned end to end. Completions, hover docs, and diagnostics are filtered through the format-version in your StoryData — using a macro removed in SugarCube 2.37.0 gets an error with replacement guidance, not a silent runtime failure.

Variable tracker

See where every variable is set, read, and how it flows across passages. For SugarCube, tracking is JavaScript-aware via the oxc parser, so it understands <<set $x to 1>>, <<run $x++>>, and JS inside <<script>> blocks.

Passage diagnostics

A dedicated panel inspects any passage's links, variables, macros, and complexity. Real-time diagnostics cover broken links, unreachable passages, uninitialized variables, duplicates, and dead ends — 11 checks, each configurable.

CSS & HTML linting

Embedded stylesheets get parse errors, unknown-property lints against a 500+ property registry, and pseudo-class typo detection. Embedded HTML gets unclosed-element, duplicate-attribute, and directive checks — all inside passages.

Story Map

An interactive graph visualization of your project. Nodes are passages, edges are links. Click any node to jump to that passage in the editor. It updates in real time as you edit.

Incremental analysis

Only affected passages are re-parsed after each keystroke, so large projects stay responsive even as your story grows into hundreds of passages.

Build & play, no setup

One-click build and play via Tweego. Knot downloads and manages Tweego and story formats for you — no manual compiler setup, no PATH fiddling.

Release status

The current release is v2.1.0 — the first full stable release of the v2 line. Marketplace and repository versions always match.

Shipped in 2.1.0

Format-version-aware SugarCube support end to end, embedded CSS linting, embedded HTML validation, and the versioned 73-entry macro catalog. Four release platforms: Windows x64, macOS ARM, Linux x64, Linux ARM64.

On main, unreleased Unreleased

Manual reachability entries ("reachable": true header metadata) with a quickfix, Story Map navigation to the correct line in closed files, and Story Map rendering of manual entry points — in the repository build, not yet in a Marketplace release.

Honest status. Knot v2.1.0 is the first full stable release of the v2 line — the SugarCube 2 surface is stable and production-ready. Harlowe, Chapbook, and Snowman are placeholder implementations: the build pipeline works for all formats, but language features are not yet built out for them.

This is also the best time to get involved. The codebase is still small and the technical debt is low, so feature requests and design input from early users have an outsized impact on where Knot goes. Find us on Discord →

Get started in 60 seconds

  1. Install Knot from the VS Code Marketplace (search "Knot").
  2. Open a folder containing .tw or .twee files.
  3. Click Build in the status bar — Knot downloads Tweego and the right story format on first run.
  4. Click Play to open the compiled story in your browser.

Read the full onboarding guide →

Keep Knot going

Knot is free — including for commercial use — and it stays that way. It's built by a solo developer on nights and weekends, and its funding is currently exactly zero. If Knot catches a broken link before your players do, or untangles a variable bug that would have cost you an evening, put a fraction of that saved time back in:

Patreon — $5/mo Ko-fi — one-time tip Discord

Donations fund exactly what users ask for most: the Harlowe/Chapbook/Snowman format plugins, the planned features, and ongoing maintenance. See who's backing Knot — or become the first name on that list.