How ZenNotes thinks about files, panes, leaders, and keyboard control.
Quick capture is a floating window
A system-wide hotkey (Cmd/Ctrl+Shift+Space by default, configurable under Settings → Editor) opens a small always-on-top capture window over any app. You type in one place — the first line becomes the note title, the rest is the body. Mod+Enter saves into Quick Notes and hides it, Mod+N saves and starts a fresh note without hiding, and Mod+P opens an existing note to edit. Editing the first line of a Quick note renames it in place instead of creating a duplicate, and the window can be dragged anywhere.
Notes are real Markdown files
ZenNotes edits Markdown on disk. Rename, move, archive, restore, and floating-window operations all work on the underlying files, not an internal copy.
Tabs and splits are first-class
Each editor pane can hold multiple tabs. Split the current tab right or down, move between panes with motions, switch the active note between Edit, Split, and Preview, and use the buffer switcher or :buffers when tabs are hidden. The active tab has a full keyboard context menu — Close Others, Close Right, Pin, Pin as Reference, Open in Floating Window, and Reveal in Finder.
Context menus are part of the keyboard model
ZenNotes treats context menus as keyboard-reachable UI. Use the configured context-menu binding on the selected sidebar or note-list row, or use Shift+F10 / the system Context Menu key to open the active tab menu from the editor.
The home view is where you land
When no note is open (outside Zen mode), ZenNotes shows a light home view instead of a blank pane: a greeting, quick-create actions (new note, database, drawing — plus daily and weekly notes when those are enabled in Settings), your most recently edited notes, and today’s open tasks with an overdue count. Click a note or task to open it, tick a checkbox to complete a task in place, and use ↑/↓ — or j/k in Vim mode — then Enter to move and open from the keyboard.
Sessions restore on relaunch
Workspace restore is saved per vault, while the window frame is global. Reopening ZenNotes brings back your pane layout, open buffers, built-in views, and the last window bounds.
Leader mode can teach itself
If Leader key hints are enabled, pressing Leader opens a which-key style panel that shows the next available actions. Settings let you pick a timed hint or a sticky leader overlay that stays open until you dismiss it.
Tasks, Tags, Archive, and Trash are vault-wide views
Tasks scans every note for checkboxes. Tags lets you browse notes by tag. Archive gives you cold storage. Trash gives you recovery without turning the left rail into a second browser.
A whole note can be a task
Besides inline - [ ] checkboxes, a whole note can itself be a task: give its frontmatter a task tag (tags: [task]) and its metadata lives in frontmatter — status (open / in-progress / done), priority (high / normal / low), due and scheduled dates, plus any tags — while the body holds free-form detail or sub-checkboxes. These task files appear in the Tasks List, Calendar, and Kanban right alongside inline tasks, so both styles live in one vault. It follows the TaskNotes convention, so a vault stays interoperable with TaskForge and Obsidian. Quick-add one from the command palette (“New Task”, or “New Task in Folder…” to choose where it lands), the “+ New task” button in the Tasks header, the a key in Vim mode, or the :newtask / :task command — and :newtask Projects/Website drops it straight into a folder so multiple projects stay organized. New task files default to your configured tasks location (Settings → Vault → Notes → Default tasks location; the inbox by default), with the folder-picking options overriding that per task. Checking a task file off rewrites its frontmatter (status: done and a completedDate) rather than a checkbox character, and rescheduling from the calendar or changing its Kanban column updates the matching frontmatter field.
Moving notes is path-first
Use the note context menu, the command palette, or :move / :mv to move a note. The move prompt autocompletes folder paths, and the ex command accepts a destination directly like :mv archive/Reference.
Command palette mirrors tab actions
You do not need to remember where a tab action lives. The command palette exposes direct entries for closing, splitting, pinning, referencing, floating-window, and reveal actions.
Slash commands speed up writing
Type / at the start of a line or after whitespace to open an inline insert menu for common Markdown structures: headings, lists, to-do items, callouts, code blocks, dividers, tables, math blocks, links, images, and new-note links. The same slash menu is available in the Quick Capture window.
Callouts highlight the important bits
Turn a blockquote into a colored callout (an Obsidian-style admonition) by starting its first line with > [!type], optionally followed by a title, like > [!warning] Heads up. Typing [! inside a blockquote opens an insert menu of the callout types: filter by name (aliases match too, so warn finds Warning and tldr finds Abstract), move with the arrow keys or the Vim/Emacs completion chords (Ctrl+J / Ctrl+K, Ctrl+N / Ctrl+P), and press Enter, Tab, Ctrl+Y, or click to drop in the syntax. The type sets the color: note, info, abstract/summary/tldr render blue; tip/hint/important and success/check/done green; question/help/faq and example purple; warning/caution/attention yellow; danger/error, bug, and failure/fail red; and quote/cite a neutral gray. Types are case-insensitive, and an unrecognized one still renders as a neutral note, so callouts pasted in from Obsidian keep working.
Style completed tasks
By default, checking a task (- [x]) just fills its checkbox. Settings → Editor → Completed task style can also strike the text through, gray it out, or both, so finished items visually recede in the editor and the reading view while the checkbox stays checked. There are matching command-palette entries (Completed Tasks: Strikethrough / Gray / Strikethrough + Gray / No Style). Nested sub-tasks keep their own state, so a completed parent never strikes an unchecked child, and formatting like bold or [[wikilinks]] inside a done task is styled along with the rest. It defaults to off, so existing notes look unchanged until you opt in.
@ inserts dates and links notes
Typing @ in normal text opens suggestions: the date shortcuts (Today, Yesterday, Tomorrow) plus any notes matching what you type. Choosing a date inserts an ISO date like 2026-04-15; choosing a note inserts a [[wikilink]], so @ is a quick alternative to [[. A bare @ leads with just the dates — start typing letters and matching notes appear.
A selection toolbar formats inline
Select text in the editor and a Notion-style bubble toolbar pops up over it: bold, italic, strikethrough, highlight, inline code, math, a link, and a comment, plus a “Turn into” menu that re-types the block (Text, Heading 1–3, bulleted/numbered/to-do lists, quote, code). The footer shows the focused action’s keyboard shortcut. The same inline formats have shortcuts that work on every platform, in or out of Vim mode (Mod is ⌘ on macOS, Ctrl on Windows/Linux): Mod+B bold, Mod+I italic, Mod+E code, Mod+K link, Shift+Mod+S strikethrough, Shift+Mod+H highlight, Shift+Mod+M math. Press Mod+/ to focus the toolbar, then walk it with the arrow keys (or h/j/k/l in Vim mode); Enter applies, Esc returns to the text.
Templates scaffold new notes
Built-in templates cover engineering (ADR, RFC, Bug Report, Postmortem, Meeting Notes, 1:1) and personal use (Daily Note, Weekly Review, Reading Notes, Journal, Project Kickoff, To-do), and you can author your own under Settings → Templates. A template is plain Markdown with optional frontmatter and variables like {{title}}, {{date}}, {{week}}, and {{cursor}}, substituted at creation. Custom templates are saved as .md files in .zennotes/templates/, so they stay as portable as everything else.
Reference and connections support research-heavy work
Pin a companion note or PDF in the reference pane, then toggle the connections panel to inspect backlinks and unresolved links while you draft.
Zen mode removes chrome
Use the configured Zen shortcut to strip away the title bar, sidebar, note list, tabs, pane headers, side panels, and status bar. Only the active editor, preview, or split view stays visible.
Links are actionable
Use [[wikilinks]] or standard Markdown links — both are first-class. A [text](Note.md) link navigates just like a [[wikilink]] everywhere: the preview, the editor’s live preview, and the follow-link motion. Internal links (relative paths and #heading anchors) open the note; external links — including bare domains you typed without a scheme, like [site](google.com) — open in the browser. In Edit and Split a plain click follows a rendered link (click one the cursor is inside to edit it instead), Cmd/Ctrl-click always follows, and Markdown links show a pointer cursor on hover. In normal mode the follow-link motion (gd) opens the link under the cursor and pins PDFs into the reference pane. If the target note does not exist yet, following the link any way — click, Cmd/Ctrl-click, or gd — offers to create it after you confirm, instead of leaving a dead link. Prefix a wikilink with `!` to embed rather than link: `![[Note]]` inlines the target note content in the reading view and PDF export — recursively, with cycle protection — so a master note can pull in sub-notes and export to PDF as one document. `![[image.png]]` embeds an image.
Renaming a note fixes its links
Rename a note and every [[wikilink]] pointing at it across the vault rewrites itself to the new name — no dead links. It handles every form ([[Note]], [[Note|alias]] keeping your display text, [[Note#heading]], [[Note^block]], embeds ![[Note]], and path-style [[folder/Note]]), skips anything inside fenced or inline code, and only touches links that actually resolved to that note, so notes that share a title never get cross-wired. It runs in the vault layer, so it applies however you rename — the editor, the MCP tools, the CLI, or the HTTP API — on desktop and the self-hosted server alike.
Attachments stay local
Drop or paste files into a note to insert local assets. ZenNotes copies them into the vault's assets/ folder — the same for drag-drop and paste, whether you keep notes in inbox/ or at the vault root — can reveal them from the app, and treats PDFs specially in preview and reference workflows. In the sidebar you can drag an image, PDF, or any attachment onto a folder to move it, just like a note, or use its Move… context-menu entry.
Any CSV is a database
A .csv file in your vault is a full Notion-style database, with zero new dependencies. The same data shows up as an editable Table and a Board grouped by a select field, fields are typed (text, number, checkbox, date, select, multi-select) with sort, filter, and a raw-CSV toggle, and every row keeps a stable id so external edits round-trip cleanly. Open any row as a real Markdown record page whose frontmatter mirrors its properties. You can also link to a database itself: type [[ in any note and pick it (databases appear alongside notes and assets) to drop a [[Database]] link that opens the grid on click. The table is the source of truth: editing a cell or adding, renaming, or removing a field updates an open record page’s metadata immediately, leaving the body intact, and the in-editor frontmatter renders as a compact properties card. Create one with New Database in the command palette or by right-clicking a folder → New database.
Math, diagrams, and plots render from plain fences
Inline $…$ and display $$…$$ math render via KaTeX. Four fenced block languages turn into live diagrams: mermaid for flow and sequence; tikz for LaTeX-native coordinate systems (runs on-device); jsxgraph for interactive geometry; and function-plot for Cartesian plotting. Each block is ordinary Markdown on disk.
Footer actions expose utility views
The sidebar footer gives you direct access to Attachments, Help, and Settings, so utility screens stay discoverable.
Destructive actions ask first
Moving a note to Trash asks for confirmation before anything is deleted. The Trash view separates restore from permanent delete.
Inline comments
Highlight a passage in any note and leave a comment anchored to the text. Press Mod+Alt+M (or open the text menu with m) to start a comment, and Mod+Shift+C to toggle the panel itself. Comments live in a side panel on the editor and stay attached to their selection as the surrounding paragraph evolves.
Anchored to the selection
Each comment stores the selected range plus the text snippet itself. If the surrounding paragraph drifts, ZenNotes re-locates the anchor by snippet so the comment never points at the wrong place.
Side-of-line markers
A small marker sits inside the editor's right padding next to the line that owns the comment. Click it (or click the card in the sidebar) to jump back to the anchored text.
Resolve when done
Resolved comments stay in the note's history but disappear from the active sidebar. Reopen the panel anytime to revisit them.
Plain-file friendly
Comments are persisted next to the note, so the Markdown source itself stays clean and diff-friendly. Your
.mdfiles don't grow comment clutter.