ZettelFlow

by rafaelgb
5
4
3
2
1
Score: 57/100

Description

ZettelFlow is a plugin for Obsidian that helps you to create and manage your notes in a Zettelkasten way.

Reviews

No reviews yet.

Stats

168
stars
24,140
downloads
12
forks
29
days
1
days
12
days
159
total PRs
0
open PRs
0
closed PRs
159
merged PRs
242
total issues
5
open issues
237
closed issues
365
commits

Latest Version

12 days ago

Changelog

Shinny new things

  • Ask your graph — a deterministic query surface over the meaning and structure of your slip-box, never AI. Compose predicates — state:permanent, relation:contradicts, degree>=5, orphan, unsourced, older-than:30, about: — with AND/OR to answer questions Dataview can't, like "orphaned permanents older than 30 days that contradict X". Results open on click and useful queries can be saved. Command: Ask your graph.
  • Cultivate — guided thinking sessions — pick your highest-leverage idea and walk real moves on it: connect an unlinked neighbour, challenge it with its contradiction, capture a question, advance its lifecycle state, add a source. Each move is a one-click operation on the note and the session refines live. Choose your own recipe of moves, and a streak plus a cultivation queue show your momentum. Offline; AI never required.
  • A 3D knowledge graph — an interactive force-directed view of your whole slip-box: nodes sized by connectivity and coloured by cluster, links coloured by relation type, hub glow and cluster hulls, question/source node kinds, proximity labels. Search-to-focus, state and relation filters, pin-focus, shortest path, click-a-link, time-lapse, zoom controls, fullscreen and a right-click menu — plus a discovery lens for orphans, dead-ends and contradictions.
  • Four surfaces, one front door — the former dozen sidebar views are now four surfaces with modes behind a segmented control: Home, Health, Discovery and Graph, all reachable from a single ribbon button and opening as normal main-area tabs.
  • Community hub — a tabbed home for the gallery: Browse (systems, steps, actions with search plus type and difficulty filters), Contribute (share your canvas as a system, suggest an idea, report a bug with your environment pre-filled, or open Discussions — all through GitHub), Learn (curated links to the guides and manifesto) and Installed. Fully static and GitHub-backed: there is no server to run.
  • Quick capture — one command opens a single title prompt and writes a fleeting note to your Inbox. The fastest path from a thought to a note, with no canvas and no wizard; Home nudges you to develop it later.
  • Reasoning paths — a new Trace reasoning paths command surfaces the argument chains leaving a note (supportsexpandsexampleimplements), every note clickable. Read-only and offline.
  • Guided condition builder — compose a canvas IF condition without writing code: pick a field, an operator and a value, and a validated expression appears in the editor.
  • Property hooks grow up — each hook can now be enabled or disabled without deleting it, given a human description, gated by an optional run condition (event.newValue === 'done'), and tested against the active note with a dry run that previews the changes it would make without writing anything.
  • Knowledge scope — keep config, templates and tooling out of the thinking system with a simple list of excluded path prefixes. Excluded notes never enter the index, so they drop out of the graph, health, discovery, Cultivate and Home all at once.
  • Home becomes opinionated — a greeting and "thinking for N days", a one-click 3D-graph teaser, a growth nudge for fleeting notes, a Cultivate on-ramp, and a prioritised "what to do next" recommendation list.
  • Everywhere and for everyone — the core loop is touch-friendly on mobile and the 3D graph degrades to a navigable list (hubs first, one tap per note) instead of a blank. Surfaces are keyboard-operable: the segmented tabs are a proper ARIA tablist with arrow-key navigation, note names activate with Enter/Space, focus is always visible, and prefers-reduced-motion quiets the graph animation.

