I’m looking for a solution (an existing plugin, a combination of plugins, or a development path) for Obsidian (the Markdown note-taking app, extensible via TypeScript/JS plugins) that combines capabilities from three tools that currently exist separately.
TOOL 1 — Graph View (native to Obsidian):
- Automatically generates a network of nodes based on [[wikilink]] links between notes, with no manual drawing of connections.
- Each node always corresponds to a real file (note, canvas, PDF); never to a smaller unit (heading, block, or an element with no underlying file).
- Does not allow deep individual node styling (custom color/shape per specific node via CSS).
TOOL 2 — Advanced Canvas (third-party Obsidian plugin):
- Inside a .canvas file, lets you create free-text “cards” (Text Nodes) that aren’t real notes — they function as fully editable “fake nodes.”
- Lets you customize the shape and style (CSS) of each card individually, plus create flowchart shapes.
- As of a recent update, it registers each individual canvas node in Obsidian’s metadataCache, allowing a specific node to be linked to or embedded via wikilink ([[file.canvas#nodeId]]) from any real note, and vice versa.
- Limitation: connections (edges) between cards on the canvas are all drawn manually by dragging; there’s no automatic connection generation based on content/link/metadata the way Graph View does it.
TOOL 3 — K-Plex (successor to the ExcaliBrain plugin, same author):
- Creates “ghost nodes” / “virtual nodes”: nodes in the graph that represent unresolved links ([[Note]] with no corresponding .md file created) — i.e., “fake notes” that exist only visually in the graph, with no real file behind them.
- A single click on these fake nodes just re-centers the view on them; a double-click creates the corresponding Markdown file.
- Deterministic, configurable spatial layout driven by a relationship “ontology” (frontmatter fields defining Parent/Child/Friend/Challenger), rather than a generic force-directed layout.
- Reported limitations: no rectangular “lasso” selection (dragging a box to select multiple nodes at once); doesn’t generate connections from tags, only from notes/files; doesn’t have the wikilink-per-node-id system that Advanced Canvas has for its cards.
WHAT I WANT (the ideal combination of all three):
-
Automatic generation of connections (edges) based on real links between notes AND between tags, like Graph View, but with tags included as fully connectable nodes.
-
“Fake” nodes (with no real file behind them) that are visually and functionally equivalent to real nodes in the same graph — not just unresolved-link “ghost nodes,” but elements customizable in shape/color/CSS, like Advanced Canvas’s cards.
-
Real addressability for every node, fake or real: its own ID/wikilink, referenceable and embeddable from any note, the way Advanced Canvas solved this for Canvas cards.
-
Multi-selection via a rectangular lasso (dragging a selection box), capturing fake and real nodes together.
-
Configurable/deterministic spatial layout (as K-Plex offers), as an alternative to native Graph View’s pure force-directed layout.
RESEARCH QUESTIONS:
-
Does any Obsidian plugin, fork, or documented combination of plugins already implement this combination, even partially?
-
Is there an open issue, pull request, forum thread (forum.obsidian.md), or Discord/Reddit thread requesting or developing exactly this combination of features?
-
Does any personal-knowledge tool outside Obsidian (Tana, Logseq, Roam Research, Anytype, Heptabase, TheBrain, whether Obsidian-adjacent or not) already natively solve these 5 requirements, serving as an architectural reference?
-
Given the current state of the three tools mentioned, what would be the most viable technical path today: an existing third-party plugin I’m not aware of, contributing a PR to one of the three projects (Advanced Canvas, K-Plex, or an extended Graph View plugin), or building a new plugin from scratch — and in that last case, which specific Obsidian APIs (metadataCache, Canvas API, Workspace API) and APIs from these plugins (if they expose a public one) would be needed?