Catenary
Catenary draws diagrams of RDF, OWL, SHACL and SKOS models in VS Code. It reads model files through the Turtle RDF language server, stores each diagram as a *.view.trig view file, and exports diagrams into Markdown documents as SVG.
Requirements
VS Code 1.101 or later. The extension depends on the Turtle RDF language server (abhishekkundu25.turtle-language-server); VS Code installs it with Catenary.
Features
- Open
*.view.trig in a custom editor with node shape cards, attribute rows, associations, collections, value sets, instance cards, entity groups, notes, frames and arrows.
- Place, remove, move, resize and color view elements; switch cards between simple and detailed display.
- Remove relation edges from a view, route edges with bends, and change property rows to lines or back to rows.
- Collect instance cards into entity groups and expand them back into cards.
- Edit group labels and note Markdown, add note arrows, and apply Layered or Force layout.
- Navigate to model sources and view references; drop workspace files as references.
- Read model files through turtle-lsp, including labels, prefixes, navigation and SHACL diagnostic badges. Canvas edits write view files only; they do not add or change model statements.
- Embed views in Markdown and export documents with SVG diagrams.
- Out of scope: model explorer, outline, forms, properties panel, model relation editing, a separate SHACL validator or a parser for model files.
Use
Run Catenary: New View… from the explorer context menu to create a view file, or open an existing *.view.trig file.
- Open a
*.view.trig file to display its canvas.
- Click TriG at the right end of the canvas toolbar to open the view file as text; save first if prompted.
- Click Catenary: Open in Canvas in the TriG editor title to return to the canvas; save first if prompted.
- Choose Insert… in the palette or Catenary: Insert Element… in the editor title to place workspace elements that the view does not show.
- Choose Insert… → Link to a file… or Link to a view… to place a file or view reference without dragging.
- Drag a box to move it; drag its resize handle to resize it.
- Click × or press Delete to remove selected elements from the view, not the model.
- Use halo expansion buttons to place hidden neighbours, applicable shapes or checked instances.
- Use a card's halo expand button to show a deleted relation edge again.
- Use halo … → Color to set or clear the selected elements' view color.
- Use halo … → Simple cards or Show details to change selected cards' display.
- Use halo … → Collect to put selected instance cards into an entity group; use Expand to show the cards again.
- Use an entity group's + member input to add an existing instance; use its row × to remove membership from this view.
- Use a row's ➟ to show its element separately or draw a property as a line; use the line's row control to return a property to a row.
- Drag an edge to add a bend, drag a bend to move it, and double-click a bend to remove it.
- Choose Group or Note in the palette and click the canvas to create a view mark.
- Double-click a group label to rename it; double-click a note to edit its Markdown.
- Press Ctrl+Enter or click outside a note editor to commit; press Escape to cancel.
- Drag a note's arrow control to its target to create a view arrow.
- Choose Layout… and then Layered or Force to lay out the view in one undo step.
- Double-click a view or file reference to open it; use the halo's open-in control for a model element's source.
- Drag a workspace file from the explorer onto the canvas to add a file or view reference.
- Use Ctrl+C, Ctrl+X and Ctrl+V to copy or move placements between views; cut alone makes no edit.
- Paste Turtle text to place known workspace subjects; unknown subjects are reported without changing model files.
- Use VS Code Undo, Redo and Save for view edits.
- Run Catenary: Insert View… in Markdown to insert an image whose destination is a view IRI.
- Run Catenary: Export Markdown… from Markdown or the explorer to write documents and diagram SVGs to a destination folder.
VS Code Settings exposes card, group and note font sizes, edge style and vocabulary color. These preferences apply across views; they are not model data.
Development
pnpm install
pnpm build # dist/extension.js, dist/webview.js
pnpm verify # typecheck, knip, unit tests and source citation check
pnpm ui # real mouse and keys in headless VS Code
pnpm ui -- --section bookshop # one section of the UI checks (model, bookshop)
pnpm ui:markdown # export a Markdown document with an embedded view
The UI scripts build and launch a development host; this repository has no F5 launch configuration. A full pnpm ui run takes about 90 s; it stops with a failure after 300 s (CATENARY_UI_DEADLINE_MS), and a single Playwright action fails after 15 s. pnpm package writes the .vsix file.
Rules:
- Copy Catenary's canvas and diagram derivation by dependency; remove model-edit paths and unreachable functions.
- Test this extension's behavior with small unit tests and UI checks; no parity suite against Catenary.
- Use pnpm and lowercase
readme.md. Keep Markdown prose on one line per paragraph.
plan.md in the repository holds completed katas, decisions and open items.
| |