Improvements

  • Community browse polish — difficulty badges on gallery systems plus a difficulty filter, linkable authors, an i18n'd gallery, and richer per-difficulty systems (including a ZettelFlow tour that teaches the whole workflow while you build a real note).
  • On-creation actions re-run after indexing — knowledge actions that need the index now run once the note is indexed, so their frontmatter lands even on a cold start. On by default, bounded by a silent timeout and guarded against re-entrancy.
  • AI guardrails — caps, explicit consent, prompt-injection hardening and endpoint safety; AI never fires automatically inside automations.
  • Performance — revision-guarded recomputes, allocation-free adjacency with O(1) edge lookups, de-quadratic hot paths, a lite mode for the graph, and the hidden graph is paused instead of rendering off-screen.
  • Views open as main-area tabs and the ribbon is a single all-in-one button.
  • Canvas integration is defensive — the canvas patcher degrades gracefully when Obsidian's internals change instead of breaking the plugin.

No longer broken

  • Adding a property hook wiped the hooks panel until settings were reopened — the shared search component was calling Obsidian's createEl on the document, which throws and unmounts the React tree. Fixed, with per-row error boundaries so a single bad row can never blank the rest.
  • The 3D graph could render blank, had low link contrast, and its controls were invisible — fixed, and 3D is now the default Graph mode.
  • The canvas empty-state panel stole pointer events from the canvas underneath.
  • Excluded paths did not cover ZettelFlow's own system folders, and the resurface ("forgotten") list read every vault file directly — both now honour knowledge scope, so system notes are never indexed or cultivated.
  • Community difficulty tags overlapped the card text, the type and difficulty filters stacked awkwardly, and the Contribute cards clipped their description — the section is now simply Community, with a header badge row and one tidy filter bar.
  • Share your system silently did nothing without an active canvas; it now explains what to do.
  • Surface views registered before components, and a view type had to be a construction-safe literal — both fixed so a single failing component can't take the plugin down.

Under the hood

  • The release workflow verifies that the pushed tag equals manifest.version and publishes curated notes from RELEASE_NOTES.md.
  • A real safety net: behavioural tests over the vault write paths plus a ratcheting coverage floor enforced in CI. 1054 tests, all blocking.
  • Design by subtraction — the community backend, twelve retired view classes, eleven duplicate commands, the dead community-flow concept and orphaned i18n/CSS were all removed rather than left to rot.
  • A Knowledge State projection surface and a pure KnowledgeContext seam now separate the model from the views, with guards keeping the pure layer Obsidian-free.
  • eslint-plugin-obsidianmd and oxlint stay clean and blocking; en/es locale parity is enforced by a test.

README file from

Github

ZettelFlow

GitHub release Total downloads GitHub Sponsors

Most plugins help you write. Almost none help you think.

Stop managing notes. Start managing knowledge. Obsidian is the store; ZettelFlow is the engine that makes the knowledge inside it evolve — it doesn't manage notes, it manages the processes that transform knowledge. It stands on four pillars:

  • 🌱 Knowledge Lifecycle — every idea has a state (fleeting → permanent → evergreen); ZettelFlow knows the phase and proposes the next move.
  • 🕸️ Semantic Knowledge Graph — relations with meaning: ask "show me every idea that contradicts this" and follow reasoning chains.
  • 🔭 Knowledge Discovery — surface the unexpected: connections you didn't know you'd made, ideas worth challenging, a book outline hiding in a folder.
  • 🩺 Knowledge Health — measure balance and richness, not volume: maturity, knowledge debt, a weekly review, a heatmap of ideas developed.

AI is one Action, never the product — every pillar works fully with AI disabled, and when it is on it proposes, never commits without your verdict: you accept, edit or reject every suggestion. Preserve people's work; simplify the paths: the canvas wizard you know remains the engine's front end while overlapping interfaces are consolidated with compatible access.

Our direction: useful from the first idea, deeper as your practice grows. You choose what deserves attention; recorded activity is not a measure of your understanding. The proposed Knowledge with purpose epic tracks purpose-led Cultivate and first value on your own material. The implementation is described below; real-device walkthroughs and the consented adoption pilot remain pending, not proven by automated tests.

Read the manifesto → · full documentation →


How it works, in one line

