kpyr4k downloadsWrite notes as branching Markdown cards while keeping a normal note as the source of truth.
Think in branches. Keep one note.
Arbor is a writing-first branching editor for Obsidian. Build a note as small Markdown blocks in a horizontal Branch Editor or a horizontal/vertical Tree Overview, while keeping the note itself as a normal .md file.
No separate canvas file. No sidecar database.



The core idea:
Arbor works on desktop, phones, and tablets. It requires Obsidian >= 1.7.2.
Arbor is for notes where order matters, but thought does not arrive linearly.
Good fit:
Arbor is not a canvas, mind map, or whiteboard. It is still note editing, just with a branching spatial view.
ARBORUse a clean export copy as the Markdown handoff for Pandoc or another DOCX converter; Arbor does not generate DOCX directly.
Output Profiles let one Arbor note hold the complete tree while producing different versions such as Draft, Short version, or Final.
Full tree is built in, always includes every block, and is the default for existing notes.The source .md always retains the complete Arbor tree. Switching profiles, previewing, and exporting change the output version—not the source content.
Arbor is available in the Obsidian community catalog.
Settings -> Community plugins -> Browse.Arbor.Use this alternative if you prefer to install the plugin files yourself.
manifest.json, main.js, and styles.css from the latest GitHub release, not the source-code archives..obsidian/plugins/arbor
Settings -> Community plugins.Arbor.For updates, use Check for updates in Community Plugins. For a manual update, replace only those three files and restart Obsidian; keep data.json to preserve your settings. See the latest release for changes and any update-specific instructions.
Open view for current note.Enter on a selected card to edit it on desktop, or double-tap it on mobile.Ctrl/Cmd + Arrow to grow the structure.Selected block panel from the Arbor menu if you want a focused preview/editor panel.Rendered links in Branch Editor and Tree Overview are clickable: internal links open their note, heading, block, or PDF destination. Ctrl/Cmd-click or middle-click opens a new tab. A link click stays separate from card selection and editing; double-click the card's ordinary text to edit it.
When Heading Linker is enabled, Arbor can also turn indexed terms and aliases into links to headings in other cards of the same note. Include that note in Heading Linker's glossary sources and highlighting scope, and enable Reading highlighting. Arbor preserves your Markdown, skips headings, code, math and existing links, and leaves ambiguous local targets unlinked. An ordinary click reveals the target card in the current view; Ctrl/Cmd-click and middle-click retain Obsidian's normal new-pane behavior.
In Branch Editor (left-to-right or right-to-left) and Tree Overview, drop supported text or a source link onto a card to append it after a blank line. When editing a card, drop or paste at the textarea caret; selected text is replaced. The edit remains a draft until you use the normal save action. Arbor copies the provided content without cutting or editing the original source. Generated source links are retained with imported Markdown; plain text does not gain a citation automatically.
Use Paste content into card from a card's actions menu (including the mobile block-actions menu), or run Paste content into card from the Command Palette for the currently selected Arbor card. It has no default hotkey. Output Preview and empty background are not targets. If clipboard access is denied, Arbor opens the original card editor so you can use the system Paste command; the current draft is kept.
To create a block instead, drag text or a source reference over a card: two dashed targets appear beside it. New block beside creates a sibling at the same level; New child block adds it inside that branch. Drop onto the card itself to append as before. These targets work in both Branch Editor and Tree Overview, including vertical layouts.
You can also drop an image file onto a rendered card or either new-block target. New files are saved to Obsidian's configured attachment location; an existing image dragged from the vault is embedded without copying it.
Raw binary payloads, HTML-only content, and full Arbor documents are not imported as card text. Supported Obsidian file/link drags can insert a reference; images keep their existing editor attachment path. For cross-folder references, use a reader-generated link or copy a Markdown link; ambiguous raw relative links are not guaranteed to resolve. If a failed import leaves incoming content available, Retry and Copy are view-local for the current view session, not disk or crash recovery. Copy it before reloading if you need to preserve it. Native text Undo depends on the host's edit-history support.
On a phone, Arbor keeps the selected block's sibling column on screen and puts navigation in a bottom action bar. Tap a card to select it; double-tap a card or use Edit to edit it. Save and Cancel are always visible while editing. Plain Enter makes a new line, while Ctrl/Cmd + Enter on a hardware keyboard saves. Pinch with two fingers in the branch editor to adjust card and text density without leaving the active sibling column.
In Tree Overview, drag with one finger to pan and pinch with two fingers to zoom. A drag never opens a card editor. Use Return to branch editor in the view menu to switch back.
If Arbor is useful to you, you can support development here:
These work inside Arbor itself. They are not command-palette bindings.
| Shortcut | Effect |
|---|---|
ArrowUp |
Select previous sibling |
ArrowDown |
Select next sibling |
ArrowLeft |
Select parent |
ArrowRight |
Select first child |
Home |
Jump to first sibling |
End |
Jump to last sibling |
Backspace / Delete |
Delete the selected block |
Enter |
Edit the selected block |
| Shortcut | Effect |
|---|---|
Enter in editor |
Save block and leave edit mode on desktop; insert a newline on mobile |
Shift + Enter |
Insert a newline inside the block on desktop |
Ctrl/Cmd + Enter |
Save the block on mobile with a hardware keyboard |
Escape |
Cancel current edit |
Ctrl/Cmd + Z in editor |
Native text undo inside the current textarea |
| Shortcut | Effect |
|---|---|
Ctrl/Cmd + ArrowUp |
Create sibling above |
Ctrl/Cmd + ArrowDown |
Create sibling below |
Ctrl/Cmd + ArrowRight |
Create child to the right |
Ctrl/Cmd + ArrowLeft |
Create a block to the left at parent level |
Notes:
Left to right layout. In horizontal Right to left, horizontal arrows and Ctrl/Cmd + horizontal-arrow creation mirror visually: ArrowLeft selects a child and ArrowRight selects the parent. Vertical Tree Overview uses the mappings below.event.code for view-level shortcuts where needed, so layout-dependent bindings like search remain stable across keyboard layouts.Delete subtree shows a confirmation modal. Normal Delete block does not.Set Minimum zoom and Maximum zoom in Arbor settings; both stay within 25–500%. Wheel, pinch, menu controls and automatic fitting use the same limits.
Right-click a card and choose Active zoom to fit the selected card closely at the center of its pane. It follows your selection and adapts when editing or resizing the pane. Long content stays scrollable inside the card. Manual zoom stops automatic fitting at your chosen scale. Click Stop zoom or the zoom indicator to stop fitting and reset to 100% (within your configured zoom limits). The mode and automatic scale are local to that view, not saved as a note setting.
| Shortcut | Effect |
|---|---|
Ctrl/Cmd + F |
Open Arbor search overlay |
Ctrl/Cmd + Z |
Undo the last Arbor structural/content change |
Ctrl/Cmd + Shift + Z |
Redo the last undone Arbor change |
Ctrl/Cmd + Mouse wheel |
Zoom the scene if zoom is enabled in settings |
| Mouse wheel over a branch column | Move through sibling blocks, or enter the visible parent/child column under the pointer |
| Click zoom indicator | Stop active zoom and reset to 100% |
Use Tree overview from the view menu or Command Palette to see every block in one connected map. Drag empty space to pan; Ctrl/Cmd + mouse wheel changes zoom. Cards render normal Obsidian Markdown and grow to fit their content. Select a card, then press Enter or double-click it to edit directly in place; Arbor smoothly reveals the editor when it is outside the viewport. Export the whole map as a PNG or one-page PDF from the overview menu. Overview always shows collapsed descendants and does not support drag-and-drop reparenting.
Set Tree overview layout in Arbor settings to Horizontal (the default), Vertical — root at bottom (children grow upward), or Vertical — root at top (children grow downward). The same choices in the view menu save the layout for the current note. Notes without their own choice follow the plugin setting.
In either Branch Editor or Tree Overview, choose Focus on branch from a card's menu to show only that card and its descendants, with the card as the visual root. Your current view stays open and the focus carries across view switches. Click Stop focus beneath the profile/view controls to return. This temporary view does not change parent links, Output Profiles or exports; image/PDF and clean Markdown exports still use the full tree. Search or a link to a block outside the focused branch returns to the full tree automatically.
The note's layout is stored in its hidden Arbor metadata, so it survives closing the tab, restarting Obsidian, renaming the note and syncing it to another device. It applies to every tab showing that note, independently of other notes and Output Profiles. Changing orientation preserves the Markdown body, an active editor draft and content undo/redo history. Return to branch editor keeps Branch Editor horizontal.
| Vertical Overview shortcut | Root at top | Root at bottom |
|---|---|---|
| Select parent | ArrowUp |
ArrowDown |
| Select child | ArrowDown |
ArrowUp |
| Previous / next sibling (left to right) | ArrowLeft / ArrowRight |
ArrowLeft / ArrowRight |
Layout direction still controls left-to-right or right-to-left sibling order: in vertical right-to-left mode, previous/next sibling arrows swap, but parent/child remain vertical. Ctrl/Cmd plus a direction arrow creates in that direction: child along the child arrow, sibling along previous/next, or a parent-level sibling along the parent arrow. Home/End shortcuts are Branch Editor-only; number keys select a numbered child (0 selects the parent). The touch dock keeps its Parent/Previous/Next/Child actions with arrows matching the effective layout; its add menu still creates a child or next sibling. PNG and one-page PDF exports use the current Overview orientation and sibling direction, with upright text.
All of these are exposed as normal Obsidian commands. By default, they have no bound hotkey unless you bind one yourself in Obsidian.
| Command | ID | Scope | Default hotkey |
|---|---|---|---|
| Open view for current note | open-view |
Global | None |
| Create new note | create-note |
Global | None |
| Create new note in Markdown editor | create-note-markdown |
Global | None |
| Create demo note | create-demo-note |
Global | None |
| Export clean copy | export-clean-copy |
Arbor view | None |
| Export tree overview | export-tree-overview |
Arbor view | None |
| Open tree overview | open-tree-overview |
Arbor view | None |
| Return to branch editor | close-tree-overview |
Arbor view | None |
| Open block actions menu | open-block-actions-menu |
Arbor view | None |
| Paste content into card | paste-content-into-card |
Active selected Arbor card | None |
| Create new root block | new-root-block |
Arbor view | None |
| Create sibling above | create-sibling-above |
Arbor view | None |
| Create sibling below | create-sibling-below |
Arbor view | None |
| Create child to the right | create-child-right |
Arbor view | None |
| Create block to the left at parent level | create-parent-level-block-left |
Arbor view | None |
| Select parent block | select-parent-block |
Arbor view | None |
| Select previous sibling block | select-previous-sibling-block |
Arbor view | None |
| Select next sibling block | select-next-sibling-block |
Arbor view | None |
| Select first child block | select-first-child-block |
Arbor view | None |
| Select first sibling block | select-first-sibling-block |
Arbor view | None |
| Select last sibling block | select-last-sibling-block |
Arbor view | None |
| Move block up among siblings | move-block-up |
Arbor view | None |
| Move block down among siblings | move-block-down |
Arbor view | None |
| Move block left to parent level | move-block-left |
Arbor view | None |
| Move block right to become child of previous block | move-block-right |
Arbor view | None |
| Delete block | delete-block |
Arbor view | None |
| Delete subtree | delete-subtree |
Arbor view | None |
| Duplicate block | duplicate-block |
Arbor view | None |
| Duplicate subtree | duplicate-subtree |
Arbor view | None |
| Toggle edit mode | toggle-edit-mode |
Arbor view | None |
| Reveal current block in linear Markdown | reveal-current-block-in-linear-markdown |
Arbor view | None |
| Rebuild linear Markdown from tree | rebuild-linear-markdown-from-tree |
Arbor view | None |
| Rebuild tree from metadata | rebuild-tree-from-metadata |
Arbor view | None |
| Undo branch action | undo-branch-action |
Arbor view | None |
| Redo branch action | redo-branch-action |
Arbor view | None |
Arbor includes a compact view menu in its toolbar. The adjacent profile pill switches Output Profiles or opens Manage output profiles….
Use the view menu to:
100%Output previewSelected block panelCtrl/Cmd + wheel zoomFor Card color…, Branch color…, or Copy block link, open a card's block-actions menu.
| Setting | Default | Meaning |
|---|---|---|
| Theme | Automatic |
Follow Obsidian, choose a built-in palette, or open Theme Studio for custom themes |
| Layout direction | Left to right |
Choose the root side in horizontal views or sibling order in vertical Tree Overview; directional navigation and controls mirror accordingly |
| Tree overview layout | Horizontal |
Default for notes without a saved layout; use the view menu to save a different layout for a specific note |
| Default opening mode | Branch editor |
Choose whether Arbor notes open in the branch editor or Tree Overview |
| Split direction | Vertical split |
Where Arbor opens relative to the current note; desktop only |
| Card width | 300 px |
Base card width in the branching scene |
| Card minimum height | 120 px |
Minimum card height before content expands it |
| Horizontal spacing | 20 px |
Gap between columns |
| Vertical spacing | 12 px |
Gap between sibling cards |
| Default zoom | 100% |
Initial scene scale when Arbor opens |
| Minimum zoom | 25% |
Lower zoom limit; cannot be below 25% or above the maximum |
| Maximum zoom | 500% |
Upper zoom limit; cannot exceed 500% or fall below the minimum |
| Preview snippet length | 220 chars |
Maximum preview text for compact card snippets |
| Drag and drop | On |
Enable drag reorder and reparent; desktop only |
| Ctrl/Cmd + wheel zoom | On |
Allow scene zoom with Ctrl/Cmd + mouse wheel |
| Auto-open managed notes | On |
Open Arbor-managed notes directly in Arbor view |
| Show breadcrumb path | On |
Show the active path strip at the top |
| Show breadcrumb flow | On |
Show subtle connectors between breadcrumb items |
| Preferred breadcrumb line prefix | # |
Prefer the first non-empty line that starts with # when generating breadcrumb labels |
| Breadcrumb fallback | First non-empty line |
What Arbor uses when no preferred-prefix line exists |
| Selected block panel | Off |
Show the focused preview/editor panel for the selected block; desktop only |
Arbor does not move your note into a database or sidecar file.
Each Arbor note contains:
%% arbor:output comment for custom Output ProfilesMinimal compatible note shape (optional source-location evidence is omitted):
<!-- arbor:block:v1 id="root-1" parent="" order="0" -->
# A visible markdown note
This text is still readable in normal Obsidian.
%% arbor:structure
```json
{
"arbor-plugin": "tree",
"version": 2,
"blocks": [{ "id": "root-1", "parent": null, "order": 0 }]
}
```
%%
Important behavior:
sourceMap evidence records body ranges and a fingerprint, not a second copy of note content or a sidecar; visible Markdown remains the source of textBeautiful blocks in the > [!note] style are still normal Markdown callouts. In the screenshots and demo notes, that styling comes from Callout Manager.
Arbor ships with a built-in demo note generator.
Use the command palette action:
Create demo noteThe command creates a new Arbor-managed demo note in the current note folder, or in the vault root if there is no active note.
>= 1.7.2arborReport bugs or suggest improvements in GitHub Issues. Check existing issues first; for a bug, include your Obsidian and Arbor versions, device/platform, and steps to reproduce it.
Contributor workflow:
npm install
npm run dev
Release checks:
npm run lint
npm run build
npm test
Arbor includes a local eslint-plugin-obsidianmd setup so the same reviewer-facing checks can be run before submission updates.
Also check editing, keyboard navigation, links, drag-and-drop, zoom and exports in both views on desktop and mobile before a release.
arbor/
assets/
demo/
src/
model/
storage/
view/
tests/
manifest.json
package.json
styles.css