Editing a document
Block types, marks, menus, AI features, comments, and uploads in the canvas document editor.
Canvas document editor
The canvas document editor is the rich-text surface for any canvas of type document. It runs on Tiptap (ProseMirror) with a Loro-CRDT collaboration binding for real-time multi-user editing. This article covers what users can do — block types, marks, menus, AI features, comments, and uploads.
Block types
You can insert any of these via the slash command (/), the block-menu turn-into option, or markdown shortcuts.
- Paragraph — plain prose
- Heading 1 / 2 / 3 —
#,##,### - Bulleted list —
-or* - Numbered list —
1. - Task list —
[ ]; check the box and the text strikes through automatically - Blockquote —
> - Code block —
(syntax-highlighted via lowlight; supports ~30 popular languages including JavaScript, TypeScript, Python, Rust, Go, SQL, JSON, and more) - Horizontal rule —
--- - Image — drag a file in, paste from clipboard, or
/image - File attachment — drag in any non-image file
- Table —
/table; concurrent cell editing supported - Toggle (collapsible) —
/toggle. The summary line is always visible; the content collapses with a chevron. - Callout —
/callout. Colored container (10 variants) with an emoji icon for asides, tips, warnings. - Columns —
/2 columnsor/3 columns(see below). - Bookmark / link card —
/bookmark(see below). - Math equation —
/mathblock-level LaTeX (see below).
Marks (inline formatting)
Selected text picks up a bubble menu with formatting options. You can also use keyboard shortcuts.
- Bold —
Cmd/Ctrl+B - Italic —
Cmd/Ctrl+I - Underline —
Cmd/Ctrl+U - Strikethrough —
Cmd/Ctrl+Shift+S - Inline code —
Cmd/Ctrl+E - Highlight —
Cmd/Ctrl+Shift+H - Subscript / Superscript —
Cmd/Ctrl+,/Cmd/Ctrl+. - Link — just type a URL: any
https://…you type or paste auto-wraps as a clickable link. Paste a URL onto a selection to wrap the selection (Notion-parity). - Comment — see Comments below
Mentions
Type @ for people (humans, agents, bots) or # for resources (spaces, canvas documents, canvas databases). Pick from the suggestion popup. Mentions render as clickable chips:
- Click a
@userchip → opens a DM with that user - Cmd/Ctrl-click a
@userchip → opens their profile - Click a
#space/#canvaschip → navigates to that resource
Comments
Three ways to start a comment:
- Page-level — click "Add comment" at the very top of the document. The comment isn't anchored to any specific text or block; it sits with the document.
- Block-level — open the drag-handle menu on any block and pick "Comment". The thread anchors to the whole block and stays attached even if the block is empty (useful for images, dividers, math equations).
- Substring-level — select any text, click the speech-bubble in the bubble menu. The selection gets a colored underline you can click to jump back to the thread.
Once started, threads display as a floating popup anchored next to the comment. The popup's small toolbar has three buttons: ⊟ "Show all comments in sidebar" (switches to a persistent right-side panel listing every thread), ✓ "Resolve" (toggles the thread between open and resolved), and × "Close" (dismisses the popup — the thread itself stays open). To archive a thread, open the ⋯ menu inside the thread card.
In sidebar mode, all open + resolved threads are listed with a N open · M resolved header. Click any thread to jump to its anchor in the editor. Click × in the sidebar header to switch back to popup mode.
You can edit your own comment for 24 hours after posting it: open the ⋯ menu inside the comment and choose Edit. The comment shows an "Edited …" label afterwards and updates live for everyone viewing the thread. (Earlier versions aren't viewable yet.)
Resolving and archiving is open to anyone who can edit the document (any member of a space the canvas is linked to).
The Subscribe / Resolved / Archived shortcuts in the meta bar above the title give you fast access to the doc's notification state and resolved/archived comment threads.
AI inline autocomplete
After ~600 ms of typing-quiet at the end of a paragraph, a dimmed rainbow ghost text appears at your cursor with a one-or-two-sentence continuation. Tab accepts; Esc or any other keystroke dismisses. Toggleable per-document via the triple-dot menu.
See Authorship and autocomplete for the full specification.
Authorship colors
Every text run carries the userId of who typed it. With "Show authorship colors" toggled on (triple-dot menu), each contributor's text renders in a stable color drawn from a 14-entry palette. The doc creator's text uses the default prose color so reading the doc as the creator doesn't drown the page in color. AI-authored runs (canvas tools, autocomplete) render in a viewport-fixed rainbow gradient.
Drag handle and block menu
Hover the left edge of any block. A drag handle (⋮⋮) appears. You can:
- Drag the handle to reorder the block
- Click the handle to open a Notion-style menu — turn the block into another type, duplicate, delete, comment on the whole block
Slash command
Press / at the start of a line for an inline menu of every insertable block type and inline element (image, table, toggle, divider, etc.).
File uploads
There are three ways to add a file to a document:
- Drag and drop — drop one or more files anywhere in the editor and they upload at the drop position.
- Paste — paste a screenshot or copied file from your clipboard at the cursor.
- Slash command —
/filefor any file,/imagefor an image by URL. The file picker accepts multiple files; they insert in selection order.
Uploads go to the workspace object store. Images render inline; everything else (PDFs, docs, archives, etc.) renders as a download chip with the filename, MIME type, and size. The chip links to the authorized download URL — sharing the document grants viewers read access to the attachment via the same canvas:read rule.
Files propagate to other people viewing the doc in real time, the same way text edits do — no need to refresh.
Page icon
Before a document has an icon, an "Add icon" button sits on the toolbar row above the title, next to Add comment.
- Add icon opens a small inline picker. Type or paste an emoji (
🚀,📚,🎯) and hit Enter. Once you pick one, the emoji moves up above the title at full size — click it there to change or remove it.
The icon is stored on the page (separately from the document content) and propagates immediately. Other people viewing the doc see the new icon on their next page load.
Once you set a page icon, it also replaces the default document icon in the tab bar at the top of the space, so you can spot the canvas at a glance among its neighbours. Icon changes show up live — for you in every open tab and for anyone else viewing — without a reload.
Bubble menu
Selecting any text opens a floating menu at the selection with one-click formatting (bold, italic, underline, strikethrough, code, link) and a "Comment" button that starts a new thread anchored to the selection.
Hex color swatches
Type a hex color like #3b82f6 and the editor renders a small color swatch next to the text. The swatch updates live as you edit the digits.
Emoji picker
Type : followed by an emoji name (:rocket:, :fire:) and pick from the popup. Built-in emoji insert as native unicode characters that copy/paste cleanly.
Your workspace's custom emoji show up in the same popup, listed first when their name matches what you typed. Pick one and it drops into your text as an inline image — the same emoji you'd see on a message reaction. Custom emoji stay pinned to the exact emoji you chose, so they keep showing the right image even if someone later renames it.
Find and replace
Cmd/Ctrl+F opens an in-editor find bar. Cmd/Ctrl+Shift+F swaps to find-and-replace. Matches highlight as you type; navigate with the arrow buttons.
Column layouts
Insert a multi-column layout via the slash command — /2 columns or /3 columns (or just type /col to filter to the column entries). Each column accepts any block type (paragraphs, headings, lists, callouts). Columns stack vertically on narrow screens (mobile) so dense content stays readable.
Drag-between-columns and column-resizing are not yet supported — a future iteration will add them.
Embeds and bookmarks
Use the /bookmark slash command to add a link as a rich card. Paste an http(s) URL when prompted; the editor fetches the page's OpenGraph metadata server-side and stores a snapshot of the title, description, preview image, and favicon directly on the bookmark. The card stays stable even if the source page changes — Notion's behaviour, with the upside that the card keeps working when the upstream page goes offline.
Most sites with OpenGraph or Twitter Card metadata work out of the box (news, blogs, GitHub, Linear, YouTube). Sites that block crawlers fall back to a URL-only card.
Block math equations
Insert a block-level LaTeX equation via the /math slash command. The equation editor opens with a textarea — type LaTeX (e.g. E = mc^2, \\int_0^\\infty e^{-x^2}\\,dx), then ⌘/Ctrl+Enter to render. Click the rendered equation to edit it again.
Equations render with KaTeX. The LaTeX source travels with the document, so peers see the same rendered output.
Inline equations (single-dollar $x$ syntax) are not yet supported; use the block form for now.
Multi-color highlight
The highlight mark supports six color variants — yellow, green, blue, purple, pink, red. Select text, click the brush icon in the bubble menu, then pick a swatch. Click the × in the picker to remove the highlight from the selection.
Copy share link
To send someone straight to a document, open the ⋯ menu in the meta bar above the title and pick Copy share link. The document's link is copied to your clipboard so you can paste it into a message, a comment, or anywhere else.
If the document is shared into more than one space, the link works for anyone who can reach it through any of those spaces — even one you didn't copy the link from. See Sharing a document for the details.
Export to Markdown
To save a copy of a document outside Monad, open the ⋯ menu in the meta bar above the title and pick Export to Markdown. Your browser downloads a .md file named after the document title.
The file opens cleanly in any Markdown editor — Obsidian, Bear, Logseq, VS Code — and starts with a YAML frontmatter block at the top with title, optional description and icon, the author handle, the created timestamp, and a spaces list with the slug of every space the canvas is linked to. Field names match the conventions Obsidian / Hugo / Jekyll / Astro vaults already use, so the file fits straight into an existing notes vault.
Export to PDF
For a print-ready or shareable copy, open the same ⋯ menu and pick Export to PDF. Your browser downloads a .pdf file named after the document title, with the title, author, and creation date across the top.
The PDF captures the latest version of the document — headings, lists, checklists, callouts, quotes, code blocks, tables, and inline images all carry over as clean, readable prose. A few things to know:
- It reflects the current state of the document, including edits other people or agents made moments ago.
- Blockquotes keep their look — indented and italic, with a vertical rule down the left edge — and callouts keep their labelled accent.
- Inline images you uploaded to the document are embedded in the file. Images linked from outside Monad show their description text instead.
- The button briefly shows Exporting… while the file is prepared — large documents take a few seconds.