ZettelFlow turns an Obsidian Canvas into a guided note-creation wizard. Draw your workflow as a graph — steps as nodes, order as arrows — and the plugin walks you through it every time you create a note, filling in frontmatter, body content, dates, selectors, and more without you touching a template manually. Each step is a piece of the cognitive engine; each note lands already related, cross-checked and scored.


Zettelkasten toolkit

ZettelFlow is more than a note templater — it is a full Zettelkasten workflow. Beyond the canvas wizard, it ships a set of tools that grow and maintain your slip-box:

  • 🎯 Knowledge with purpose — start with your own note or question, inspect bounded recorded context, write a provisional response, and save/pause/resume one inquiry locally. Evidence does not close your question: only you declare it sufficient for now. Markdown snapshots cite only material you explicitly marked as used and never overwrite an existing note. No AI or workflow setup needed; ordinary Cultivate remains available. See Cultivate.

  • 🏠 ZettelFlow Homeopen ZettelFlow, not Obsidian. A single front door: a greeting and "you've been thinking for N days", a one-click 3D-graph teaser, a growth nudge ("N fleeting notes ready to develop") that jumps straight to the latest capture, a Cultivate on-ramp (act on your next idea), your new ideas, main concepts, notes that deserve a review, suggested connections, and a "what to do next" list of prioritized recommendations (click to jump to the note). Read-only, offline — the state of your mind at a glance.

  • ⚡ Quick capturefrom thought to note in one keystroke. A command opens a single title prompt and writes a fleeting note to your Inbox — no canvas, no wizard, the fastest path to a first note. Home then nudges you to develop it later. Works on mobile; bind your own hotkey.

  • 🌱 Cultivatemake one idea evolve. A guided thinking session picks your highest-leverage idea and walks you through small, real moves on it — connect an unlinked neighbour, challenge it with its contradiction, capture a question, advance its lifecycle state, add a source — each a one-click operation on the note. The session refines live as you go, and the metric (degree, maturity, state) is a consequence of the work. Offline; AI is never required. This is the engine that makes knowledge evolve, not just get stored.

  • ⚖️ Agency reviewsee how much you're still deciding. A read-only Health → Agency tab that lists your recorded decisions newest-first with a compact header: the cognitive agency index and the accept/modify/reject breakdown of AI/derived suggestions, plus a one-line plain-language reading. Local, offline, nothing transmitted — a description of your verdict mix, never a grade.

  • 🖼️ Shareable idea cardshow how your thinking grew. One click on the Evolution timeline paints a before→after image of a note — first vs current state, claims gained, links, decisions and days — and saves it as a PNG to share. Built only from already-recorded data; nothing invented, nothing sent.

  • 🔎 Ask your graphquery your thinking, not your frontmatter. A deterministic query surface over the meaning and structure of your slip-box: compose predicates — state:permanent, relation:contradicts, degree>=5, orphan, unsourced, older-than:30 — with AND/OR to answer questions Dataview can't, like "orphaned permanents older than 30 days that contradict X" — or compose one from menus with the guided term builder if you'd rather not memorise the grammar. Every result opens on click; view them as a list or a table; save a useful query — name it, reorder it, and pin it to Home as a live "N notes match …" card. Never AI, always offline.

  • 📝 Note-builder companion pane — a live preview of the note as you build it, plus suggested connections to existing notes so you can link before you file.

  • 📖 Derived projects — turn a folder of notes into the structure of a book / course / article: one command clusters and orders them from the semantic graph into an outline (MOC) that links every source note. It organizes what you already know — graph-derived, offline, no AI.

  • 🔑 Zettel ID action — stamp every note with a stable unique identifier (sortable timestamp or Luhmann-style Folgezettel branching like 21 → 21a → 21a1).

