README file from
GithubEnglish | 中文
🧠 MindMap Studio
Mind map rendering for Markdown inside Obsidian. Open
.mindmap.md— a normal Markdown file — and edit it as a mind map; the Markdown outline round-trips losslessly. Powered by the simple-mind-map engine, developed by WinterMosquito.
🚀 Quick start
- Create: run Create new mind map (command palette or ribbon) — a
MindMap2026-09-06.mindmap.mdfile is created and opens as a mind map. - Edit: the file is ordinary Markdown, so its outline becomes the map — add/edit/delete nodes, drag to rearrange, attach images or links.
- Back & save: use Switch to Markdown to return anytime; edits are written back to the file (layout & viewport live in the plugin's
data.json).

✨ Why MindMap Studio
The plugin is a rendering layer, not a file-format converter. .mindmap.md files are 100% standard Markdown — your notes, links, backlinks, search and Git all work as usual. A Markdown outline is parsed into a mind map; when you edit the map, the changes are written back as Markdown.
🚀 Features
- Markdown-native:
.mindmap.mdis ordinary Markdown (headings + lists). No proprietary format. - Round-trip fidelity: unedited lines are written back verbatim (frontmatter preserved); headings
#–######map to node levels 1–6, nested lists to deeper levels. - Obsidian-native wikilinks:
[[note]]shows as its link text, with hover preview andCtrl+click(Windows/Linux) orCommand+click(macOS) to open; the add-link dialog searches notes and linkable attachments. New links are always written as[[wikilinks]], regardless of Obsidian's link-format settings, so document links keep their dedicated icon. A node shows only the alias (the note name when there is none); editing the text of a pure wikilink node edits that alias and writes back[[note|new alias]]. Attaching a wikilink — dropping a vault note or attachment onto the node, or picking one in the add-link dialog — overwrites the node's text with the link's display name, turning the node into a pure wikilink; URL links stay icon-only. - Images: vault image suggestions, uniform sizing,
![[path]]round-trip; drag the corner handle to resize a node image — the size is written back as Obsidian's official embed syntax (![[img.png|300]]width-only,|300x150explicit,for external images); clear a node's text and the node becomes image-exclusive — an image-exclusive node has no text, so node search never matches it. Inline images also render in text/paragraph nodes (its first line; links inside a paragraph stay plain text). - Opens at 100% with the whole map centred; Fit to canvas zooms out for an overview and Reset zoom returns to 100% while keeping the visible content in place (auto-arrange ends with fit-to-canvas); six layouts (switching a layout auto-arranges and fits the map) with per-file connector styles (Auto follows the layout; curve / direct / elbow — switchable for Logical structure / Mind map / Organization chart; the other three are fixed-straight and show Auto), node search, auto-arrange, performance mode for large maps, PNG export; assisted drag reparenting — drop near a node's center to nest as its child, or between two siblings to insert in between (with live highlight).
- Persistence: layout, viewport and "open as" preference are kept per file (in plugin data), surviving reopen, rename, and view switching.
- Central node ↔ filename: editing the central node renames the
.mindmap.mdfile (Obsidian updates links/backlinks).
📖 Usage
1) Create & open a mind map
- Run Create new mind map (command palette or ribbon) → a file like
MindMap2026-09-06.mindmap.mdis created and opens in the mind-map view. - Any
.mindmap.mdfile opens from its context menu → Open as mind map (or the same command). The view you chose is remembered.
2) How Markdown becomes a map
Every .mindmap.md is 100% standard Markdown — the plugin renders it as a mind map and writes your edits back:
# Project plan ← central node (= file name)
## Goals ← first-level child node (#)
- Milestone 1 ← child node (list)
- Milestone 2
###### Details ← level-6 heading
- Seventh-level item ← list nested under a heading → level 7
#–######→ node levels 1–6 · nested lists go deeper ·[[note]]/[[note|alias]]→ clickable link (the node shows only the alias) ·![[img]]→ image (|300sets the size) · paragraphs & fenced code stay as text.Non-image embeds such as
![[report.pdf]]are shown as an attachment icon: click the icon, orCtrl/Command+click the node, to open it (PDF, audio, video); hovering the node triggers Obsidian's native preview as well. They are not rendered inline — a mind-map node cannot host Obsidian's inline media view.
3) Everyday actions (in the mind-map view)
| Want to | Do |
|---|---|
| Edit a node's text | Double-click the node (or press F2; text inputs keep F2). For a pure wikilink node you are editing its alias — saving writes [[note|new alias]] and the node still shows only the alias |
| Add a child / sibling | Right-click the node → Add child node / Add sibling node (siblings also via Enter) |
| Delete a node | Right-click → Delete node |
| Add a link | Select a node → toolbar/menu Add link (pick a vault note or paste a URL). A wikilink overwrites the node's text with its display name (pure wikilink node); URLs stay icon-only |
| Add an image | Select a node → Add image (from vault, clipboard, or a file) |
| Attach by drag & drop | Drag a vault note or attachment from the file explorer onto a selected node — it becomes the node's wikilink and the node's text becomes the display name (dragging an image sets the node image); with nothing selected, a linked node is created under the root (images need a selected node) |
| Rearrange | Drag near another node's center to nest as its child; drag between two siblings to insert in between (the drop target highlights) |
| Resize a node image | Hover the image, drag its bottom-right handle (aspect ratio preserved) |
| Make a node image-only | Clear the node's text: double-click → empty, or right-click → Remove text |
| Clean the layout | Toolbar: Auto arrange, Reset zoom (100%), Fit to canvas, zoom in/out |
| Find a node | Toolbar search box |
| Split a node's links | Select a node → command Split links into child nodes: document/attachment links mixed with text move into child nodes (the node keeps its text; images and external URLs stay). Editing such a node also triggers it — turn it off in settings. Command Split all mixed links in document batch-processes the whole file, including untouched notes |
| Export | Toolbar Export PNG |
| Back to Markdown | Switch to Markdown (restores source/preview mode) |
4) Saving & persistence
- Unedited lines are written back verbatim (frontmatter preserved); editing a pure wikilink node (the whole line is one wikilink) edits its alias, written back as
[[note|new alias]](clearing the text drops the alias and keeps the link; nodes that mix text and a link still round-trip as "text + link"). - Layout, viewport and "open as" are kept per file in the plugin
data.json; node image sizes go into the note itself as official embed syntax (![[img|300]]). - Editing the central node renames the
.mindmap.md(Obsidian updates links/backlinks). - Config is local; no telemetry.
The full Markdown ↔ mind-map mapping rules live in docs/markdown-mindmap-standard.md.
📦 Install
- Community plugins (once listed): Settings → Community plugins → search MindMap Studio.
- From GitHub releases (recommended): download the latest release assets (
main.js,manifest.json,styles.css) from the repo Releases page, copy them into<vault>/.obsidian/plugins/mindmap-studio/, reload Obsidian, then enable the plugin in Settings → Community plugins. - Build from source:
npm install && npm run buildproducesmain.js; copy it together withmanifest.jsonandstyles.cssinto the plugin folder.
Requires Obsidian 1.13.0 or later. Desktop only (Windows, macOS, Linux). Config is stored locally (plugin
data.json); no telemetry.main.jsis built in CI and attached to each GitHub Release (it is not committed to the repo).
🛠 Development
npm install
npm run dev # watch mode
npm run build # type-check + production bundle (main.js)
npm test # regression suite (vitest)
npm run lint
The engine (vendor/simple-mind-map.cjs) is vendored and must not be hand-edited; rebuild from upstream source when upgrading. Bundled third-party licences are listed in vendor/THIRD-PARTY-NOTICES.md.
⚖️ License
MIT — see the LICENSE file in the repository root.