yonxao365 downloadsObsidian mind map / mindmap plugin for visual thinking and knowledge management. Create interactive SVG maps from yxmm code blocks with layouts, themes, shortcuts, export, and fullscreen editing.
A feature-rich Obsidian mind map plugin that renders yxmm code blocks in Markdown documents as interactive SVG mind maps and various structural diagrams.
Demo screenshot:

#, ##, ### markers for hierarchy; plain text lines automatically merge into multi-line topic contentCreate a yxmm code block in your Markdown document:
Moving the cursor out of the code block will display it as a mind map.
```yxmm
```
Right-click menu
Right-click in an Obsidian note: click Insert Mind Map.

```yxmm
---
structure:
layout: mindmap-right
connectorStyle: curve
color:
scheme: ocean
---
# Central Topic
## Branch Topic A
### Subtopic A1
### Subtopic A2
## Branch Topic B
### Subtopic B1
```
# is a level-1 topic, ## is a level-2 topic, ### is a level-3 topic, and so on.#, ##, ### create new topics; ordinary text lines merge into the nearest previous topic as multi-line content.| Marker | Meaning |
|---|---|
# |
Level-1 topic (central / root) |
## |
Level-2 topic (branch topic) |
### |
Normal topic (level-3 and deeper) |
Ordinary text lines merge into the nearest previous topic as multi-line content:
```yxmm
# Central Topic
## Multi-line Topic Example
This is the second line
This is the third line
### Subtopic
```
Topic content supports lightweight inline style markers, links, tags, tasks, images, notes, attachments, and block-level formatting:
```yxmm
# Central Topic
## **Bold**, *italic*, ~~strikethrough~~, ++underline++
## {red|Semantic color text} and {#3b82f6|Hex color text}
## Lists, tasks, media, notes, equations, and code blocks
- Unordered list item
- Nested list item
- [ ] Todo item
- [x] Done item
1. Ordered list item
2. Second item

![[vault-image.png|Cover image]]
This is a #tag and [link](https://example.com)
[[Internal note|Open note]]
> This note is shown from an icon after the topic
> It can span multiple lines
@[Spec](docs/spec.pdf)
@[[design.fig|Design file]]
$$
E = mc^2
$$
~~~js
const topic = 'yonxao-mindmap';
~~~
```
Inline styles:
| Syntax | Effect |
|---|---|
**Text** |
Bold |
*Text* |
Italic |
~~Text~~ |
|
++Text++ |
++Underline++ |
{red|Text} |
Semantic color text |
{#3b82f6|Text} |
Hex color text |
#tag |
Tag |
[Text](url) |
External link |
[[Note]] |
Obsidian link |
Block-level formats:
| Syntax | Effect |
|---|---|
- List item |
Unordered list |
- [ ] Task |
Unchecked task |
- [x] Task |
Checked task |
1. List item |
Ordered list |
 |
Image |
![[image.png]] |
Obsidian attachment image |
> Note |
Note icon with hover/click popover |
@[Text](path) |
Attachment icon with open/copy actions |
@[[file|Text]] |
Obsidian-style attachment link |
$$ ... $$ |
Equation (MathJax rendered) |
~~~lang ... ~~~ |
Code block (monospace font) |
Link syntax:
| Syntax | Description |
|---|---|
[Text](https://...) |
External link with a ↗ marker; opens in the browser |
[Text](mailto:...) |
Mail link, handled as an external link |
[Text](Note name) |
Markdown-style internal target; opens via Obsidian when the vault resolves it |
[[Note]] |
Obsidian internal link with a ◇ marker |
[[Note|Alias]] |
Obsidian internal link with custom display text |
[[File#Heading]] |
Obsidian anchor link; opening depends on the current vault metadata resolver |
Image syntax:
| Syntax | Description |
|---|---|
 |
Markdown image; Alt is rendered as the caption below the image |
 |
External image URL |
![[image.png]] |
Obsidian attachment image |
![[image.png|Caption]] |
Obsidian attachment image with caption |
 |
Requested width in px; height uses the natural or fallback ratio |
 |
Requested width and height, still constrained by topic text width |
 |
Percent of the image's natural width, still constrained by the topic width cap |
 |
Enables original-size preview behavior; in-topic rendering is still constrained by layout |
![[image.png|50%|Caption]] |
Obsidian syntax can combine percent and caption; parameter order is flexible |
Attachment syntax:
| Syntax | Description |
|---|---|
@[Label](path/to.pdf) |
Markdown-style attachment; Label is shown in the popover |
@[Label](https://...) |
External attachment URL; icon click or Open uses the browser |
@[Label](obsidian://...) |
Obsidian URI; opened as an external protocol |
@[[file.pdf]] |
Obsidian attachment link; opens in Obsidian when the target exists |
@[[file.pdf|Label]] |
Obsidian attachment link with custom display text |
red, green, blue, yellow, orange, purple, pink, gray, black, white↗ for external links and ◇ for Obsidian/internal links| and support width, width x height, percent, original, and captions. Explicit pixel widths participate in topic width measurement and can expand image topics up to the topic width cap; percentages use the natural image width and remain capped by the topic width. Before the natural size is known, percent widths temporarily fall back to the current topic's available text width and relayout after the image loads. The default topic image width is min(220px, available topic text width) with the natural image ratio or a 0.62 fallback aspect ratio. Obsidian attachment images are resolved through the vault when possibleAdd attributes in [key=value] format at the end of a topic-level marker line:
```yxmm
# Central Topic [color=#3b82f6]
## Branch Topic [icon=book layout=mindmap-right]
### Subtopic [fontSize=14 fontWeight=700]
### Note [align=center]
```
Supported attributes:
| Attribute | Example | Description |
|---|---|---|
color |
[color=#3b82f6] |
Topic color |
icon |
[icon=book] |
Topic icon (Lucide icon name) |
layout |
[layout=mindmap-right] |
Local layout type, overrides code block config |
fontSize |
[fontSize=16] |
Font size override (9-96px) |
fontWeight |
[fontWeight=700] |
Font weight override (100-900) |
fontFamily |
[fontFamily="..."] |
Font family override |
lineHeight |
[lineHeight=20] |
Line height override (12-160px) |
align |
[align=center] |
Text alignment: auto/left/center/right |
maxWidth |
[maxWidth=300] |
Max width override (120-2000px) |
id |
[id=t-123] |
Stable ID generated when advanced structures reference a topic |
Right-click a topic in map mode to create structures beyond the normal parent-child hierarchy:
When a boundary title avoids a topic above it, the renderer reserves vertical space across the remaining layout so tree parents stay aligned with their children and top-level branches remain visually separated.
Summary and boundary creation uses a draggable, translucent action bar at the bottom of the canvas. It shows the selected topic count and complete validation message; drag the text area to uncover topics underneath. Use Create / Cancel, press Enter to create, or press Esc to cancel. The original context-menu finish action remains available. The action bar also works in window and physical fullscreen modes.
Structures are stored in a dedicated block at the end of the body. Map operations generate three-digit IDs automatically:
# Feature List
## Editing [id=t-101]
### Add Topic [id=t-102]
### Delete Topic [id=t-103]
## Export [id=t-104]
@structures
@relation [id=r-101 from=t-101 to=t-104 text="Edit then export" fromAnchor=right toAnchor=left]
@summary [id=s-101 topics=t-102,t-103 text="Topic actions"]
@boundary [id=b-101 topics=t-101 text="Editing scope"]
@end
Default relation options (direction=forward and lineStyle=curve) are omitted when config trimming is enabled and written explicitly when Save all config items is enabled. Manually dragged endpoints are persisted as fromAnchor / toAnchor; supported values are top-left, top, top-right, left, right, bottom-left, bottom, and bottom-right. A structure-level color attribute overrides the code-block and global advanced-structure colors. Source mode provides basic highlighting for structure keywords, attributes, IDs, and values.
Add a YAML config block wrapped in --- at the top of the code block to override plugin global defaults:
```yxmm
---
display:
viewFit: fit
fitViewNoUpscale: true
saveFullConfig: true
structure:
layout: mindmap-right
connectorStyle: curve
topicMaxWidth:
global: 240
color:
scheme: rainbow
buttonColorMode: topic
advancedStructure:
relation: "#526b8a"
summary: "#705b8f"
boundary: "#477970"
font:
family: "var(--font-text)"
size: 16
weight: 400
lineHeight: 20
align: auto
interaction:
toolbar:
corner: top-right
placement: outside
topicControlVisibility: toggle-always
wheelZoom: false
tabIndent: true
---
# Central Topic
## Branch Topic
```
| Layout | Description |
|---|---|
mindmap-right |
Rightward mind map (default) |
mindmap-left |
Leftward mind map |
mindmap-bidirectional |
Bidirectional mind map |
mindmap-up |
Upward mind map |
mindmap-down |
Downward mind map |
mindmap-vertical |
Vertical bidirectional mind map |
Mind map layouts support switching connector styles (curve/straight/elbow) and branch expansion modes (side/hanging).
| Layout | Description |
|---|---|
tree |
Tree diagram |
tree-right |
Rightward tree diagram |
tree-left |
Leftward tree diagram |
| Layout | Description |
|---|---|
org |
Organization chart |
org-right |
Rightward organization chart |
| Layout | Description |
|---|---|
timeline |
Timeline |
timeline-up |
Upper-side timeline |
timeline-down |
Lower-side timeline |
| Layout | Description |
|---|---|
radial |
Radial map |
| Layout | Description |
|---|---|
fishbone-right |
Rightward fishbone diagram: fish head on the left, spine and content expand right |
fishbone-left |
Leftward fishbone diagram: fish head on the right, spine and content expand left |
| Layout | Description |
|---|---|
tree-table |
Tree table |
tree-table-stepped |
Stepped tree table |
| Operation | Description |
|---|---|
| Double-click a topic | Quickly edit topic content |
| Click collapse button | Collapse/expand subtopics |
| Drag a topic | Rearrange sibling order or move to another position |
| Right-click a topic | Open context menu |
| Windows | macOS | Function | Context |
|---|---|---|---|
↑ ↓ ← → |
↑ ↓ ← → |
Navigate topics | All layouts |
Tab |
Tab |
Add child topic | Edit mode |
Enter |
Enter |
Add sibling topic below | Edit mode |
Shift + Enter |
Shift + Enter |
Add sibling topic above | Edit mode |
Delete |
Delete / Cmd + Backspace |
Delete topic | Edit mode |
Space |
Space |
Open inline editor | Edit mode |
` |
` |
Open topic edit panel | Edit mode |
Alt + / |
Option + / |
Toggle collapse/expand | Always available |
Ctrl + C / X / V |
Cmd + C / X / V |
Copy/cut/paste topic | Edit mode |
Ctrl + Alt + C |
Cmd + Option + C |
Copy topic with attributes | Edit mode |
Ctrl + Alt + V |
Cmd + Option + V |
Paste topic with attributes | Edit mode |
Ctrl + Z / Y |
Cmd + Z / Shift + Z |
Undo/redo | Edit mode |
Alt + + / - |
Option + + / - |
Zoom in/out | Always available |
Alt + 0 |
Option + 0 |
Fit view | Always available |
Alt + 1 |
Option + 1 |
Original size (100%) | Always available |
Alt + 2 |
Option + 2 |
Window fullscreen | Always available |
Alt + 3 |
Option + 3 |
Physical fullscreen | Always available |
Alt + , |
Option + , |
Open config panel | Always available |
Ctrl + S |
Cmd + S |
Save source | Source mode |
Ctrl/Cmd+Xcuts the selected topic together with its attributes and all subtopics. UseCtrl/Cmd+Vto restore the complete subtree under the target topic. RegularCtrl/Cmd+Cstill copies topic text only.Arrow key navigation logic: In horizontal layouts, left/right navigates parent-child relationships and up/down navigates siblings; vertical layouts are the opposite; other layouts navigate by spatial proximity.
Topic context menu:
| Action | Description |
|---|---|
| Edit Topic | Open inline text editor |
| Topic Edit Panel | Open full attribute editing panel |
| Copy Topic Content | Copy topic plain text |
| Cut Topic | Cut the topic, attributes, and subtopics |
| Paste Topic | Paste content under the selected topic |
| Copy Subtree Content | Copy subtree as plain text |
| Copy Indented Subtree Content | Copy subtree as indented text |
| Copy Topic with Attributes | Copy the topic, its attributes, and all subtopics |
| Paste Topic with Attributes | Paste the topic tree under the selected topic |
| Add Subtopic | Add child topic under selected topic |
| Add Previous Sibling | Add sibling before the selected topic |
| Add Next Sibling | Add sibling after the selected topic |
| Collapse/Expand Subtopic | Toggle collapse state |
| Expand All Subtopics | Recursively expand all descendants |
| Collapse All Subtopics | Recursively collapse all descendants |
| Create Relation | Create a relation between two topics |
| Create Summary | Create a summary for consecutive siblings |
| Create Boundary | Create a boundary around selected topics |
| Delete Topic | Confirm and delete (shows count if has children) |
Canvas context menu (on blank area):
| Action | Description |
|---|---|
| Undo | Undo the previous operation |
| Redo | Restore the undone operation |
| Copy Text | Copy topic tree as plain text |
| Copy Indented Text | Copy topic tree as indented format |
| Copy Source | Copy full code block content |
| Copy Config Section | Copy the YAML config section only |
| Export PNG | Download as PNG image |
| Copy PNG | Copy image to clipboard |
| Fit View | Auto-adjust viewport to fit the entire map |
| Original Size | Restore 100% zoom |
| Delete Mind Map | Delete the entire yxmm code block |
Press ` (backtick) while a topic is selected, or use the context menu to open the topic edit panel — a floating panel with:
| Field | Description |
|---|---|
| Content | Multi-line text input with rich text toolbar |
| Color | Topic color (swatches + hex color picker) |
| Icon | Icon picker (Lucide icons) |
| Max Width | Override global/level configuration |
| Font Family | Dropdown: inherit / Obsidian variables / system fonts / custom |
| Font Size | 9-96px |
| Font Weight | 100-900 |
| Line Height | 12-160px |
Rich text toolbar:
| Button | Insert / edit content | Rendered behavior |
|---|---|---|
| B | **text** |
Bold selected text; inserts placeholder text when nothing is selected |
| I | *text* |
Italic selected text |
| U | ++text++ |
Underline selected text |
| S | ~~text~~ |
Strikethrough selected text |
| A | {color|text} |
Opens the color menu with semantic colors and custom Hex colors |
| Tag | #tag |
Same tag text keeps the same color in the current map |
| Link | [text](url) |
External links show ↗; Obsidian/internal links show ◇ |
| Eraser | Clear inline style markers | Clears the selection, or the whole content field when nothing is selected |
| List | - List item |
Inserts an unordered list item; indent with 2 spaces for nesting |
| Number | 1. List item |
Inserts an ordered item; same-level numbering increments visually |
| Task | - [ ] Task |
Inserts an unchecked task; write - [x] for checked tasks |
| Σ | $$ ... $$ |
Inserts an equation block rendered via Obsidian/MathJax when possible |
</> |
~~~lang ... ~~~ |
Inserts a code block with monospace font and background |
| Image |  |
Inserts an image block; supports |WxH, |percent, and |original hints |
| Note | > Note |
Adds a yellow note icon after the topic with a dynamic popover |
| Attach | @[label](path) / @[[file|label]] |
Adds an attachment icon; click to open, popover offers Open / Copy |
Large text editor:
Cmd/Ctrl + Enter to save, Escape to cancelClick the "Source/Map Toggle" button in the toolbar or double-click the code block area to enter source editing mode:
Tab key inserts level markersdirty/synced status indicatorCmd/Ctrl + S to save| Button | Description |
|---|---|
| Source/Map Toggle | Switch between source editor and map view |
| Config Panel | Open visual configuration interface |
| Fit View | Auto-adjust viewport to fit the entire map |
| Window Fullscreen | Expand to browser viewport |
| Physical Fullscreen | Use Fullscreen API |
| Zoom In | Zoom in |
| Zoom Out | Zoom out |
| Reset Collapse | Expand all topics |
| Drag Handle | Drag toolbar to any position (auto-snaps to nearest corner) |
Topic attributes > Code block config > Plugin global defaults > Plugin built-in defaults
Open the visual config panel in Obsidian Settings → Community plugins → yonxao-mindmap. There are 8 tabs:
1. Display
fitViewNoUpscale: Don't upscale when fitting viewfitViewMaxScale: Maximum zoom multiplier (1-6)saveFullConfig: Config trimming toggle2. Structure
3. Color
inherit-accent / subtle / topic / custom4. Font
5. Interaction
always / toggle-always / hover6. Shortcuts
7. Watermark
8. Advanced
Config panel common features:
- Drag-to-move: Drag the title bar to reposition the panel
- Inherited value display: Gray text shows inherited values, blue text shows explicit values
- Status bar: Shows configuration state
- Apply / Save & Close / Cancel buttons
A language option is also available in preferences. The initial default language follows Obsidian's current language; if the Obsidian language is not yet supported, it falls back to English. Currently supported:
When display.saveFullConfig is false (the default), values that match the effective global or built-in defaults are omitted when saved to keep the config section concise.
Additional trimming rules:
branchExpansion fieldfitViewNoUpscale / fitViewMaxScalebuttonColorbranchExpansion| Feature | Description |
|---|---|
| Export PNG | Download as PNG image file |
| Copy PNG | Copy PNG image to system clipboard |
| Copy Text | Copy topic tree as plain text |
| Copy Indented Text | Copy as indented format text |
| Copy Subtree | Copy subtree plain text (with/without indentation) |
| Copy Source | Copy full code block content |
| Copy Config Section | Copy the YAML config section only |
The plugin maintains an internal clipboard for topic-level copy/cut/paste:
sourcePath + sectionInfoCommunity pluginsBrowseyonxao-mindmapInstall, then click Enableyonxao-mindmap.zip.obsidian/plugins/)This project uses AGPLv3 + Commercial dual licensing:
Issues and Pull Requests are welcome!
⭐ If this plugin helps you, please give it a star!