One front door, four surfaces. The panels below live in four surfacesHome, Health, Discovery and Graph — each with modes behind a segmented control, opened from a single ribbon button and as normal Obsidian tabs. Nothing is lost; every panel is a mode. See The four surfaces.

  • 🩺 Slip-box healthone home for the state of your system. Connectivity % (connected / orphaned / unresolved) and a "today" panel (to process · contradictions · connections · open questions, each with a next action); a Knowledge Debt score (0–100) with a severity bar and a per-category drill-down (unreferenced · dangling · unsourced · open questions) each one click from a fix; a Knowledge balance read-out (references · questions · examples · conclusions · concepts) with nudges; and the orphan / dead-end lists. Read-only, offline — so knowledge-debt never piles up unseen. (The former standalone "dashboard" is folded in here.)
  • 🧩 Systems Gallerysomewhere to start. Install a complete knowledge system in one click from the community browser: pick a folder and ZettelFlow writes a ready-to-run canvas plus its step notes (no clipboard, no manual paste), then Run now to use it immediately. Every system carries a difficulty badge (easy · medium · hard) so you can start where you're comfortable and grow into the richer ones. Start with the 🎓 ZettelFlow tour — a three-step guided system that teaches the whole workflow while you build a real note. A dozen shipped systems — Academic research · Zettelkasten v2 · PARA v2 · GTD · Reading · Writing · Software architecture KB · Meeting notes · Daily journal · Concept note · Decision journal · Inquiry — each composing the cognitive actions on creation (the medium/hard ones wire up the full relation · research · maturity pipeline), so a new note lands already related, cross-checked and scored. Offline, no AI. This is the one way to adopt a workflow — it replaces the old starter-flow and methodology-package installers.
  • 🗺️ Map-of-content builder — gather notes by tag/folder into a MOC and refresh it safely; re-runs never touch your own prose.
  • ✨ Connection resurfacing — "talk to your slip-box": for the note you're reading, see older, related notes worth revisiting, plus a daily spark of forgotten ideas.
  • 🗓️ Second-brain review — one command generates a weekly review note: ideas created, orphans, forgotten ideas, and important-but-unreviewed notes over the last 7 days — each a click from a fix.
  • 🔥 Thinking heatmap — a GitHub-style calendar of ideas developed (state advanced, source or connection added) over the last year — momentum, not note-count volume. Fed by a private, local, on-by-default journal (day → count only; no content, no network).
  • 🔭 Morning discovery — up to three surprising connections: pairs of notes that share concepts but aren't linked yet, one click from relating them. Graph-structural, offline — the value of a slip-box is in the links you didn't already know about.
  • 🗺️ Living knowledge map — detects your hubs and the notes that orbit each one, and regenerates as the vault changes so it never goes stale. Read-only, offline — the shape of your knowledge at a glance.
  • 🕸️ Concept navigation — walk your vault like a wiki you wrote: focus a note, see its typed neighbours (in and out), click one to re-focus — Learning → Memory → Spacing effect → Anki, no folders. Ships with headless reasoning paths that read the graph as an argument (supports → expands → example → implements). Read-only, offline.
  • 🌌 3D knowledge graphsee the shape of your thinking. Fly through an immersive Knowledge Galaxy: your slip-box as a 3D force-directed graph over a starfield, notes sized by connectivity, cluster-hued glow halos, links coloured by relation type; search-to-focus, filter by state, and a discovery lens that lights up orphans, dead-ends and contradictions in space. Click a node to open it, take a cinematic tour through your hubs, or export the view to a PNG / WebM clip to share. Read-only, offline; respects reduced-motion, and degrades to the 2D map on mobile. (Graph surface → 3D mode.)
  • ❓ Open questions — every unanswered question in your vault, made first-class: each question:: with no answer yet, its asker(s), and the note most likely to answer it (ranked by shared graph context). Read-only, offline — a live thread instead of a dead end.
  • 🕰️ Evolution timeline — the conceptual history of an idea (not a text diff): a per-note sequence of its lifecycle state + claims, captured only on meaningful change. Local, bounded, opt-in (it stores note content) — see how a claim evolved from "AI replaces us" to "AI is a copilot".
  • ⚖️ Evidence map (experimental) — ask "what do you think about this?" and get a grounded synthesis reconstructed only from your graph: what supports it, what contradicts it, the sourced evidence, the gaps — every row linked to the source note, no invented content, no AI required.
  • ✂️ Atomicity split assist — turn a multi-topic note into linked atomic notes in one command, leaving the source as a hub.
  • 🌱 Note lifecycle states — give every note a state (🌱 fleeting → 📝 literature → 💡 permanent → 🔬 developing → 📚 evergreen → 🪦 archived) and move it with a validated Change note state command; the state lives in plain, configurable frontmatter.
  • 🧭 Knowledge phases for steps — tag each step in a flow with the stage of knowledge work it advances (Capture → Classify → Process → Connect → Develop → Review → Consolidate); the step builder groups your flow by phase, so a workflow reads as an arc of thinking. Distinct from a note's lifecycle state: a step has a phase, a note has a state.
  • ⚡ Event-driven workflows — let a flow react to vault events (a note created, a property or tag change) instead of only running on demand. Opt-in and off by default, throttled, and loop-guarded so a flow can never retrigger itself; an optional zf condition gates each trigger.
  • 🧩 Visual workflow language (WHEN / IF / ACTION / WAIT) — compose a reactive flow on the canvas as a readable program: WHEN a vault event happens, IF a condition holds, run an ACTION, then WAIT for your confirmation. WAIT is a human-in-the-loop pause; the blocks are annotated on the canvas so a flow reads as an arc of thinking.
  • 🧠 Knowledge actions — actions that reason about your slip-box, not just write to a note: detect an orphan, calculate maturity (0–100 from state, links, sources and age), find contradictions, find unanswered questions, suggest the next move (a concrete to-do: add a source, connect it, add an example, develop it), and run the thinking simulator (critical-thinking prompts adapted to a note's gaps — what if it's false? what evidence is missing? what contradicts it?) — deterministic, offline, over the knowledge model. They feed the knowledge-health layer.
  • 🔗 Relation actions — actions that turn connection-making into a workflow step: find related and suggest link rank notes worth linking by shared graph context (co-citation + coupling), and create semantic relation writes a typed edge (supports, contradicts, …) to a target note. Graph-structural, deterministic, offline. To undo one, the Remove a relation command lists the active note's typed relations and deletes the one you pick, after a confirmation.
  • 🔍 Research actions — actions that make sourcing and claim-checking part of the workflow: extract claims, compare claims (surface notes that agree with or contradict yours), find sources (suggest existing vault sources for an under-sourced note), and attach source. Over the claims-and-sources model, deterministic and offline.
  • 🤖 AI actions — optional, off by default — AI is one action category, never the core, and it never writes for you — every completion is a proposal you accept, edit or reject. The whole plugin works fully with AI disabled. Opt in with your own OpenAI-compatible provider (endpoint + key + model — OpenAI, OpenRouter, LM Studio, Ollama…) to summarize, classify, and generate questions. No bundled key, no telemetry; the note content is sent only to the endpoint you configure. See AI provider setup.

