Jean Toledo62 downloadsA deterministic graph view for Obsidian.
An Obsidian plugin that renders your vault's link graph with a deterministic layout. Unlike Obsidian's built-in graph view (which uses a force-directed simulation and rearranges itself every time you open it), this plugin produces the same layout on every render for the same set of notes and links.
Built on top of Cytoscape.js using a breadthfirst layout.
The default graph view is great for exploring, but the positions of nodes shift every time you reopen it. That makes it hard to:
This plugin trades some of the "organic" look for predictable, reproducible node placement.
breadthfirst graph layout (Cytoscape).userIgnoreFilters) and re-renders when they change.main.js, manifest.json, and styles.css from the latest release.<Vault>/.obsidian/plugins/deterministic-graph-view/
git clone https://github.com/jeantoledo/obsidian-deterministic-graph-view.git
cd obsidian-deterministic-graph-view
npm install
npm run build
Then copy main.js, manifest.json, and styles.css into <Vault>/.obsidian/plugins/deterministic-graph-view/.
Click the network ribbon icon to open the graph in a new tab. Click any node to open the corresponding note.
The graph rebuilds automatically when notes are created, deleted, or renamed, and when you change Obsidian's excluded-files filters. When the view leaf becomes active again, the graph is refit to the container.
Settings → Deterministic Graph View exposes:
Defaults use a "Deep Ocean Blue / Soft Light Gray / Slate Teal" palette (see src/constants.ts).
Note: settings changes apply on the next render (e.g. after creating/renaming a note, or reopening the view).
Requirements: Node 18+ and npm.
npm install
npm run dev # esbuild watch mode
npm run build # type-check + production build
npm run lint # eslint
For local testing, symlink or copy this folder into <Vault>/.obsidian/plugins/deterministic-graph-view/ and run npm run dev. Reload Obsidian to pick up changes.
src/
main.ts # plugin lifecycle: load settings, register view + setting tab, ribbon icon
PluginView.ts # ItemView wrapper: lifecycle, vault/workspace events, render scheduling
GraphRenderer.ts # Cytoscape instance, graph build, styling, node interactions
SettingTab.ts # color-picker based settings UI
constants.ts # default settings + color palette
utils.ts # small helpers (e.g. darkenHexColor)
types/
PluginSettings.ts # PluginSettings interface (node + edge colors)