Skip to content
On this page

Canvas Editing

The board canvas edits like a design tool: you drag to select, use shortcuts, copy/paste across boards, and import or export whole diagrams. For element meaning, start at Nodes & Edges. For board setup, see the Boards Guide.

Tip

Press ? on any board to open the shortcut sheet, which lists every shortcut on this page.

Press ? anywhere on the canvas; the sheet is built from the canvas's own shortcuts, so it always matches them.

Pointer and hand modes

The canvas has two interaction modes, toggled at the top of the tool rail on the left or with the V and H keys:

ModeLeft-drag does
Pointer (V)Draws a selection box — anything it touches gets selected
Hand (H)Pans the canvas

Pointer is the default for editors, and the canvas remembers your choice. In either mode, a middle or right drag, or Space held while you drag, also pans.

Read-only boards, such as published boards and previews, open in hand mode and do not run editing shortcuts.

Moving around

  • Scroll pans; pinch or ⌘ + scroll zooms.
  • The zoom readout in the bottom-right corner shows the current zoom. Click it for the View menu: zoom presets, fit, zoom to selection, auto-arrange and the background pattern.
  • Double-click empty canvas to fit the whole board in view.
ShortcutAction
⌘0Fit the board in view
⌘= / ⌘-Zoom in / out
⇧0Zoom to 100%
⇧2Zoom to the current selection

On Windows and Linux, read ⌘ as Ctrl throughout.

Auto-arrange

To restore the automatic layout after dragging nodes, open the View menu (click the zoom readout) and choose Auto-arrange. It discards every hand-placed position on the current layer and lays the board out again; ⌘Z undoes it. The item is greyed out when you haven't moved anything by hand.

Selecting and arranging

Click selects one element; ⌘-click adds to the selection; a pointer-mode drag selects everything it touches. From there:

ShortcutAction
⌘ASelect every element on the current layer
EscapeClear the selection
Arrow keysNudge the selection 1px — hold Shift for 10px
⌘G / ⌘⇧GGroup the selection into a container / ungroup it
DeleteRemove the selection
⌘Z / ⌘⇧ZUndo / redo

Nudging or dragging an element pins it, and automatic layout stops repositioning it. A held arrow key counts as one action, so one undo moves the selection back.

Renaming inline

Select a node and press Enter or F2, or double-click the name.

Copy, paste, and duplicate

A copied container brings its children, and copied connected nodes bring the edge between them.

ShortcutAction
⌘CCopy the selection
⌘XCut: copy, then remove
⌘VPaste: at your cursor if it is over the canvas, offset from the original otherwise
⌘DDuplicate in place, without touching the clipboard

Paste works across boards: copy on one board, open another, even in a different tab, and paste.

Two things change when you paste:

  • A pasted copy is yours. When you copy an element that a source owns, you get a plain, hand-authored copy without the source's claim. The same goes for a nested layer: the copy does not take the original's child layer, which stays where it was.
  • Governed boards stage the paste. On an app board, pasted elements arrive as staged additions, badged and reviewable like any other edit.
Note

Read-only viewers can still copy from a published board and paste into a board of their own. They cannot change the board they are viewing.

Copy a style, paste a style

To copy one element's style to others:

ShortcutAction
⌘⌥CCopy the style of the selected element
⌘⌥VApply it to everything selected

Style means appearance: fill, stroke, text color, font, corners, and effects. It excludes shape, icon, size, and position. Pasting a node's style onto an edge applies only the parts an edge can use.

Import and export

Import a diagram

Import diagram appears only while the board or layer you're on has no elements, and only if you can edit it.

Watch: a Mermaid diagram imported onto an empty board
  1. On the empty board, click Import diagram beside Add element.
  2. Click Choose file, or paste the text into the box. The dialog detects the format from the file extension or the text.
  3. Check the preview: node and edge counts, the archetype each element will get, how each archetype was matched, and any adjustments.
  4. Click Import. The elements appear on the canvas as one step, so ⌘Z removes them all.
  5. Click Save to keep them. Until you save, the import is an unsaved change like any other edit.

Import reads:

FormatWhat it takes
ProvenMap JSON or YAMLA board exported from ProvenMap. Names, archetypes, containment, styles, and positions come back as they were.
Mermaid flowchartflowchart or graph diagrams. Subgraphs become containers, and a Mermaid class that names an archetype (:::data_store) sets it. The direction in the first line sets the board's layout: LR and RL lay it out left to right, TB, TD and BT top to bottom. A direction line inside a subgraph does the same for that container. You can paste a Mermaid code block straight from a README, fence included.
Mermaid C4C4Context, C4Container, C4Component, C4Dynamic, and C4Deployment. Each C4 element maps to one archetype: Person to actor, SystemDb to data store, Container to service. Boundaries become containers.
Graph JSONAny JSON with a list of nodes and a list of edges, including React Flow, Cytoscape, and JSON Graph Format exports.

If someone adds elements to the board while the dialog is open, Import refuses to run. Import never merges into existing elements.

How archetypes are matched

Each element takes an archetype from your catalogue by the first rule that fits. The kind in the file wins, then the exact name. After that come keywords in the name ("Orders DB" is a data store), then the drawn shape (a Mermaid cylinder is a data store). A Mermaid class that names an archetype, such as :::data_store, overrides the rest. Edges match on the verb in their label, such as "reads" or "calls".

An element that matches nothing imports without an archetype; change it on the canvas. A Mermaid line the importer can't read is skipped whole, never half-applied, and the preview lists it with every other adjustment.

Export a board

Click the download button at the top right of the canvas. Under Data:

ItemWhat you get
Export as JSONThe whole board: names, descriptions, archetypes, containment, tags, styles, and positions. Import it into an empty board to get the same board back.
Export as YAMLThe same content as JSON, in YAML.
Export as MermaidA Mermaid flowchart. Containers become subgraphs and each archetype becomes a class, so the file imports back onto the same archetypes. The board's direction, left to right or top to bottom, is kept, and so is any container's own. Positions and colours are not included.
Copy as MermaidThe same Mermaid text, copied to your clipboard.

Export covers the board or layer you're on, including unsaved edits, but not the layers beneath it. It leaves out links to source code. Exporting an unchanged board twice produces the same file, so exports diff cleanly in a repo.

What's next