New here? Open the community browser and install a system — it writes a ready-to-run canvas and its steps, and offers Run now. Everything else lives under Settings → ZettelFlow.


How it works

Canvas file  ──►  ZettelFlow wizard  ──►  Note in your vault
(your workflow)   (step-by-step UI)      (frontmatter + body merged)
  1. Design — Create a .canvas file. Each node is a step; arrows define the order. Mark one node as the root.
  2. Configure — Right-click any canvas node → Edit ZettelFlow step to add actions (prompt, calendar, selector, tags…).
  3. Run — Click the ZettelFlow ribbon button → Create note (or bind a hotkey to the Open workflow command). ZettelFlow walks the canvas graph and builds the note.

Canvas example Wizard demo


Get started in 5 minutes

Fastest path:

  1. Install ZettelFlow from the Obsidian community plugin browser.
  2. Click the ZettelFlow ribbon button (or run Open ZettelFlow from the command palette).
  3. On the welcome screen, click Start with my own idea, then choose an existing note or capture one.
  4. State a question, inspect selected material, write a response or gap, and Save progress. Optionally install a system from the existing gallery when you want a Canvas workflow.

Manual path (build your own flow):

  1. Create a .canvas file (e.g. flows/daily-note.canvas).
  2. In Settings → ZettelFlow, set that canvas as the "new notes canvas".
  3. Add a note file to the canvas, right-click it → Create managed step, enable Root.
  4. Click the ribbon button → Create note — your first wizard run.

