NodeMD user guide
NodeMD turns a Markdown hierarchy into an editable mind map. This guide describes the Web UI that is implemented today.
Start NodeMD
Docker
From the repository root:
docker compose up --build -dOpen http://localhost:4173. Stop it with:
docker compose downDocker serves the same static Web UI you can deploy behind HTTPS. The default Compose file binds only to the host loopback interface; use an explicit override and an HTTPS reverse proxy to publish it to a network. It does not add an API, database, account system, or document storage. Re-run the command with --build after changing code, dependencies, the Dockerfile, or bundled assets.
From source
Use Node.js 24.16.0 and pnpm through Corepack:
corepack pnpm install --frozen-lockfile
corepack pnpm devThe development server runs at http://127.0.0.1:4173.
Create or import a canvas
Open the project menu in the upper-left.
New canvas
New canvas creates a fresh map with one center node. If the current canvas has changes, NodeMD asks before replacing it.
Click blank canvas space to clear the current selection. The bottom action bar then offers Add first branch; Shift+A performs the same action.
Open Markdown
Choose Open Markdown file to open the system file picker immediately, or drop a supported file anywhere on the canvas:
.mdand.markdownopen as editable mind maps;.nodemdrestores the editable project, including its styles and stable IDs.
The file is read by the browser and is not uploaded to a NodeMD server.
Use Open sample map in the project menu to restore the built-in editable example at any time. NodeMD asks before replacing another local canvas.
If the complete document is supported raw Mermaid flowchart / graph source, or contains only one fenced Mermaid flowchart, NodeMD projects it into an ordinary editable mind map. Mermaid node IDs remain stable NodeMD node IDs. Process/decision shapes and arrows are intentionally ignored. A top-down TD / TB diagram starts with its root on the left and branches flowing right, while edge order preserves source order from top to bottom; edge labels become node descriptions. Multiple roots, multiple parents, and cycles that cannot fit one tree produce a mapping warning while every node and the exact original source are retained. Unsupported statements fail with a line-specific message before the current canvas is replaced. Mixed Markdown + Mermaid and multiple blocks are not selectively extracted.
This example produces a center topic, heading branches, nested list nodes, a task node, and descriptions:
# Launch plan
> From brief to release
> Keep decisions visible
## Research
> Validate the riskiest assumptions
- Interview users
> Hear the context in their own words
- Summarize findings
## Delivery
- [ ] Prepare release notesThe primary mapping is:
| Markdown | Diagram |
|---|---|
| One H1 | Center node |
| H2 and H3 | Heading branches |
One or more simple > blockquotes immediately after a heading | Descriptions for that heading node |
| Compatible paragraph immediately after a heading | Description for that heading node |
| Ordered or unordered list items | Child nodes |
One or more simple direct > blockquotes in a list item | Descriptions for that list node |
| Compatible second direct paragraph in a list item | Description for that list node |
| Nested lists | Deeper child nodes |
| GFM tasks | Labels prefixed with [ ] or [x] |
The title remains the node's primary content, while every mapped quote is a separate description and does not create a child or change the tree. A simple blockquote is the explicit description form. Adjacent ordinary paragraphs remain accepted for compatibility. Complex quote content remains in the original source and produces a mapping warning rather than being silently discarded.
If there is no H1, or more than one H1, the file name becomes a synthetic center node. Heading gaps and other unsupported blocks produce mapping warnings. Unsupported blocks are not projected into node content, but imported source is kept for the current session and included as .original.md in an exported bundle.
A Markdown or Mermaid import is limited to 500,000 characters, 500 nodes, 2,000 Mermaid edges, and a maximum tree depth of 100. A .nodemd project is limited to 5,000 nodes, an 8 MiB project.json entry, and a 12 MiB archive.
Select, edit, and organize nodes
- Click a node to select it.
- Click blank canvas space to clear node or manual-link selection.
- Double-click a node title, choose Edit text, or press
F2to edit the title inline. - Double-click an individual description to edit only that supporting line.
Entersaves andEscapecancels. - Press
Shift+Enterwhile editing a title to insert an intentional visual line break. - Press
Enterwhile editing a title to finish.
In automatic mode, center/root nodes and first-level branches stay on one line and grow horizontally with their title. Shortening the title returns the frame to a comfortable minimum width instead of retaining the old empty space. Second-level and deeper nodes retain a compact width and may wrap automatically.
To set a fixed width directly on the canvas with a desktop mouse, hover the node edge that remains movable under the current layout and column alignment. When the horizontal resize cursor appears, drag the edge directly; no prior selection is required. A root node exposes both side edges. An ordinary branch exposes only the edge that can move without breaking its column alignment: the outer edge in Toward root and Centered, or potentially the inner edge in Away from root because that mode holds the outer column edge fixed. A connection dot takes priority where it overlaps an edge, so dragging the dot still starts a connection. Fixed-width titles wrap to the chosen width. Touch and keyboard users can select the node, enter an exact width in Node frame, or choose Fit to content to restore automatic sizing. An intentional Shift+Enter break still creates another visual line.
New blank nodes open inside a visible frame at a practical working width, so the editor remains easy to see, click, and style before any text exists. They remain editable on the canvas while you work; blank-node omission happens only when NodeMD generates structural export files.
Each node can also carry multiple descriptions without adding another level to the tree. Select the node, open Content in the left rail, and type one description per line. Press Ctrl/Cmd+Enter or move focus away to apply the batch. Every line is displayed as an independent pill: double-click one on the canvas to edit only that description, and clear it to remove only that item. Two or three short descriptions share a row; longer copy or four or more descriptions automatically use one column. F2 continues to edit the primary title.
A context strip at the top-center of the canvas names the current object. It changes from Current selection to Editing while a node's inline editor is active. The bottom action bar changes with the selection:
- no selection: add a first-level branch;
- node selected: edit, duplicate, add child, add sibling, connect, collapse/expand when available, or delete;
- manual link selected: delete that link.
The center node can receive children, but it cannot be deleted, duplicated, or given a sibling.
Find and focus nodes
Open Find nodes from the lower-right canvas controls, or press Ctrl/Cmd+F while focus is outside an input, select, or editable field. The command palette opens near the upper center. Click the shaded canvas outside it, press Escape, or use its close button to dismiss it. The panel searches node titles, stable IDs, and descriptions across the complete document. Results include descendants that are currently hidden by a collapsed branch. Choosing a result closes the palette so the centered node remains visible.
Choosing a result reveals its ancestors, selects the exact stable ID, and centers it in the viewport. If Visible depth was hiding that result, NodeMD returns the control to Show all levels. Otherwise, use Visible depth to show all levels or collapse the view after levels 1–6. This changes branch visibility without deleting nodes or assigning new IDs.
Navigate the accessible tree
The canvas exposes its visible hierarchy as an ARIA tree. While that tree—not a text editor or another control—has focus:
ArrowDown/ArrowUpselects the next / previous visible node in logical preorder.ArrowRightexpands a collapsed branch and stays on it; on an expanded branch it moves to the first direct child. It does nothing on a leaf.ArrowLeftcollapses an expanded non-root branch and stays on it; otherwise it moves to the parent. It does nothing on a root that cannot collapse.Home/Endselects the first / last visible logical node.F2edits the active node title.Escapeexits inline editing and returns focus to the canvas tree.
Add nodes
Shift+Aadds a child to the selected node; with no selection it adds a first-level branch.Tabadds a child to the selected node.Enteradds a sibling to a selected non-root node when text editing is not active.
Each new node opens immediately for inline editing. A new first-level branch receives its initial fill, border, and branch color from the current diagram theme, so it is visible and styleable even before it has a label.
Duplicate a branch
Shift+DorCtrl/Cmd+Dduplicates the selected non-root subtree. Manual links whose two endpoints are inside that subtree are duplicated and remapped to the copy.Ctrl/Cmd+Shift+Dalso duplicates valid boundary links between the copied subtree and outside nodes.
Duplicate links are de-duplicated by their undirected endpoint pair.
Collapse and delete
Hcollapses or expands a selected non-root branch that has children.X,Delete, orBackspacedeletes a selected manual link first; otherwise it deletes the selected branch or detached root. Deleting a detached root removes its entire subtree; Undo restores it. The main center root remains protected.
These canvas shortcuts are disabled while you are editing text, so normal typing and deletion still work.
Add, edit, and cut connections
Automatic parent–child branches represent the Markdown tree. Manual connections add visual relationships without changing that hierarchy.
Drag to connect
- Drag directly from the left or right connection point of any node; no prior selection is required.
- The other visible nodes keep their connection points available as snap targets. Move over the intended point until the preview snaps to it.
- Release to create the link. When reattaching a detached subtree to a standard center node, its left and right points choose the corresponding branch side; dropping on the matching half of the center node has the same effect.
Connection points remain visible by default. Toggle Always show connection points from the lower-right canvas controls or the left-side Canvas panel to switch to selected-node-only mode; NodeMD remembers this view preference locally. On screens narrower than 374px, the duplicate lower-right shortcut is hidden while the Canvas-panel switch remains available, preserving 44px targets for the other controls. That preference affects the idle canvas only: during an active drag, eligible target points appear until you release or cancel. The visible point is up to 14px across with a transparent hit area up to 48px; the point scales down with overview zoom so it does not overwhelm compact nodes.
Dragging between ordinary nodes creates a manual connection without changing the Markdown tree. After cutting an automatic branch, drag from the detached root's connection handle to a node in another tree to reattach the entire subtree as a true child. The connection point used on a standard center node chooses the new branch's left or right side; reattaching to an ordinary node makes the subtree its child and follows that branch's direction. No manual link is created, and generated Markdown follows the new hierarchy. Automatic theme colors follow the new parent branch and depth while custom styling is retained. Undo restores the independent root; Redo attaches it again. Ordinary manual links do not lock to a fixed port, so moving or reflowing nodes lets the link route from the geometrically appropriate side.
Releasing over blank space cancels. Self-links are rejected. If the same undirected endpoint pair already exists, NodeMD selects the existing link instead of creating a duplicate.
Connect with the keyboard
Select a source node and press F. Click the target node to finish. Press F again or Escape to cancel.
Select, style, delete, or cut connections
Click a manual connection to select it. The left rail then edits only that line's color and width. Automatic parent–child branches are styled through their child node rather than selected as manual links.
Delete,Backspace, orXremoves the selected manual link.- Hold
Ctrland right-drag across one or more connections. The pointer becomes a cutter and a red stroke previews the cut; release to cut every intersected line. - A crossed manual link is removed. A crossed automatic parent–child branch preserves the child subtree, turns it into an independent root/map, and moves it into a clear lane above or below the original tree so automatic reflow cannot stack the two maps. The canvas then reframes both maps so the detached result remains visible.
Connection cuts show a custom Undo for five seconds, including cuts that detach automatic branches. Use it before the notice expires or before making another document edit.
Style nodes and connectors
The left rail always provides the diagram-theme and canvas panels. Select a node to reveal five object-level panels—Content, Text, Node frame, Connector, and Effects; select a manual connection to edit that line.
Diagram theme
A diagram theme recolors the map content independently of the light/dark UI mode. Ten presets are available: Paper, Spectrum, Rainbow, Aurora, Ocean, Forest, Sunset, Berry, Earth, and Graphite. Aurora combines blue, green, violet, and gold; Spectrum preserves the six-color palette #2563EB, #0F766E, #D97706, #7C3AED, #BE185D, and #475569.
The center node remains #333333 in every preset. Every branch carries one identifying hue through its automatic line, border, and descendant tints. Applying a theme also chooses readable text colors and updates manual links.
The built-in course demo opens with Rainbow to demonstrate visual hierarchy. The center stays charcoal; first-level branches use solid palette colors with white text; deeper nodes use clearly tinted light surfaces with dark text while keeping the same branch hue. Descriptions appear on the center and first-level branches, so supporting context is visible without turning it into another node level.
Surprise me
Choose Surprise me at the top of the theme panel to immediately apply one of 1,024 generated palettes. Generation and selection happen entirely in the browser, so the feature works offline and does not call an AI or any remote service. NodeMD remembers the 20 most recently shown Surprise palettes in this browser and excludes them from the next choice.
The selected result behaves like any other diagram theme. The center remains #333333; branch colors, descendant surfaces, connectors, and readable text colors are derived from the generated palette.
Import a theme
Create a small .json file and choose Import theme in the theme panel. NodeMD applies a valid theme immediately and keeps imported themes in the local theme list for this browser and site origin.
{
"name": "Night Signal",
"colors": ["#2563EB", "#0F766E", "#D97706"]
}The file must contain 3–12 unique colors. Each color must use #RGB or #RRGGBB Hex notation; letter case does not matter. palette is accepted as an alias for colors:
{
"name": "Field Notes",
"palette": ["#256", "#C96", "#746"]
}The colors supply the branch hues rather than a complete CSS theme. NodeMD keeps the center node at #333333 and derives first-level fills, borders, automatic connectors, deeper tints, and readable text colors. Saving a .nodemd project embeds the active imported or Surprise palette, so reopening the project does not depend on the local theme list. Markdown export contains only content and hierarchy; it does not save colors or other visual styles.
Mind map layout
New canvases and ordinary Markdown imports use Two-sided layout by default. Top-down Mermaid TD / TB imports start in Right only, so their projected trees read from left to right. In Two-sided, NodeMD places the earlier top-level sections on the left and the later sections on the right; when the count is odd, the left receives one extra section. Each side follows source order from top to bottom.
Click the single Mind map layout icon in the lower-right canvas controls to cycle Two-sided → Right only → Left only → Two-sided. The icon shows the current layout, while its tooltip names both the current and next state. The setting applies to every mind-map root on the canvas, including detached roots, without connecting those roots. Each click is one undoable canvas operation, and Fit reframes the result.
The adjacent single Column alignment icon cycles Toward root → Centered → Away from root → Toward root for the node frames at each depth. Toward root is the default. In a two-sided map the behavior mirrors across the root: it aligns the inner edges on both sides, Away from root aligns both outer edges, and Centered aligns node centers. Fixed-width nodes retain their chosen widths while the columns align. .nodemd projects and browser recovery preserve both branch layout and column alignment. Markdown does not store either visual choice, so Markdown export keeps the same heading and list order in every mode.
Canvas background
Open Canvas in the left rail to choose an exact Hex background with the swatches, Hex field, or system picker. Grid contrast adapts to the actual color, including a dark custom canvas inside the light interface. A custom color remains in place when the UI switches between light and dark mode. Choose Follow light/dark mode to return to an automatic background.
NodeMD persists the background mode as well as the effective color. After browser recovery or a .nodemd reopen, an automatic background continues to follow later light/dark switches; a custom color remains fixed. Projects created before the mode field existed treat the known NodeMD light and dark defaults as automatic, so older local saves recover the expected theme-following behavior.
SVG, PNG, and project-bundle exports use the effective canvas background. The editing grid is a workspace aid and is not included in exported images.
Content
Use Descriptions for supporting lines below a node title. They are stored separately from the title and hierarchy, with one normalized, independently editable description per input line. Short groups of two or three use an adaptive two- or three-column row; dense content stays full-width in one column. Description typography follows the node and branch palette so it remains subordinate to the primary title.
Markdown remains the content source: each simple > blockquote immediately after a heading or directly inside a list item becomes one description. Compatible adjacent paragraphs still import as descriptions; generated Markdown emits a separate > blockquote for every description. The JSON sidecar records appearance rather than duplicating this content.
Text
- text color: ten swatches, three- or six-digit Hex input, or the system color picker;
- font family: System UI plus Inter, Roboto, Poppins, Space Grotesk, Lora, Merriweather, Roboto Mono, Noto Sans SC, and Noto Serif SC;
- font size:
8–72 px; - font weight:
100–900in steps of10.
Google Fonts are requested only after selection and fall back to the listed system fonts when offline. Export waits for the current browser's fonts, but SVG records only the CSS family and does not embed the font file; exact font rendering on another machine is therefore not guaranteed.
Node frame
- node width: a fixed
80–2048 px, or Fit to content for automatic sizing; - frame fill and border color;
- corner radius:
0–48 px; - horizontal text-to-frame padding:
0–48 px; - vertical text-to-frame padding:
0–32 px.
The exact width field and the draggable canvas edge edit the same fixed-width value. With a desktop mouse, hover the movable edge until the horizontal resize cursor appears, then drag without selecting the node first. An ordinary branch exposes only the edge that remains movable under the current column alignment; a root node keeps both sides available, and a connection dot takes priority where the controls overlap. For touch or keyboard use, select the node and use the exact width field or Fit to content. The latter discards the fixed width and lets content determine the frame again.
Radius, padding, and shadow apply to the frame around the text—not to the glyphs themselves. Padding participates in layout, hit testing, connections, and export.
Frame border color is independent of connector color. Changing one does not change the other.
A new first-level branch takes the next color from the active diagram theme. Deeper children and siblings retain their top-level branch hue while using the theme's lighter descendant surface and readable text color. Existing descendants do not live-follow later manual style changes.
Connector
For a selected node, this panel changes its automatic branch color and width. Width ranges from 0.5–12 px.
For a selected manual connection, a dedicated connector panel changes that line only.
Effects
Frame shadow has four choices: none, small, medium, and large.
Styles are included in local recovery, .nodemd projects, and exported JSON, SVG, and PNG snapshots.
Move around the canvas
- Middle-drag pans like Blender.
Alt+ left-drag remains available as an alternative. - Two-finger trackpad scrolling pans the canvas.
- Wheel zooms around the pointer.
Ctrl/Cmd+ wheel remains compatible. +/-, including the numpad keys, zoom around the last pointer position.- Bottom-right controls cycle the mind-map layout and same-depth column alignment, toggle persistent connection points, zoom out, show the current percentage on wide screens, zoom in, fit the whole map, and enter canvas fullscreen. At
1600 pxand below, NodeMD hides the percentage and decorative dividers to keep the action row compact; below374 px, it also hides the duplicate connection-point shortcut while retaining the Canvas-panel switch. The remaining icon controls keep a 44px hit target. Fit uses the inward-arrow button; fullscreen uses the four-corner button. Click it again or pressEscapeto exit.
Fit is available from the lower-right inward-arrow button; Home belongs to accessible tree navigation while the canvas tree has focus. Fit scales the entire diagram to the available canvas viewport. It magnifies small diagrams up to 150% and chooses a responsive outer inset between 32 and 64 px as the viewport changes. Fit uses the full canvas and shifts the centered result only when necessary to avoid the floating left tool rail. Nodes use canvas units rather than rem or vw; viewport zoom provides responsiveness while layout and exported geometry remain consistent. A wide diagram on a portrait viewport can still have space above and below because Fit preserves the diagram's aspect ratio and keeps every node visible.
Save and recover an editable project
Use Save NodeMD project to download <name>.nodemd. Use Open NodeMD project to reopen it and continue editing. A v1 mind-map project preserves:
- stable node and connection IDs;
- titles—including intentional visual line breaks—descriptions, hierarchy, detached roots, root positions, and collapsed state;
- branch layout, same-depth column alignment, fixed node widths, node and connector styles, manual connections, diagram theme, and automatic-or-custom canvas-background mode;
- zoom and viewport origin;
- generated structural Markdown plus the exact original Markdown and file name when imported.
Legacy v2 flowchart projects remain readable for compatibility. New Mermaid Markdown imports use the ordinary mind-map project path described above.
NodeMD validates the ZIP container, project.json, schema version, node IDs, style fields, and connection endpoints before installing anything. Corrupt files, unknown versions, duplicate IDs, and dangling connections leave the current canvas unchanged.
NodeMD autosaves the current editable project in IndexedDB after changes, including intentional visual title breaks, fixed node widths, and column alignment, and retains up to five recent valid local versions. Use Recover previous version after an accidental edit, refresh, or browser restart on the same site origin and browser profile. Restoring an older version does not delete the newer ones. Concurrent edits are not merged: a stale tab is blocked from overwriting a newer save and must be reloaded. This short recovery history is not a project library or cloud sync. Clearing site data, private browsing, another profile/browser, or a different deployment origin does not share that recovery. An exported .nodemd file is the portable backup.
Autosave uses two write lanes. Content, structure, styles, connections, and other document changes create complete project checkpoints. Panning or zooming writes only the latest viewport zoom and origin: it does not change the checkpoint's savedAt, alter document data, or add an entry to the five-version recovery history. Refresh recovery still restores that latest viewport.
If imported Markdown contains source blocks that are not represented completely on the canvas, a persistent Markdown mapping report appears beside the local-save status. Open it to see each warning type, source line when available, and details, or choose Download original Markdown. The centered report closes from its close button, Escape, or a click on the shaded canvas outside it. The exact source and diagnostics survive browser recovery and .nodemd round-trips.
Export snapshots
Use the project menu to export:
- SVG for a scalable snapshot;
- PNG requested at up to 2× scale, then automatically reduced when necessary so neither side exceeds 8,192 px and the raster remains at or below 16,000,000 total pixels;
- Structural Markdown for the current tree snapshot;
- Style JSON for current identities, appearance, and manual connections;
- Project bundle as
<name>.nodemd.zip.
Invalid raster dimensions or a browser rasterization/encoding failure produce an explicit export error instead of a blank or partially generated PNG.
The bundle contains:
| File | Contents |
|---|---|
<name>.md | Current nonblank titles, descriptions, and trees; each nonblank independent root becomes its own H1 section |
<name>.nodemd.json | Document/root identity, detached-root IDs, retained-node appearance, canvas appearance, and manual connections |
<name>.svg | Current vector snapshot |
<name>.png | Current raster snapshot |
<name>.original.md | Untouched imported source, only when the canvas came from Markdown |
The .nodemd.zip bundle is an artifact snapshot. NodeMD does not import its .nodemd.json sidecar or reopen that archive as an editable project; use .nodemd for project round-trips. Export structural Markdown creates a tree snapshot and is not a lossless rewrite of the imported source. Intentional title line breaks are normalized to spaces in generated Markdown; browser recovery and .nodemd retain them as visual formatting. Canvas positions, fixed node widths, column alignment, and other visual styles remain in JSON/.nodemd; the sidecar is appearance metadata rather than a second content source.
Generated Markdown emits each nonblank independent root as its own H1 section and omits every blank-title node. If any blank root or node has labeled descendants, those descendants are promoted to the next retained level rather than discarded. Descriptions by themselves do not keep an otherwise blank node in structural Markdown. A blank center node emits no H1, so its retained descendants become top-level list items; a fully blank diagram emits an empty Markdown file. The JSON sidecar records detached-root IDs and retained styles while omitting blank non-root appearance entries. SVG and PNG remain WYSIWYG snapshots, so they can still show unfinished canvas content.
Shortcut reference
Open the collapsed Shortcuts control at the lower-left for the in-app reference. Canvas shortcuts below apply while the canvas—not a text field—is active. When the canvas ARIA tree has focus, navigation follows the currently visible logical hierarchy; the title-editing rows apply while the inline editor is active.
| Input | Action |
|---|---|
Shift+A | Add child; with no selection, add first-level branch |
Tab | Add child |
Enter | Add sibling to selected non-root node |
Double-click title / F2 | Edit the node title |
Shift+Enter while editing a title | Insert an intentional visual line break |
Enter while editing a title | Finish editing |
Escape while editing a title | Exit editing and return focus to the canvas tree |
| Double-click description | Edit only that description; Enter saves and Escape cancels |
Shift+D / Ctrl/Cmd+D | Duplicate subtree and internal manual links |
Ctrl/Cmd+Shift+D | Duplicate subtree plus valid links to outside nodes |
F | Start or cancel two-click connection mode |
H | Collapse or expand selected branch |
X / Delete / Backspace | Delete selected manual link, otherwise selected branch or detached root; the main center root is protected |
Ctrl/Cmd+Z | Run visible custom Undo first, otherwise undo Plait document history |
Ctrl/Cmd+Shift+Z | Redo the latest canvas action |
Escape | Cancel connection/cut interaction and clear manual-link selection |
Ctrl/Cmd+F | Open Find nodes unless focus is in an input, textarea, select, or editable field |
ArrowDown / ArrowUp | Select the next / previous visible node in logical tree order |
ArrowRight | Expand a collapsed branch and stay on it; from an expanded branch, select its first child |
ArrowLeft | Collapse an expanded non-root branch and stay on it; otherwise select its parent |
Home / End | Select the first / last visible node in logical tree order |
Middle-drag or Alt + left-drag | Pan |
| Two-finger trackpad scroll | Pan |
| Wheel | Zoom around pointer |
+ / - (including numpad) | Zoom in / out around the last pointer position |
Ctrl + right-drag | Show the cutter and cut intersected manual or automatic connections |
Browser test coverage
Chromium runs the complete automated E2E suite. CI additionally runs a bounded smoke scenario in Firefox and WebKit covering application startup, the short-height project menu, ARIA tree and search navigation, and a small PNG export. Those smoke checks are not equivalent to the full Chromium suite.
Persistence boundaries
- Diagram edits do not write back to imported Markdown. Structural Markdown stores content and hierarchy, not fixed node widths, column alignment, or other visual styling.
.nodemdprojects and browser recovery preserve fixed node widths, column alignment, and whether the canvas background is automatic or custom. Browser recovery covers the current editable mind map and up to five recent local versions, scoped to one browser profile and site origin.- Viewport-only autosaves restore the latest zoom and origin without changing
savedAtor adding a recovery-history entry. .nodemd.zipand its exported JSON sidecar remain artifact-only;.nodemdis the reopenable project format.- There is no server-side document storage.
Download a .nodemd project before clearing site data or moving to another browser, profile, device, or deployment origin.