Visualize your Markdown notes as interactive mind maps while keeping Markdown as the source of truth.
[!IMPORTANT] Public release mirror — implementation changes are maintained in the monorepo.
The authoritative source code and development work live in the BloomMD monorepo. This repository exists for public Obsidian release artifacts and distribution through BRAT. Use Issues for user-facing plugin bugs and compatibility reports; implementation pull requests belong in the monorepo.
See an Obsidian note as an editable Markdown map, without moving your files into a new format.
BloomMD turns Markdown structure into a visual workspace. In Obsidian, this plugin maps the note or folder you already have, lets you work with headings as nodes, and writes structural edits back to normal .md files.
The wider BloomMD product is evolving as a local-first Markdown workspace: browser demo, macOS-first desktop beta, Obsidian compatibility, templates, and optional sync/team workflows later. This repository contains the Obsidian companion plugin.
Your headings become the map. # becomes the root, ## its children, and the text under each heading stays as that node's content.
Structure edits go back into the note. Rename a node, add a sibling or child, delete a subtree, copy/paste a branch, or reparent a branch; confirmed changes rewrite the same file through Obsidian's Vault API.
Whole folders can be mapped. Visualize current folder puts notes from the current folder onto one canvas so project structure is visible across files.
Markdown links become relationships. External links, [[wiki links]], and linked mentions appear as edges and can be opened from the inspector.
Layout stays local. Node positions, viewport, and collapsed branches live in .obsidian/plugins/bloommd/data.json. Your Markdown does not accumulate layout metadata.
Renaming stays coherent. Renaming a note or folder in Obsidian carries its local map layout and any explicit sharing binding to the new vault-relative path. Markdown, cloud document identity, tokens, and workspace rights are unchanged.
Sharing is explicit. A note remains entirely local until you choose to share that individual note with a BloomMD workspace. Shared changes are synchronized as Markdown/Yjs updates; the local vault path and layout data stay local.
Read this before using the plugin in an important vault.
## Goal <!-- bloommd:id=a1b2c3 -->. These comments give nodes stable IDs and are invisible in Obsidian preview.Collaboration is opt-in for each note. It is useful when a local Obsidian note should be edited with the same people who use a BloomMD workspace; it does not turn the complete vault into a cloud vault.
https://bloommd.app.data.json. Leave the workspace ID empty to use your default
workspace, or enter the workspace ID explicitly.While offline, edits remain local and are offered to the shared mirror after the connection returns. If access is revoked, the plugin stops writing remote updates and requires a new explicit share.
If an AI agent such as OpenClaw files notes into this vault through bloommd-wiki agent mcp, the
BloomMD agent panel (robot icon in the ribbon, or Open agent panel) is where you stay in
charge. Everything lives in the vault's .bloommd/ folder, works on desktop and iPad, and follows
the same rules as the bloommd-wiki agent commands.
.bloommd/requests/. The agent picks it up with
bloommd_requests, answers with bloommd_answer_request, and its answer appears here; changes it
makes for the request follow its rights (direct or as proposal).Only a person can approve: the agent has no tool for it. Nothing is sent anywhere by the plugin; the agent reads and writes the vault folder itself.
moellenbeck-digital/bloommd-obsidian.BRAT keeps the plugin updated as beta releases are tagged.
manifest.json, main.js, shared-runtime.js, styles.css, and icon.png from the latest release.<vault>/.obsidian/plugins/bloommd/.BloomMD: Visualize current note - also available from the ribbon.BloomMD: Visualize current folder.BloomMD: Open current note in BloomMD - opens the note in BloomMD Desktop at the selected node (also the Open app toolbar button). A running app takes the note on every platform; macOS and Linux (installed package) also start the app when needed, on Windows start BloomMD Desktop first.BloomMD: Share current note with BloomMD workspace.BloomMD: Stop sharing current note with BloomMD workspace.BloomMD: Open agent panel - also available from the ribbon.BloomMD: Ask agent about current note.| Action | How |
|---|---|
| Pan / zoom | Drag empty canvas; use wheel or trackpad to zoom at the cursor |
| Move a node visually | Drag the node body |
| Reparent a branch | Drag the orange handle from a parent onto another node |
| Rename | Double-click or press F2 |
| Add child / sibling | Node toolbar, or Tab / Enter |
| Multi-select | Hold Shift, then drag the selection |
| Copy / paste a branch | Cmd/Ctrl+C, select destination, then Cmd/Ctrl+V |
| Undo / redo | Cmd/Ctrl+Z / Cmd/Ctrl+Shift+Z |
| Edit content | Open the inspector; edits autosave and detect external changes |
| Pen on the map (draw mode) | Tap selects, double tap opens, hold opens the menu, hold and drag moves; a line from a node into free space adds a child, node to node connects, a zigzag scratches ink out |
Study mode (hat icon) covers node contents until you reveal them. With Learning progress on
(Settings → BloomMD → Learning, on by default), every revealed node offers rating buttons — by
default New, Unsure and Got it, or five levels with your own names. Tap them with Apple
Pencil or a finger, click them, or press Space to reveal the selected node and 1–5 to rate it
(the keyboard then moves on to the next node of the session).
12/30 mastered · 5 due, the study order (Due first, Map order, Only due,
Only unsure), Next, and an optional exam date with days left and how many not-yet-mastered
nodes to cover per day..bloommd/learning/<key>.json, so it syncs with the vault (for example iCloud) between Mac and
iPad. The key is the note's frontmatter id when it has one, otherwise a hash of its path; a
path-keyed file moves along when the note is renamed in Obsidian. Inside, ratings are keyed by
the nodes' bloommd:id, so renaming or moving a node keeps its progress. Every save merges node by
node with the file on disk (the newer rating wins), so sessions on two devices do not overwrite
each other. Obsidian Sync does not sync hidden folders; progress then stays per device.Use GitHub Issues for plugin bugs and compatibility reports. Use the beta and contact channels linked from https://bloommd.io for product feedback, feature requests, and private reports.
The public product direction is documented on https://bloommd.io: local-first Markdown maps, bidirectional editing, templates, Obsidian compatibility, desktop workflows, optional sync, and team/cloud features after the core workflow is stable.
This plugin follows that roadmap as the Obsidian companion layer. Local TODO files are not used as a separate source of truth, and this README intentionally avoids linking to private or restricted GitHub project boards.
bun install
bun run typecheck
bun run test
bun run build
bun run release:verify
This checkout is a public release mirror. Development changes belong in the BloomMD monorepo; the commands above verify a generated public snapshot. The Markdown engine is covered by unit tests for CommonMark edge cases, including Setext headings, fenced and indented code, HTML blocks, unterminated frontmatter, ATX closing sequences, and heading-depth limits. See RELEASE.md for the release process.
BloomMD for Obsidian is licensed under the MIT License, including the
shared BloomMD Core snapshots (src/markdown-document.ts, src/core-types.ts) that the
public mirror carries for each release. The rest of BloomMD (apps, sync server and the
monorepo) is licensed under the Elastic License 2.0; see https://bloommd.io/lizenz.