Stuck? Read the Getting started guide or open a Discussion.

Install screenshot


Features

Feature Description
Knowledge with purpose One saved inquiry inside Home → Cultivate: user-chosen note/purpose, selected-only or one-hop context, explicitly consulted references, human-controlled provisional resolution, local pause/resume and create-only Markdown snapshots with recoverable retries. Offline; no mandatory AI, methodology or Canvas setup.
Canvas-based flows Use Obsidian's native canvas as the workflow engine — no custom DSL to learn.
Knowledge patterns Templates that carry behavior — on creation a pattern runs its attached offline knowledge/relation actions through the standard pipeline. The shipped Permanent Note pattern wires find related · find contradictions · suggest links · calculate maturity, computed against your existing graph. Results are recomputed once, automatically, after the note is indexed, so a brand-new note lands already connected (on by default, offline). Additive & backward-compatible; legacy templates are unchanged.
31 built-in actions Prompt, Number, Checkbox, Calendar, Selector, Dynamic selector, Tags, Backlink, CSS classes, Task management, Script, Zettel ID, 🧠 knowledge actions — detect orphan, calculate maturity, find contradiction, find unanswered question, suggest next move, thinking simulator — 🔗 relation actions — find related, suggest link, create semantic relation — 🔍 research actions — extract claims, compare claims, find sources, attach source — and 🤖 optional AI actions (off by default) — summarize, classify, generate questions, challenge idea, synthesize, suggest connections.
Scriptable knowledge API Your own JavaScript gets the same model ZettelFlow uses on itself: zf.knowledge exposes the offline analyses behind Home, Health and the recommendations — debt, balance, open questions, evidence maps, reasoning paths, ideas that grew without your judgement — with the live graph already bound, from any Script action, dynamic selector or vault hook. Read-only: it exposes no vault writer. zf.ai.propose() reuses the provider you configured and returns only what you accepted. The editors read that API rather than a copy of it: completions come from the live object your script will receive (so your own library scripts and an installed Dataview list themselves), hover shows signatures, syntax errors appear in the gutter, and insertable examples mean you never start from an empty editor. One button writes a zettelflow.d.ts into your scripts folder so VS Code knows the API too — your own library functions included. The Weekly focus community system ships as a worked example.
Conditional edges Label a canvas arrow if: frontmatter.type === "meeting" to branch the workflow at runtime — or compose the condition without code in a guided builder (field · operator · value pickers, live validation).
Dynamic templates Use {{title}}, {{date}}, {{frontmatter.key}}, {{canvas.name}} in step body templates.
Live body preview See the rendered note body while editing a step's template (desktop).
Companion pane Live note preview + connection suggestions while the wizard runs — link before you file.
Zettel ID action Stable unique IDs per note: sortable timestamp or Folgezettel branching (21 → 21a → 21a1).
Slip-box health One home for the state of your system: connectivity % + a "today" panel (to process · contradictions · connections · open questions, each with a next action), a Knowledge Debt score (unreferenced · dangling · unsourced · open questions) with a drill-down and one-click fixes, a Knowledge balance read-out (references · questions · examples · conclusions · concepts) with nudges, and the orphan/dead-end lists. Read-only, offline.
ZettelFlow Home The IDE-style front door: greeting + "thinking for N days", a one-click 3D-graph teaser, a growth nudge ("N fleeting notes ready to develop" → jump to the latest), a Cultivate on-ramp (act on your next idea), new ideas, main concepts, notes that deserve a review, suggested connections, and a "what to do next" prioritized recommendation list (click to navigate) — including ideas that grew without your judgement, so structural growth never passes for understanding. Read-only, offline.
Quick capture A command opens a single title prompt and writes a fleeting note to your Inbox — the fastest path from a thought to a note (no canvas, no wizard). Mobile-friendly; bind your own hotkey. Home nudges you to develop it later.
Cultivate (thinking sessions) A guided session that takes your highest-leverage idea and walks you through real moves on it — connect · challenge · question · advance state · add a source — each a one-click operation. Connect, challenge and add-a-source ask for your reading before they reveal theirswhat do you expect this to be related to? what is the strongest argument against it? — because the pause is where the thinking happens (skippable, and one toggle to turn off). Choose your own recipe (turn moves off in settings); a streak (days you exercised judgement, not days something happened) and a cultivation queue count show your momentum and how many ideas are waiting. The session refines live; the maturity/degree/state delta is a consequence of the work. Offline; AI optional. Home surface → Cultivate mode (or the cultivate command / ribbon).
Derived projects Turn a folder of notes into an ordered book/course/article outline (MOC) — clustered and sequenced from the semantic graph, linking every source note. Graph-derived, offline, no AI.
Second-brain review A command that generates a weekly review note — ideas created, orphans, forgotten ideas, important-but-unreviewed — each with a next action.
Thinking heatmap A GitHub-style calendar of ideas developed (state advanced, source/connection added) over the last year, fed by a private on-by-default local journal (day → count only).
Morning discovery Up to three unexpected connections — unlinked note pairs that share concepts — each one click from being related. Graph-structural, offline.
Living knowledge map A read-only sidebar that detects your hubs and the notes clustering around them, regenerating as the vault changes.
Concept navigation Walk your vault by typed relation (in + out) — focus a note, click a neighbour to re-focus, no folders. A Trace reasoning paths command opens a read-only lens of the argument chains leaving a note (supports → expands → example → implements), each note clickable. Offline.
Ask your graph A deterministic query surface over your slip-box's meaning and structure (not frontmatter/tags like Dataview, and never AI): compose predicates — state:, relation:supports/contradicts, incoming:, folder:, degree>=, orphan, unsourced, older-than: … — with AND/OR to answer "orphaned permanents older than 30 days that contradict X". Results open on click as a list or table; compose terms from menus with the guided builder; save a query to name / reorder / pin it to Home. Read-only, offline.
3D knowledge graph An immersive Knowledge Galaxy — an interactive 3D force-directed graph of your slip-box over a starfield (Graph surface → 3D): nodes sized by connectivity and coloured by cluster with cluster-hued glow halos, links coloured by relation type; search-to-focus, state filter, and a discovery lens for orphans · dead-ends · contradictions. A one-click cinematic tour flies through your hubs; share your universe by exporting the view to a PNG or the time-lapse to a WebM clip. Read-only, offline; respects reduced-motion and Lite mode; 2D-map fallback on mobile.
Open questions A vault-wide list of every unanswered question::, its askers, and candidate answering notes ranked by shared graph context. Read-only, offline.
Evolution timeline The conceptual history of an idea — a per-note sequence of its lifecycle state + claim texts, captured only on meaningful change, oldest to newest. Share this idea exports a before→after image card (state change · claims gained · links · decisions · days). Local, bounded, opt-in.
Agency review A read-only Health → Agency tab listing your recorded decisions newest-first with a compact header: the cognitive agency index and the accept/modify/reject breakdown of AI/derived suggestions, plus a one-line plain-language reading. Local, offline, nothing transmitted — a description of your verdict mix, never a grade.
Evidence map (experimental) Compound thinking — a grounded synthesis of a note from your own graph (supports · contradicts · evidence · gaps), every row linked to its source note. No invented content, no AI.
Map-of-content builder Gather notes by tag/folder into a MOC; re-runs update a managed region and keep your prose.
Connection resurfacing Ranked older/related notes for the active note, with a daily-spark serendipity surface.
Atomicity split Split a multi-topic note into linked atomic notes, leaving the source as an index/hub.
Note lifecycle states Classify notes by phase (fleeting → … → archived) and change state with a validated command; state lives in configurable frontmatter (no lock-in).
Knowledge scope Exclude config/template/tooling folders from the thinking system — one simple list of path prefixes. Notes under an excluded path never enter the index, so they drop out of the graph, health, discovery, Cultivate and Home all at once.
Vault hooks Run a script automatically on folder-creation events or frontmatter property changes. Property hooks now have a cleaner manager: enable/disable each hook, give it a description, gate it with a run condition (event.newValue === 'done'), and test it on the active note (a dry-run that previews the changes without writing).
Event-driven workflows Let a flow react to vault events (note created/modified, a property or tag change) instead of only running on demand — off by default, throttled, and loop-guarded.
Visual workflow language Compose a reactive flow on the canvas: WHEN a vault event happens, IF a condition holds, run an ACTION, then WAIT for your confirmation — human-in-the-loop pauses, off by default and loop-guarded.
Action picker by capability The action picker groups actions by cognitive capability (Manipulation · Relations · Knowledge · Research · AI) instead of a flat list.
Remove a relation A command that lists the active note's typed relations and deletes the one you pick, after a confirmation naming the exact edge. Offline.
Community Hub A tabbed community browser — Browse (systems, steps, actions; search + type/difficulty filters, linkable authors), Contribute (share your canvas as a system, suggest an idea, report a bug with your environment pre-filled, or open Discussions — all via GitHub, no account), Learn (curated links to the docs guides + manifesto), and Installed. Fully static and GitHub-backed — no server to run.
Community systems Install a whole knowledge system in one click — the browser fetches a .zftemplate bundle and writes its canvas + step notes to a folder (no clipboard). Each system shows a difficulty badge (easy / medium / hard); a ZettelFlow tour system teaches the full workflow while you build a real note. A system that ships JavaScript says so before you install it, and names the steps that carry it.
.zftemplate export/import Bundle a canvas and its step files into a single portable file to share with others.
Notes history Sidebar leaf showing recently built notes with quick-open links.
Mobile support Works on iOS and Android (isDesktopOnly: false) — the core loop (capture → cultivate → advance → health) is touch-friendly, and the 3D graph degrades to a navigable list (hubs first, each note one tap) instead of a blank.
Accessibility Keyboard-operable surfaces — the segmented tabs are a WAI-ARIA tablist with arrow-key navigation, note names activate with Enter/Space, focus is always visible, and prefers-reduced-motion quiets the graph animation.

