Your notes, as a real graph.

Typed Graph is an Obsidian plugin that turns links into typed, signed, labeled edges with properties, lets you query them with openCypher, and draws them as a graph that looks like what it means. Developers get tg, a CLI that ties your code to your design docs.

Write edges like you write notes

One line per edge, right where it belongs. Plain type:: [[Target]] lines from Graph Link Types keep working; add a sign and properties when you need them.

---
type: Person
role: research lead
---
knows:: [[Bob]] {since: 2020, label: "met at NeurIPS"}
works_at:: [[Acme]]
-distrusts:: [[Mallory]] {id: "alice-mallory"}

Ask it questions

A graph-query block runs openCypher and shows a graph or a table, live, as the vault changes.

```graph-query
MATCH (p:Person)-[c:contributes]->(proj:Project)
RETURN p.title AS person, proj.title AS project,
       c.hours AS hours
ORDER BY hours DESC
```

Screenshots

Rendered by the plugin's own engine and renderer — the same ones you can poke at in the live demo.

Typed, signed graph with schema colors
Typed nodes, labeled and signed edges, schema-driven colors and shapes, a faded stub.
Query result as a table
Scalar results become tables; edge properties are first-class.
Variable-length paths
Variable-length paths and path variables.
Per-block styling
Per-block styling overrides on top of schema notes.

Everything a graph needs

From a quick typed link to RAG-ready storage for agents.

↗

Typed, signed edges

type:: [[X]], a - prefix for negative edges, properties in braces, stable or pinned ids.

◆

Typed nodes & schemas

Frontmatter type gives labels; schema notes declare properties, allowed edges, templates and looks.

⌕

openCypher

MATCH, OPTIONAL MATCH, WITH, aggregation, variable-length paths — read-only, with clear errors.

◎

Graph view

A full-pane explorer that follows the active note, expands neighbors and explains every style.

{}

Edge property embeds

{{edge: Alice -knows-> Bob . since}} shows a value in prose and warns about unstable references.

🐞

LadybugDB mirror

An optional sidecar mirrors the graph into LadybugDB for full Cypher, verified against the built-in engine.

≈

Vector search

Local Ollama embeddings over note chunks and edge sentences; combine hits with graph traversal.

⚙

GraphRAG & MCP

Cited retrieval over hits and their neighbors, served to agents through an MCP server.

For developers: tg

A command line that keeps design docs honest against the code, lets code point back at the docs with typed edges, and gives coding agents the result. It reads the same lat.md/ folders as lat.md and agrees with its check.

$ tg check
Scanned 39 .md, 87 .ts ...
All checks passed

$ tg search "how are tokens validated"
$ tg cypher "MATCH (c:CodeSymbol)-[:implements]->(s:Section)
             RETURN s.title, count(c)"
$ tg init              # dry run: shows every file it would touch
// @lat: [[auth#Token expiry]]
export function verifyToken(t: string) {}

// @tg: implements:: [[auth#Token expiry]] {since: 2}
// @tg: -contradicts:: [[design#Stateless sessions]]
function legacyCheck() {}
✓

Check docs against code

Links, symbols, section rules, index files and test-spec coverage, as a CI gate or an agent hook. Same verdicts as lat.md.

↗

Typed edges from code

@tg: comments add a type, a sign and properties to a link from a function to a design section.

⌕

Cypher over docs and code

Sections and code symbols are nodes in one graph: which sections have no implementation, which are implemented by most.

≈

Search with no setup

Lexical ranking needs no model or key, so it runs in a fresh clone. Add Ollama or an OpenAI-compatible endpoint for hybrid search.

⚙

Agents and MCP

tg init installs hooks, instructions and two skills for Claude Code and Cursor; tg mcp serves eight tools. Nothing is written without --write.

⇄

Obsidian and export

The plugin opens lat.md links in place and draws code nodes. tg export and tg import move content between a vault and a lat.md folder.

npm install -g @typedgraph/cli

How it fits together

Markdown stays the only source of truth. Everything else is derived and rebuildable.

core TypeScript

Edge parser, graph model, schemas, styles, openCypher engine, chunking. No Obsidian APIs.

plugin Obsidian

Query blocks, graph view, embeds, diagnostics. Works on desktop and mobile.

sidecar optional

Headless service over a read-only vault: REST, MCP, LadybugDB mirror, vectors.

tg CLI

One bundled binary on the same core: check, search, query, agent setup, export. No Obsidian needed.

Install

  1. From Obsidian: open Typed Graph in Obsidian and click Install, or go to Settings → Community plugins → Browse → search Typed Graph. It is listed in the community plugin directory.
  2. Beta builds, with BRAT: install the BRAT plugin, then Add beta plugin → Volland/obsigraph.
  3. Manually: download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/typed-graph/ and enable it.

For agents

Run the sidecar next to your vault and give your agent the graph:

claude mcp add typed-graph \
  -e OBSIGRAPH_VAULT=/path/to/vault \
  -e OBSIGRAPH_DATA=/path/to/data \
  -- node packages/sidecar/dist/server.mjs --stdio

Tools: cypher_query, vector_search, graphrag_retrieve. See the sidecar docs.