Capabilities & privacy

ZettelFlow collects no telemetry and sends no personal data or vault contents anywhere. The plugin uses these capabilities:

  • File system (vault). Reads canvas flow files and creates/edits notes (e.g. the Change note state command writes a single lifecycle property to the active note). All access goes through Obsidian's Vault / FrontmatterService API — never a hardcoded path. Works on desktop and mobile.
  • Vault enumeration. ZettelFlow lists every markdown file path to build the offline knowledge model that health, discovery, the graph and Cultivate all read. Paths and metadata only, all local — and you can keep folders out of it with the knowledge scope.
  • Network — two opt-in paths, nothing until you use them. The community gallery does read-only GETs of the static catalog on GitHub (no backend, no account, no uploads), and the optional AI provider sends length-bounded note content to the single https endpoint you configure. Both are off until you open the browser or enable AI.
  • Dynamic code execution. The Script action, dynamic selectors, vault hooks and workflow-event conditions run JavaScript you write, with the plugin's access to your vault — including read-only access to the whole knowledge model via zf.knowledge — so only run scripts you trust. No remote code is ever fetched or executed, and every runtime function is built in one audited module.
  • Clipboard — write only. The “copy” buttons put a step or action configuration on your clipboard as JSON. ZettelFlow never reads your clipboard.

See Capabilities & privacy for full details.


Contributing


Support

If ZettelFlow saves you time, consider supporting development:

"Buy Me A Coffee"