ZenNotes

ZenNotes manual

Docs

The same in-app help, on the web, plus a simple run guide for desktop and self-hosted setups. Start with the run section if you just cloned the repo and want ZenNotes running.

Overview

ZenNotes is a keyboard-first, Markdown-first notes app. It ships from one shared core as a native Electron desktop app and as a self-hosted web app backed by a Go server, with a planned hosted mode on the same stack. Your notes stay as plain .md files in a vault you own. Modal editing, Vim motions, split panes, preview, and a bundled MCP server are all first-class.

This page is a live copy of the built-in manual. Press :h or open Help from the sidebar footer to browse the same content inside the app.

Checking whether ZenNotes can do something specific? Jump to the Feature index — a scannable list of every feature with the fastest way to reach it. Press Cmd/Ctrl+F to search this page.

Run ZenNotes

The shortest practical paths to getting ZenNotes running. If you want the browser version or a home-server setup, start with Docker. If you want the native app, start with desktop.

Run the desktop app

Best if you want ZenNotes as a native desktop app on your own machine, with either a local vault or a remote ZenNotes server.

npm ci
Install the monorepo dependencies.
npm run dev:desktop
Start the Electron desktop app in development mode.
make desktop
Shorter alias for the same local desktop dev flow.
  • Requires Node.js 22+ and npm.
  • Open a local vault from Settings -> Vault, or use Quick Connect… / Connect to Remote Vault… to point the desktop app at a self-hosted ZenNotes server.
  • Desktop can save multiple remote workspaces, repoint the active remote with Change Remote Vault…, and return to local mode later.
  • Export Note as PDF… is available from the command palette and the Shift+Mod+E shortcut.
  • For packaged desktop builds, use npm run build:prod and then npm run pack.

Run the published Docker image

The fastest way to self-host in the browser. Pull the prebuilt multi-arch image from Docker Hub — no git checkout or local build required.

TOKEN=$(openssl rand -hex 32)
Generate a login token. The container binds to 0.0.0.0, so the server requires a token and refuses to start without one.
docker run -d --name zennotes -p 127.0.0.1:7878:7878 -e ZENNOTES_AUTH_TOKEN="$TOKEN" -v "$HOME/Documents/MyVault:/workspace" -v "$HOME/zennotes-data:/data" --read-only --tmpfs /tmp --cap-drop ALL --security-opt no-new-privileges adibhanna/zennotes:latest
Start the prebuilt image with your host vault mounted at /workspace and server config at /data.
echo "$TOKEN"
Print the token to paste into the browser on first connect.
open http://localhost:7878
Open the self-hosted ZenNotes web app in your browser.
  • The image is multi-arch (linux/amd64 and linux/arm64); docker pull adibhanna/zennotes selects the right build automatically.
  • Pin a release with a version tag, e.g. adibhanna/zennotes:2.0.1, instead of :latest.
  • Your vault stays on the host as ordinary .md files; the /data volume holds the server config.
  • This runs the same server as the make up flow below, so every ZENNOTES_* environment variable there applies here too.
  • Prefer ZENNOTES_AUTH_TOKEN_FILE over ZENNOTES_AUTH_TOKEN for Docker or Kubernetes secrets so the token never lives in shell history or .env.
  • Drop the 127.0.0.1 prefix on -p to reach it from your LAN, but put a TLS reverse proxy in front and set ZENNOTES_BEHIND_TLS=1 first.

Build and run with Docker from source

Build the image yourself from a local checkout with make up — use this when you want to modify the source or have the auth token generated for you. To just run it, use the published image above.

CONTENT_ROOT="$HOME/Documents/MyVault" make up
Build and start the self-hosted stack with your host vault folder mounted into the container.
cat data/auth-token
Read the generated bootstrap auth token the browser will ask for on first connect.
open http://localhost:7878
Open the self-hosted ZenNotes web app in your browser.
make down
Stop the Docker stack.
make logs
Follow the server logs.
  • The vault stays on the host. Docker is only serving it; your notes are not stored inside the container.
  • On first load, ZenNotes asks for the token stored in ./data/auth-token, then asks you to choose the vault folder from the mounted content root.
  • After the first browser login, ZenNotes uses a session cookie, so reloads should not keep asking for the token.
  • The desktop app can connect to the same Docker-backed server, so browser and desktop can point at one host-mounted vault.
  • Docker can only browse folders you mounted. If you want to browse an Obsidian or iCloud folder from the web picker, mount that folder as CONTENT_ROOT or mount a parent directory that contains it.
  • The default Docker setup binds to localhost and is meant to sit behind a reverse proxy or private network gate if you expose it remotely.
  • For public exposure, set ZENNOTES_BEHIND_TLS=1 once a TLS proxy is in front; that flips on Secure cookies and HSTS.
  • Set ZENNOTES_TRUSTED_PROXIES to the proxy CIDR (e.g. 127.0.0.1/32 or your bridge network) so X-Forwarded-Proto and X-Forwarded-For are only honoured from the proxy, not arbitrary clients.
  • Prefer ZENNOTES_AUTH_TOKEN_FILE over ZENNOTES_AUTH_TOKEN for Docker / Kubernetes secrets so the token never lives in .env.
  • Notes default to 0600 and dirs to 0700; tune with ZENNOTES_VAULT_FILE_MODE and ZENNOTES_VAULT_DIR_MODE if you intentionally share the vault with another local user.
  • Body size caps are enforced server-side: ZENNOTES_MAX_NOTE_BYTES (default 10 MiB) and ZENNOTES_MAX_ASSET_BYTES (default 50 MiB).

Run the web app from source

Best for development. For normal self-hosted use, prefer the Docker flow above.

npm ci
Install the monorepo dependencies.
npm run dev:server
Start the Go backend.
npm run dev:web
Start the Vite frontend in a second terminal.
make web-stack
Run both processes together instead of starting them manually.
  • The web client and Go server are separate processes in dev mode.
  • If auth is enabled, the browser will prompt for the server token before protected routes work.
  • Browser auth now uses the bootstrap token once and then an HttpOnly session cookie instead of keeping the token in the URL.
  • If backend routes change, restart the Go server and reload the page.
  • If Connect to server vault appears dead in dev mode, the Go server is usually missing or stale. Restart npm run dev:server and reload.

Use desktop with a remote ZenNotes server

Best if you want the native desktop app, but the vault itself lives on another machine running the ZenNotes server.

npm run dev:desktop
Start the desktop app.
Settings -> Vault -> Quick Connect…
Enter the server URL and, if required, the bootstrap auth token.
Choose the vault folder on the server
The desktop app then uses that remote vault instead of the local filesystem.
  • Remote connections can be saved and reused later from Settings and the command palette as Saved Remote Workspaces.
  • Settings -> Vault also exposes Change Remote Vault…, Return to Local Vault, and Open Local Vault….
  • When connected remotely, ZenNotes shows a Remote indicator in the sidebar and title bar.

Quick start

The shortest path from install to a working vault.

Choose a vault

A vault is just a folder of Markdown files. ZenNotes reads it directly, keeps everything file-based, and never hides your notes behind a database. That can be a local folder on desktop or a host-mounted folder served remotely through Docker.

Use the three working zones

The sidebar is your navigator, the note list is your current folder or attachments view, and the editor pane is where tabs, splits, preview, and focused writing happen.

Capture, organize, archive

Quick Notes are for fast capture, Inbox is active work, Archive is cold storage, and Trash is recoverable deletion. Archive and Trash open as dedicated main-pane lists so the sidebar stays singular; Quick Notes stays foldable in the sidebar and can also open its own list tab from the context menu.

Stay keyboard-first

Search notes, search vault text, and open the command palette from their configured shortcuts. Use Vim mode for ex commands, pane motion, hint mode, leader hints, link-following, and keyboard-opened context menus. Once a picker is open, Arrow keys and Ctrl+N / Ctrl+P both move through results.

Insert structure inline

Type / in the editor to open a slash menu for headings, lists, callouts, code blocks, dividers, tables, links, images, and more. Type @ to insert date shortcuts like Today, Yesterday, and Tomorrow as Markdown-friendly ISO dates.

Customize the chrome

Folder icons can be changed from the folder context menu, sidebar arrows can be hidden, and Quick Notes can use either timestamp titles, date titles, or a custom prefix.

Export what you wrote

Export Note as PDF… uses the rendered Markdown note, not raw text. On desktop it saves directly; in the browser it opens a print-friendly white paper view so you can Save as PDF.

Use the built-in manual

Open Help from the sidebar footer or with :help to browse shortcuts, commands, panel behavior, Vim flows, and settings in one place.

Seed a starter vault tour

Run Generate Demo Tour Notes from the command palette to add a guided set of demo notes under inbox/demo, plus a local attachment. Run Remove Demo Tour Notes to clear them later.

Pick up where you left off

ZenNotes restores the last open tabs, splits, built-in views, and sidebar layout for each vault, and remembers the main window size, position, and maximized state between launches. Remote vault connections can also be saved for quick switching later.

Feature index

A single scannable index of every user-facing capability in ZenNotes, grouped by domain. Each row lists the fastest way to reach a feature — a shortcut, ex command, command-palette entry, slash command, Settings path, or CLI command — so you can confirm a feature exists and use it without reading prose.

How to use this index

Press Cmd+F (macOS) or Ctrl+F (Windows/Linux) to search this page for a feature name, a shortcut, or an ex command. Each group below covers one domain; jump to the matching group, then scan its table.

Mod means Cmd on macOS and Ctrl on Windows/Linux. Bindings shown are defaults — every shortcut, Vim binding, and sequence is remappable in Settings → Keymap. Leader bindings (Space prefix) and ex commands (typed after :) require Vim mode; the equivalent command-palette entry works in any mode.

Many features have more than one access path. Where that is true, the row lists all of them: shortcut and ex command and palette entry. Use whichever fits your current context.

Feature groups at a glance

Six domains. Jump to the one that matches what you are looking for.

Editing, rendering & writing aids

Markdown editor and view modes, live preview, slash and @ menus, wikilinks, folding, math, diagrams, callouts, tables, code blocks, comments, find & replace, and formatting.

Editing

Workspace, panes & navigation

Sidebar, note list, panels, tabs, splits, reference panes, palettes, zen mode, theme switching, floating windows, and session persistence.

Workspace

Notes lifecycle, organization & views

Inbox, Archive, Trash, Quick Notes, Tasks, Tags, templates, daily and weekly notes, folders, assets, and all create/rename/move/duplicate/delete operations.

Notes

Keyboard system, Vim & commands

Global shortcuts, the Vim leader and which-key system, pane motions, ex commands, list navigation, and command-palette categories.

Keys

Settings & appearance

Themes, typography, editor behavior, vault location, daily/weekly notes, system folder labels, and the keymap editor.

Settings

Integrations & platforms

zen CLI, MCP server and tools, Raycast extension, the Go server, remote vaults, PDF export, and app updates.

Integrations

Editing — view modes

Switch how the active note is shown. Each mode has a shortcut, an ex command, and a palette entry.

Mod+4
Edit mode — raw markdown editor Also :editmode or :view edit; palette 'Switch to Edit Mode'. Vim leader Space e f context.
Mod+5
Split mode — editor + live preview side by side Also :splitmode or :view split; palette 'Switch to Split Mode'.
Mod+6
Preview mode — read-only rendered view Also :previewmode or :view preview; palette 'Switch to Preview Mode'. Navigate with j/k, Ctrl+D/Ctrl+U.
:view
Set pane mode from the ex line :view edit | split | preview. Per-pane and per-note persistent.

Editing — inline authoring aids

Insert structure and resolve links without leaving the keyboard.

/
Slash insert menu — headings, lists, code, table, callout, math, link, image, divider, new page Type / at line start or after whitespace, then filter.
@
Date shortcuts — insert Today / Yesterday / Tomorrow as ISO dates Type @ then a label (e.g. @today, @tomorrow). Searchable by weekday or month name.
[[
Wikilink autocomplete — link notes, paths, and assets Type [[target]] or [[target|label]]. Filters notes, images, PDFs, SVGs.
gd
Follow link / go-to-definition (Vim) Cursor on a wikilink, URL, or PDF, then gd. Or click in Edit/Split. URLs open externally; PDFs pin as a reference. Palette 'Follow link'.
#tag
Hashtag link — clickable inline tag Type #tag (letters after #, slashes allowed for hierarchy). Click in preview to open Tags view.
![[ ]]
Embed image / asset inline ![alt](path) or ![[path]]; or paste/drop an image. SVGs and PDFs embeddable.
Ctrl+Space
Open autocomplete manually Context-aware sources for /, @, and [[. Esc dismisses.

Editing — formatting, folding & cleanup

:format
Format markdown with Prettier Also Vim leader Space l f; palette 'Format Markdown'. proseWrap preserved.
Inline Bold
Wrap selection: bold, italic, strikethrough, code, link, image Palette entries 'Inline Bold/Italic/Strikethrough/Code', 'Insert Link'. Bindings configurable in Settings → Keymap.
zc / zo
Fold / unfold heading at cursor (Vim) Also :fold / :unfold; palette 'Fold/Unfold Heading at Cursor'. Or click the inline fold arrow on hover.
zM / zR
Fold all / unfold all headings (Vim) Also :foldall / :unfoldall; palette 'Fold All' / 'Unfold All'. Fold state is per-session.
Alt+Z
Toggle word wrap Palette 'Enable/Disable Word Wrap'. Off requires horizontal scroll.
Tab
Indent / nest list item (Shift+Tab de-indents) Ordered lists auto-renumber on insert, delete, and paste.
Mod+Z
Undo (Mod+Shift+Z / Ctrl+Y to redo) Per-pane history. Also via context menu.
Copy / Fold
Code block toolbar — copy to clipboard or collapse Hover a code block in Preview or Split. Fold state persists per note.

Editing — rendering, math & diagrams

Markdown rendering features. All are GFM-based and theme-aware; diagrams expand to a pan/zoom modal.

$ … $
Math (KaTeX) — inline $…$ and display $$…$$ Display block also via / slash menu → Math block.
```mermaid
Mermaid diagrams — flowchart, sequence, state, ER, Gantt, pie, git Theme-aware, lazy-loaded. Expand for pan/zoom.
```tikz
TikZ / PGF vector diagrams Lazy-loaded; theme-aware SVG; expandable.
```jsxgraph
JSXGraph interactive geometry & graphs Points, lines, functions, animations; expandable.
```function-plot
function-plot 2D function graphs JSON config (e.g. {"data":[{"fn":"sin(x)"}]}); expandable.
```lang
Code block syntax highlighting Triple backticks + language tag (200+ languages). Also / slash menu → Code block.
| a | b |
GFM tables with alignment Use :--- / ---: / :---: for left/right/center. Also / slash menu → Table.
> [!note]
Callout blocks — note, tip, warning, danger, and more Also / slash menu → Callout. Type sets icon and color.
- [ ]
Task checkboxes (GFM) — click to toggle in preview Feed the Tasks view.
~~text~~
Strikethrough Also via inline strikethrough command.
> quote
Blockquote Also / slash menu → Quote.
[^1]
Footnotes with auto backrefs Define [^1]: text elsewhere in the note.
---
YAML/TOML frontmatter (hidden in preview) --- … --- (YAML) or +++ … +++ (TOML). Holds metadata and template variables.
F
Diagram modal — pan, zoom (+/-), fit (0), full-screen (F) Click Expand on any diagram. Drag to pan, scroll to zoom, open in a tab.

Editing — search, comments & PDF

Mod+F
Find & replace in the current note Tab to Replace; toggle case / regex / whole-word. Edit and Split modes only. (Non-Vim mode: Mod+F is note search instead — see Search.)
Mod+Shift+C
Comments panel — annotate selected text Select text, open Comments, '+' for New Comment, Mod+Enter to save. Navigate with j/k; e edit, r resolve, d delete. Also select text + m in editor.
:outline
Heading outline palette — jump to any heading Also Mod+3 toggles the outline panel; Vim leader Space p; palette 'Open Note Outline'.
[label](file.pdf)
Embed a PDF; pin it as a reference (desktop) Right-click embed → 'Open as Reference (Global)' or '(This Note)'; or gd on the link. Render style set in Settings → Editor → PDFs in edit mode.

Workspace — panels & layout toggles

Show, hide, and arrange the chrome around the editor.

Mod+1
Toggle sidebar (folders, notes, tags) Also Vim leader Space e; palette 'Toggle Sidebar'.
Mod+2
Toggle connections panel (backlinks) Palette 'Toggle Connections Panel'. Navigate with j/k, Enter/o, p to peek.
Mod+3
Toggle outline panel (headings) Also Vim leader Space p; palette 'Toggle Outline Panel'.
Mod+.
Toggle Zen mode (distraction-free) Also :zen toggle | on | off; palette 'Enter/Exit Zen Mode'. Hides all chrome.
Mod+W
Close active tab or virtual view Also :q / :bd / :bclose; palette 'Close Tab'. Closes Tasks/Tags views too.
Toggle
Toggle note list column Palette 'Toggle Note List Column'. Button in note list header. Hidden in unified sidebar mode.

Workspace — panes, tabs & splits

Multi-pane editing. Split and pane commands work via Vim Ctrl+W, ex commands, and the palette.

Ctrl+W v
Split right — clone tab into a new right pane (Vim) Also :vsplit / :vs; palette 'Split Right'.
Ctrl+W s
Split down — clone tab into a new pane below (Vim) Also :split / :sp; palette 'Split Down'.
Ctrl+W h/j/k/l
Focus pane left/down/up/right (Vim) Wraps to sidebar/panels at edges. Ctrl+W Ctrl+h/j/k/l also works.
:only
Close other tabs in pane Palette 'Close Other Tabs in Pane'; context menu on tab. Pinned tabs survive.
Pin Tab
Pin a tab so it survives bulk-close Palette 'Pin Tab'; right-click tab. Pinned tabs stay at the front.
Close Right
Close tabs to the right Palette 'Close Tabs to the Right'; context menu on tab.
Drag divider
Resize pane split Persists in the saved layout.

Workspace — reference pane & floating windows

Pin Reference
Pin active note as a side-by-side reference Palette 'Pin Active Note as Reference'; right-click tab. One pinned reference at a time; per-note pin overrides global.
Show Reference
Toggle reference pane visibility without unpinning Palette 'Show/Hide Reference Pane'; eye icon in the pane header.
Mod+Alt+E
Toggle reference pane edit/preview mode Button in the pinned pane header. Drag the left edge to resize.
Floating Window
Open a note in a separate window (desktop) Palette 'Open in Floating Window'; right-click note or tab. Independent editing state and Vim mode.

Workspace — palettes & search

Fast finders. Each has a shortcut and a Vim leader binding.

Mod+P
Search notes — fuzzy by title and path Vim leader Space f; non-Vim alias Mod+F; palette 'Search Notes'. Supports inline #tag filtering.
Mod+Shift+P
Command palette — run any command Also :cmd <query> (runs best match) or :commands (always opens). Switches to theme and vault modes.
Mod+Shift+F
Vault text search — full-text across notes Vim leader Space s t; palette 'Search Text in Vault'. Backend: Auto / built-in / ripgrep / fzf (Settings → Editor).
Space o
Buffer switcher — all open tabs (Vim) Also :buffers / :ls; palette 'Open Buffer Switcher'.
Space v
Vault switcher (Vim, desktop) Palette 'Switch Vault'. Lists local and remote vaults.

Workspace — appearance & navigation extras

Mod+= / Mod+- / Mod+0
Zoom in / out / reset app UI Palette 'Zoom In/Out', 'Reset Zoom'. Persists across sessions.
Themes
Theme switcher with live preview Mod+Shift+P → 'Themes'; or Settings → Appearance. Esc reverts the preview.
Alt+Left / Mod+[
Tab history back / forward (Mod+]) Vim Ctrl+O / Ctrl+I; Vim leader Space [ / Space ]; palette 'Go Back' / 'Go Forward'.
f
Hint mode — jump labels for clickable targets (Vim) Works in editor, preview, and panels.
Hover / Space
Hover preview peek of a linked note Hover a wikilink, or press p (Space) on a connections-panel row.
Click image
Preview image lightbox — zoom, pan, prev/next Closes on Esc or click-outside.

Notes — built-in views

Special views that gather notes and tasks across the vault.

:tasks
Tasks view — all checkboxes, List/Calendar/Kanban Vim leader Space t (per binding); palette 'Open Tasks'; sidebar. Switch modes with 1/2/3. Toggle a task with Space or x.
:tag
Tags view — browse and filter by tag :tag foo bar pre-selects tags; Vim Space # ; palette 'Open Tags'; sidebar. Union (ANY) matching.
:trash
Trash view — restore (r) or delete (d/x) Palette 'Go to Trash'; sidebar. 'Empty Trash' clears all.
Mod+Shift+N
Quick Notes (Inbox) view / new quick note Also Space z or Space q; palette 'New Quick Note'. Press n in the view to add. Naming set in Settings → Editor.
Inbox
Inbox view — primary active notes Sidebar 'Inbox'; palette 'Go to Inbox'. Sort, filter, group by kind, multi-select, drag-drop.
Archive
Archive view — inactive notes Sidebar 'Archive'; palette 'Go to Archive'. Press u to unarchive, d to trash.
Files
Files / Assets view — images, PDFs, media Sidebar 'Files'; palette 'Go to Files'. Grid or list layout; open in tab or reference pane.

Notes — create, template & journal

:new
New note (Inbox or vault root) :new <path> for an explicit location; palette 'New Note in Inbox' / 'New Note in Vault Root'.
:e <path>
Open or create a note by path :edit inbox/Work/note.md. Creates missing folders.
New in Folder
New note in the current folder Palette 'New Note in Current Folder'; folder context menu.
:template
New note from template (picker or by name) Also :tmpl; Vim leader Space t; Mod+Shift+T; palette 'New Note from Template'. Variables: {{title}}, {{date}}, {{time}}, {{week}}, {{cursor}}.
Save as Template
Save the current note as a custom template Palette 'Save Current Note as Template'; Space Shift+T. Stored in .zennotes/templates/.
:daily
Open today's daily note Vim leader Space d; Mod+Shift+D; palette 'Open Today's Daily Note'. Requires daily notes enabled in Settings → Vault.
:weekly
Open this week's note (YYYY-Www) Vim leader Space w; Mod+Shift+W; palette 'Open This Week's Note'. Requires weekly notes enabled in Settings → Vault.

Notes — manage, move & organize

:mv
Move note to a folder Also :move; Mod+M; palette 'Move Note to Folder'; context menu 'Move…'. Interactive folder autocomplete.
Rename
Rename note (filename only) Palette 'Rename Note'; context menu 'Rename…'. No / or \ allowed.
Duplicate
Duplicate note in place Palette / context menu 'Duplicate'. Appends ' (copy)'.
Mod+Shift+A
Archive note Palette 'Archive'; context menu. Unarchive moves it back to Inbox.
Trash
Move note to Trash (soft delete) Palette 'Move Note to Trash'; d in list views; context menu. Restore from Trash view.
Copy Wikilink
Copy note as [[Title]] Palette 'Copy Note as Wikilink'; context menu.
Copy Path
Copy relative or absolute note path Palette 'Copy Note Path' / 'Copy Note Absolute Path'; context menu.
Reveal
Reveal note in Finder / File Explorer (desktop) Palette 'Reveal Note in File Manager'; context menu 'Reveal in Finder'.

Notes — folders, tags & assets

Create Folder
Create / rename / delete a folder Sidebar context menu; Settings → Folders. Supports nested paths like Inbox/Work/Projects.
Set Icon
Assign an emoji icon to a folder Sidebar right-click → 'Set icon'. Persisted per vault.
Rename Tag
Rename or delete a tag across the vault Palette 'Rename Tag…' / 'Delete Tag…'. Updates every note.
Drag-drop
Import markdown by dropping files on the window Desktop opens in place; web creates a new note. Filename becomes the title.
Paste / Drop
Attach images, PDFs, and documents Stored under the vault assets directory by folder context. Manage in the Assets view.

Notes — task metadata & sorting

Annotate task lines inline; tasks are parsed across all notes.

due:YYYY-MM-DD
Task due date Past = overdue (Today group); future = Upcoming. Also frontmatter due:.
!high / !med / !low
Task priority (also !h / !m / !l) Sorts Today and Waiting groups. Also frontmatter priority:.
@waiting
Mark a task as waiting Grouped separately, below Today/Upcoming.
#tag
Tag a task Filterable in the Tasks view and via the CLI/MCP.
Sort
Sort note list — name, updated, created, or manual Sort menu in note list header; palette 'Sort Notes: …'. 'Group by Kind' separates folders from notes.

Keyboard — global shortcuts

Mode-independent shortcuts. All remappable in Settings → Keymap.

Mod+,
Open Settings Palette 'Open Settings'.
Mod+Shift+E
Export note as PDF (desktop/web) Also :note-export-pdf; palette 'Export Note as PDF'.
Mod+Shift+Space
Quick capture floating window (desktop) Vim leader Space q; palette 'Quick capture'. System-wide hotkey configurable in Settings → Editor.

Keyboard — Vim leader (Space)

Vim mode only. Press Space, then the next key; enable which-key hints in Settings → Editor to see options.

Space f
Search notes Equivalent to Mod+P.
Space o
Open buffers Equivalent to :buffers.
Space s t
Search vault text Two-key sequence after leader.
Space e
Toggle sidebar Equivalent to Mod+1.
Space p
Note outline Equivalent to :outline.
Space t
Template picker Equivalent to :template.
Space d / Space w
Today's daily / this week's note Equivalent to :daily / :weekly.
Space q
Quick capture Equivalent to Mod+Shift+Space.
Space v
Switch vault (desktop) Opens the vault switcher.
Space l f
Format note Editor normal mode; runs Prettier.

Keyboard — Vim motions & panes

Ctrl+W
Pane prefix (then h/j/k/l, v, s) Configurable. Press twice to cancel.
Ctrl+O / Ctrl+I
Go back / forward in note history Per-pane history.
[b / ]b
Previous / next buffer Equivalent to :bp / :bn.
gd
Follow link at cursor Resolves wikilinks, URLs, and PDFs; creates missing notes.
f
Hint mode jump labels Editor and panels.
zc / zo / zM / zR
Fold / unfold heading or all headings Equivalent to :fold / :unfold / :foldall / :unfoldall.
Ctrl+D / Ctrl+U
Half-page scroll down / up Clamped scrolling; safe with folds and live preview.
Native Vim
Full normal/insert/visual editing hjkl, w/b/e, d/c/y, text objects, n/N search, ., u, Ctrl+R, /pattern.

Keyboard — list & view navigation

Active when a list or panel (not the editor) has focus.

j / k
Move selection down / up Arrow keys also work.
gg / G
Jump to top / bottom List or preview content.
l / Enter
Open the selected item Opens folder, note, or result.
h / Esc
Back out — collapse folder or return to editor Hierarchical step back.
/
Focus filter / search in the view Esc clears the filter.
m
Open context menu for the row Shift+F10 / ContextMenu key also work.
:
Local ex prompt (Tasks/Tags views) View-specific commands, e.g. :tag foo.
x / Space
Toggle task (Tasks view) or delete/trash (lists) Behavior depends on view; in Trash, deletes permanently.
r / u
Restore (Trash) / unarchive (Archive) View-specific actions.

Keyboard — ex commands & the keymap editor

Type : in Vim normal mode, then a command. Tab cycles completions in a wildmenu. Every palette command is also reachable as an ex command (kebab-case to underscores).

:w / :q / :wq
Save / close tab / save and close Autosave is on by default; :w forces it.
:qall / :only
Close all tabs / close other tabs :qa, :xall, :wall variants supported.
:help
Open the built-in Help manual Also :h; palette 'Open Help'; sidebar Help link.
Settings → Keymap
Remap any shortcut or sequence 'Record Shortcut' / 'Record Sequence' buttons; filter, Change, Reset per binding or globally.
Toggle Vim
Enable / disable Vim mode Palette 'Enable/Disable Vim Mode'; Settings → Editor. Disables leader, panes, ex, and hint mode when off.

Settings — appearance & typography

Open with Mod+, then choose a tab.

Appearance → Theme Family
Theme family (Apple, Gruvbox, Catppuccin, GitHub, Solarized, One, Nord, Tokyo Night) Plus Mode (Light/Dark/Auto) and contrast/flavor/variant pickers.
Appearance → Dark sidebar
Dark sidebar and disclosure arrows toggles Also palette 'Dark Sidebar' / 'Light Sidebar'.
Typography → Fonts
Interface, text, and monospace fonts Independent font choices for chrome, reading, and code.
Typography → Size / Line height
Font size (12–32px) and line height (1.2–2.4) Applies to edit and preview.
Typography → Widths
Reading width, editor width, content alignment Caps line length on wide screens; Center or Left.
Typography → Line numbers
Off / Absolute / Relative line numbers Also palette 'Line Numbers: …'. Relative suits Vim counts.

Settings — editor behavior & vault

Editor → Vim mode
Vim mode, leader hints, hint behavior & duration Which-key overlay: Timed or Sticky, 400–3000ms.
Editor → Live preview
Live preview, note tabs, wrap tabs, word wrap, smooth scroll Hides syntax markers off the cursor line; tab and wrap options.
Editor → Search backend
Vault text search backend + rg/fzf binary paths Auto / Built-in / ripgrep / fzf.
Editor → Quick notes
Date-titled quick notes, prefix, quick capture hotkey Controls quick note naming and the global capture shortcut.
Vault → Location
Vault location, remote connection, saved profiles Change… folder picker; Quick Connect…; saved remote workspaces.
Vault → Primary notes
Primary notes location — Inbox or Vault root Obsidian-style root layout vs. dedicated inbox/.
Vault → Daily / Weekly
Enable daily/weekly notes, directory, template Open today / open this week buttons.
Vault → System Folders
Relabel Inbox / Quick / Archive / Trash in the UI Display names only; folder IDs are unchanged.
Templates
Browse, create, edit, reset templates Built-ins (ADR, RFC, Meeting Notes, and more) fork into editable copies in .zennotes/templates/.

Integrations — zen CLI

Install from Settings → CLI, then run zen in any terminal. Override the target vault with ZENNOTES_VAULT; most commands accept --json.

zen list
List notes (filter by --folder, --tag, --limit) Most recent first.
zen read
Print a note body (--meta, --json) Vault-relative path.
zen create / write / append / prepend
Create or modify note bodies --body inline or - for stdin; write is destructive.
zen capture
Quick-add text as a note (defaults to quick folder) echo "text" | zen capture --tag idea.
zen search / search-title
Full-text and title search Line-level matches with --limit.
zen backlinks
Find notes linking to a note Run before renaming.
zen rename / move / duplicate
Rename, relocate, or copy a note --to, --folder, --subpath.
zen archive / trash / restore / delete
Lifecycle operations delete is permanent (--yes).
zen folder / tag / task
Folder, tag, and task operations Includes zen task list and zen task toggle <id>.
zen vault info / open / mcp
Vault stats, open a file in the app, start MCP zen mcp runs the stdio MCP server.

Integrations — MCP, Raycast & server

Connect AI agents, Raycast, and remote servers. MCP and Raycast are set up in Settings → MCP and Settings → CLI.

Settings → MCP
MCP server status, client integrations, instructions Install entries for Claude Code, Claude Desktop, Codex; edit the system prompt (.zennotes/mcp-instructions.md).
MCP tools
Full vault access for agents vault_info, list/read/create/write/move/rename/duplicate/archive/trash/delete notes; search_text, search_by_title/tag, list_tags, backlinks; list_tasks/toggle_task; append/prepend/insert_at_line, replace_in_note; folder tools.
Settings → CLI → Raycast
Install the ZenNotes Raycast extension (macOS) Search notes from Raycast; actions open, archive, trash, reveal, copy. Requires Node, npm, Raycast.
zennotes-server
Self-hosted Go server (desktop + web clients) Default 127.0.0.1:7878; configure via env vars, ~/.zennotes/server.json, or Docker. Auth token required off loopback.
Connect Remote
Connect desktop to a remote vault Palette 'Connect to Remote Vault'; Settings → Vault. 'Switch to Local Vault' returns.
Check for Updates
In-app app updater (desktop) Palette 'Check for Updates'; Settings → About. Downloads and relaunches.

Core concepts

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.

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.

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.

@ shortcuts insert relative dates

Typing @ in normal text opens date suggestions for Today, Yesterday, and Tomorrow, inserting ISO dates like 2026-04-15 — file-friendly and sortable.

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 Markdown links. In normal mode, the follow-link motion opens the link under the cursor, offers to create missing notes, and pins PDFs into the reference pane.

Attachments stay local

Drop files into a note to insert local assets. ZenNotes tracks the attachments folder, can reveal it from the app, and treats PDFs specially in preview and reference workflows.

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.

Organization and views

ZenNotes organizes your vault into a handful of system areas you move notes through over their lifetime, plus folders you create freely. This section covers every view in the sidebar, how to sort, filter, and group what you see, and every operation you can perform on a note or folder.

Your vault is a normal directory of Markdown files on disk. On top of it, ZenNotes defines four built-in lifecycle areas: Inbox, Quick Notes, Archive, and Trash. These areas exist conceptually even if you rename their sidebar labels. Tags and Files give you two more ways to slice the same notes and assets without moving anything.

Most actions described here are reachable several ways: a default shortcut, a command-palette title (open it with Shift+Mod+P), an ex command (type ':' in Vim normal mode), a right-click or 'm'-key context menu, and the zen CLI. Pick whichever fits your flow.

The system views

Six destinations in the sidebar. The first four are lifecycle stages a note passes through; the last two are lenses over your whole vault.

Inbox

Your primary workspace for active notes. View all notes in the inbox folder (or at the vault root, depending on settings), with configurable sort, filters, and folder grouping. Open it from the sidebar 'Inbox' entry or the command palette 'Go to Inbox'.

Lifecycle

Quick Notes

A capture buffer for fast, low-friction notes, sorted newest-first. Reach it from the sidebar, command palette 'Go to Quick Notes', or create-and-jump with the quick-capture shortcuts. The Quick Notes folder is system-wide and cannot be moved.

Lifecycle

Archive

Long-term storage for inactive notes you want to keep without cluttering Inbox. Open via the sidebar 'Archive' entry or command palette 'Go to Archive'. Notes here stay fully searchable; Unarchive returns them to Inbox.

Lifecycle

Trash

A recovery bin for deleted notes. Open with the :trash ex command, command palette 'Go to Trash', or the sidebar 'Trash' link. Notes wait here until you Restore them or delete permanently.

Lifecycle

Tags

Browse and filter notes by hashtag across the whole vault, with a multi-select chip strip. Open with :tag (optionally :tag foo bar to preselect), command palette 'Open Tags', Space # in Vim mode, or the sidebar Tags section.

Lens

Files

Browse every non-note file (images, PDFs, audio, video, binaries) in the vault tree. Open with command palette 'Go to Files' or the Files link in the sidebar footer. Open files in tabs or the reference pane.

Lens

Inbox and your primary notes location

Where your main notes live is governed by Settings → Vault → Primary notes location. In Inbox mode (the default), regular notes live in an inbox/ folder and other folders sit under archive/. In Vault root mode (Obsidian-style), notes live at the vault root with no dedicated inbox/ folder. This choice changes how the sidebar is laid out, where new notes are created, and which 'New Note' commands appear (for example, 'New Note in Inbox' versus 'New Note in Vault Root'). The setting persists across sessions.

Inside the Inbox view you can multi-select notes and folders for bulk operations, drag notes into folders or onto other panes, and assign emoji icons to folders. The note list updates automatically as you change the sidebar selection, showing notes and assets for the current folder.

Quick Notes and quick capture

Quick Notes are ordinary Markdown files that live in the quick area, listed in reverse-chronological order so the newest capture is always on top. Create one with Shift+Mod+N, Space q in Vim mode, the '+' button or 'n' key inside the Quick Notes view, or command palette 'New Quick Note'. ZenNotes focuses the title field immediately so you can start typing.

On desktop you can also pop a small floating capture window with Shift+Mod+Space (a system-wide hotkey that works even when ZenNotes is hidden), Space q via the leader, or command palette 'Quick capture'. It remembers its position and size, and notes you jot land in the Quick Notes folder.

Titling is configurable in Settings → Editor. Toggle 'Date-titled Quick Notes' to name notes by ISO date (for example 2026-05-29) instead of a timestamp, and set a 'Quick Note prefix' (default 'Quick Note') that is prepended to the title. Leave the prefix blank for a bare date or timestamp.

Archive and Trash workflows

Archive a note

Move a note from Inbox to Archive without deleting it. Use Cmd+Shift+A, command palette 'Archive', the context menu, or 'd' in some list views. Content is preserved and the note stays searchable.

Archive

Unarchive a note

Send an archived note back to Inbox with the 'u' key in the Archive view, the context menu 'Unarchive', or command palette 'Restore'/'Unarchive Note'. The sidebar updates the note's folder status immediately.

Archive

Archive view actions

Filter, sort, and search archived notes. Quick-action buttons cover Open, Unarchive, and Move to Trash. Keyboard: j/k navigate, Enter or o open, u unarchive, d delete. The full context menu (right-click or Space m) adds open in new tab, rename, move, duplicate, copy as wikilink, copy path, reveal in file manager, and open in floating window.

Archive

Move to Trash

Soft-delete a note with command palette 'Move Note to Trash', the 'd' key in list views, or the context menu. A confirmation dialog shows the note title. The note moves to the trash area and is recoverable.

Trash

Restore from Trash

Recover a trashed note back to Inbox with the 'r' key in the Trash view, the context menu 'Restore', or command palette 'Restore Note from Trash'. It returns to its original folder path if that path still exists.

Trash

Delete permanently / Empty Trash

Permanently remove a single note with the 'd' or 'x' key in the Trash view (confirmation: 'This cannot be undone'). Empty Trash deletes every trashed note at once after a single confirmation showing the count. Both are irreversible and available only in the Trash view.

Trash

Tags view

The Tags view shows every hashtag in the vault as a chip strip with per-tag counts. Click chips to select or deselect them; notes matching any selected tag appear below (union logic). A search box filters within the results. Tags can be hierarchical with slashes (for example #project/active).

Open the view with command palette 'Open Tags', Space # in Vim mode, or the sidebar Tags section. The :tag ex command opens it, and :tag foo bar replaces the current selection with those tags in one step. Inside the view, j/k navigate notes, Enter or o opens, '/' focuses the filter, and ':' opens a view-local ex prompt. The view live-extracts tags from the active editor buffer as you type.

Tag operations across the vault

Rename Tag…
Rename a tag everywhere Command palette. Prompts for the old and new tag name, then updates every note that carries it.
Delete Tag…
Remove a tag everywhere Command palette. Prompts for the tag name, then strips it from all notes.
#tag
Create a tag inline Type a hashtag in a note body. Clicking it in preview opens the Tags view with that tag selected.
Space #
Open Tags view (Vim) Equivalent to :tag and command palette 'Open Tags'.

Files and assets

ZenNotes treats your vault as a file-based, Obsidian-compatible store: loose files anywhere in the vault count as assets. Images, SVGs, PDFs, audio, video, and generic files can open in tabs or the reference pane. New referenced files default to the vault root rather than a forced attachments folder, though legacy locations such as attachements/ and _assets/ are still recognized.

Embed an asset with ![alt](path) or the Obsidian-style ![[image.png]], or paste/drop an image into the editor to auto-insert it. Wikilink autocomplete ([[) also completes asset paths. Reach the asset views from the Files link in the sidebar footer (command palette 'Go to Files') or the Assets tab that appears when a folder or asset is selected.

Assets render in two layouts you switch from the note-list header: a grid of thumbnail cards (grid icon) and a compact list with names, paths, and sizes (list icon). Your layout choice persists for the session. From the asset views you can sort, filter, search, drag assets into notes, delete unused assets, and on desktop right-click to reveal an asset in the file manager.

Creating notes

Several entry points depending on where you want the note to land.

Shift+Mod+N
New Quick Note Also Space q (Vim), the '+'/'n' in Quick Notes view, or command palette 'New Quick Note'. Lands in the quick folder, focuses the title.
New Note in Current Folder
Create in the folder you are viewing Command palette, or the folder's context menu. Only available when viewing a folder (not in Tasks/Archive/Trash views).
New Note in Inbox / Vault Root
Create in your primary notes area Command palette; the title depends on your Primary notes location setting. Equivalent to bare :new.
:new [path]
Create at an explicit path Ex command. :new alone creates a note in Inbox and focuses the title; :new inbox/Work/idea.md creates at that path.
:e[dit] <path>
Open or create by path Ex command. Resolves a vault-relative path and creates the note (and any missing parent folders) if it does not exist.
Space t
New note from template Also :template / :tmpl, Cmd+Shift+T, command palette 'New Note from Template…', or a folder's 'New from template'. Opens the template picker; :template <name> skips the picker and uses the best match.

Note operations

Every operation works from the command palette and most from the right-click / 'm'-key context menu. Multi-select in the sidebar applies compatible operations to the whole group.

Rename Note…
Change a note's title Command palette or context menu. Prompts with the current title; rejects / and \. Changes only the filename, not the folder.
Cmd+M
Move to another folder Also :move / :mv (with or without a target) and command palette 'Move Note to Folder…'. Interactive picker with folder-path autocomplete; Tab browses folders, Enter confirms. :mv archive/Reference moves directly.
Duplicate
Copy a note in place Command palette or context menu. Copies content and metadata into the same folder and appends ' (copy)' to the title. Available in Inbox, Archive, Quick Notes, and search results.
Archive / Unarchive
Toggle a note in or out of Archive Cmd+Shift+A to archive; 'u' in the Archive view to unarchive. Also via command palette and context menu.
Trash / Restore
Soft-delete or recover 'd' in list views to trash; 'r' in the Trash view to restore. Confirmation on trash; restore returns the note to Inbox.
Delete permanently
Remove from disk Only in the Trash view ('d' or 'x'). Confirmation required; cannot be undone.
Copy Note as Wikilink
Copy [[Title]] Command palette or context menu. Puts a resolvable wikilink on the clipboard, ready to paste into another note.
Copy Note Path
Copy the vault-relative path Command palette or context menu. Copies a POSIX path like inbox/folder/note.md.
Copy Note Absolute / Server Path
Copy the full path Command palette. On desktop this is the filesystem path; on a remote workspace the label switches to the server path.

Two related folder-path commands round this out: 'Copy Current Folder Path' (vault-relative, like inbox/Work) and 'Copy Current Folder Absolute Path' / '…Server Path' for the full path. On desktop, 'Reveal Note in File Manager' (context menu 'Reveal in Finder') jumps to the note's location in Finder or File Explorer.

Sorting, grouping, and filtering the note list

Sort the note list from the sort icon (gear) in the note-list header, from Settings, or from the command palette. Options are Name (A→Z and Z→A), Updated date (newest or oldest first, the default is newest first), Created date (newest or oldest first), and Manual. Choose Manual to disable automatic sorting and drag notes up and down to set a custom order; the order persists per folder. Your sort choice persists per view.

Toggle 'Group by kind' (command palette 'Group Notes by Kind' / 'Ungroup Notes by Kind') to list folders and assets in their own sections separate from notes, instead of mixing them in a flat list.

Filter the current list by pressing '/' to focus the filter box (or use the filter input in the folder view). Matching is a case-insensitive substring across title, path, and the first-line excerpt, with instant results as you type. An icon indicates when a filter is active; press Esc to clear it. Filtering is available in every list view, including Inbox, Archive, Quick Notes, Tags, and Tasks. The Tasks, Tags, and Trash views also accept '/' to focus their local filter.

Folders

Create as many folders as you like under your primary notes area and Archive. Folder commands live in the sidebar context menu and Settings → Folders.

Create a folder

Right-click a folder in the sidebar, or use Settings → Folders. Prompts for a name; nested paths like Inbox/Work/Projects create the full hierarchy at once.

Create

Rename a folder

Sidebar context menu 'Rename…' or Settings → Folders. Updates every contained note's path, preserves subfolder structure and folder-icon assignments, and rejects invalid characters.

Rename

Delete a folder

Sidebar context menu 'Delete…' or Settings → Folders. The dialog lets you cancel, move contents to the parent, or delete the folder and everything in it. Moving preserves access; deletion is permanent.

Delete

Folder icons (emoji)

Right-click a folder and choose 'Set icon' to open the emoji picker. The icon shows in the sidebar next to the folder name and is saved in vault settings. Clear it to reset to the default.

Icons

Collapse / expand

Click the chevron beside a folder, or use Left/Right arrows when the sidebar is focused. Right-click a section header or use the command palette to 'Collapse all folders' or 'Expand all folders'. Collapsed state persists per folder.

Collapse

Auto-reveal active note

Toggle 'Auto-Reveal Active Note' (command palette or sidebar settings) so opening a note expands its ancestor folders and scrolls it into view in the sidebar.

Auto-reveal

Reorganizing with multi-select and drag-and-drop

  • Select one item with a click, a range with Shift+click, and toggle individual items with Cmd+click (macOS) or Ctrl+click (Windows/Linux). The sidebar shows the count of selected items.
  • With a selection made, right-click or press 'm' to run a batch operation: open in tabs, move, archive/unarchive, trash, restore, duplicate, copy paths, or delete folders together.
  • Drag a note or folder within the sidebar to move it; drops snap to folder targets and show a visual drop zone. Dragging a selected item moves the whole group.
  • Dragging toward the sidebar edges auto-scrolls to reveal off-screen targets, and the scroll position is preserved after the drop.

Importing Markdown and the assets model

Bring existing Markdown into the vault by dragging .md or .markdown files onto the window. On desktop the file opens in place (in an external file window) or is imported as a copy; on web its contents are read and a new note is created. The filename becomes the title, and frontmatter and content are preserved. Programmatic import is available through window.zen.importNote().

Attachments and assets follow the file-based model described above: drop or paste images and PDFs to embed them, link documents for download or open, and manage everything from the Files/Assets views. PDFs embed with a viewer (zoom and page navigation) and can be pinned into the reference pane. New referenced files default to the vault root.

Opening notes and the vault in separate windows (desktop)

Open in Floating Window
Detach a note into its own window Right-click a note in the sidebar, list, or tab, or use command palette 'Open in Floating Window'. Each window is independent with its own edit/preview state and supports Vim mode.
Open Local Vault in New Window…
Open a whole vault in a new window Command palette. Creates a separate app window for the selected vault.
External file app
Edit Markdown outside the vault Triggered by dragging an OS file onto the window or the ?external=<path> URL parameter. Mirrors floating-window editing with save persistence and Vim mode.
zen open <file.md>
Open a file from the terminal CLI. Brings the ZenNotes window to front and loads the file, whether it lives in the vault or anywhere on disk.

Doing the same from the command line

Every lifecycle operation has a zen CLI equivalent for scripting and automation: zen list (filter with --folder or --tag), zen create / zen capture, zen rename, zen move (--folder inbox|quick|archive|trash, optional --subpath), zen duplicate, zen archive / zen unarchive, zen trash / zen restore, and zen delete --yes for permanent removal. Folders use zen folder list|create|rename|delete, and tags use zen tag list and zen tag find. Add --json to most commands for machine-readable output. Install the CLI from Settings → CLI.

Templates

Templates turn a repeated note shape into one keystroke. Use a built-in or author your own, fill in variables like the date and week automatically, and land the cursor exactly where you want to start writing.

Create a note from a template

Open the picker, choose a template, pick a destination folder, and name the note. ZenNotes substitutes variables and places your cursor.

Space t
Open the template picker The leader binding in Vim mode. Pick a template, then choose where to create the note.
:template
Ex command (alias :tmpl) Opens the picker, or with an argument like :template ADR creates from the best match directly.
New Note from Template…
Command palette The same picker from the command palette for mouse-free or discovery-first workflows.
Right-click → New from template
Sidebar folder menu Creates straight into the folder you clicked — no destination prompt.

Built-in templates

A curated starter set for engineering and personal work. Every one is editable — fork it from Settings → Templates to make it your own.

ADR

Architecture Decision Record — context, decision, and consequences.

Engineering

RFC / Design Doc

A proposal with summary, motivation, design, and alternatives.

Engineering

Bug Report

Reproduction steps, expected vs actual, environment, and severity.

Engineering

Postmortem

Incident review with timeline, root cause, and action items.

Engineering

Meeting Notes

Dated agenda, notes, decisions, and action items.

Engineering

1:1

One-on-one: wins, blockers, growth, and follow-ups.

Engineering

Daily Note

A dated daily log with focus, schedule, tasks, and a log.

Personal

Weekly Review

Review last week and plan the next, titled YYYY-Www.

Personal

Reading Notes

Notes on a book or article: key ideas, quotes, takeaways.

Personal

Journal

A free-form, first-person dated entry.

Personal

Project Kickoff

Goals, scope, milestones, stakeholders, and risks.

Personal

To-do

A simple checklist scaffold.

Personal

Template variables

Tokens are replaced when the note is created. Unknown tokens are left untouched, so your own braces survive.

{{title}}
The note title you choose when creating it.
{{date}}
Today’s date in ISO form, e.g. 2026-05-29.
{{date:FORMAT}}
A custom date, e.g. {{date:dddd, MMMM D, YYYY}} or {{date:YYYY-MM-DD}}.
{{time}}
Current time as HH:mm.
{{week}}
ISO 8601 week number, zero-padded.
{{cursor}}
Removed from the output; marks where the caret lands after creation.

Make and manage your own

Custom templates live as plain Markdown files in .zennotes/templates/, so they stay portable and versionable like the rest of your vault.

  • Open Settings → Templates and press “New template”. A template is frontmatter (name, description, category, titleTemplate, targetFolder, targetSubpath) plus a Markdown body.
  • Use titleTemplate to auto-name dated notes, e.g. {{date:YYYY-MM-DD}}, and targetFolder / targetSubpath to set a default destination.
  • Edit a built-in to fork an editable copy that shadows the original everywhere; Reset restores the built-in.
  • From any note, run “Save Current Note as Template…” to capture it as a new custom template.
  • Assign a template to daily and weekly notes under Settings → Vault so dated notes start pre-filled.
  • Built-in templates work everywhere; custom templates require a local vault.

Tasks

Tasks stay plain Markdown, but the app gives them list, calendar, and Kanban workflows on top.

Markdown task syntax

ZenNotes reads unchecked and checked Markdown task list items outside fenced code blocks.

- [ ]
Open task Example: - [ ] Ship the onboarding checklist due:2026-04-30 !high #docs
- [x]
Done task Checked tasks appear in Done and keep their source Markdown intact.

List

Compact vault-wide task scanning for every Markdown checkbox outside fenced code blocks. Open a task to jump to the exact source line.

Calendar

Due-date review for scheduled tasks. Waiting and done tasks stay out of normal due-date buckets so the calendar stays focused on active work.

Kanban

Drag tasks between status or priority columns. The board updates immediately, then ZenNotes writes the source Markdown task line asynchronously.

Inline task metadata

Metadata tokens are stripped from the display title but stay in the Markdown line on disk.

due:YYYY-MM-DD
Due date in ISO format.
!high / !med / !low
Priority. Short aliases like !h, !m, and !l are also recognized.
@waiting
Waiting or blocked task. Waiting overrides due-date grouping until the marker is removed.
#tag
Task tag, shown alongside the task and shared with the note tag model.

Kanban status columns

Status columns are derived from checkbox state, due date, and @waiting. Dragging between columns rewrites only the affected task line.

Today
Unchecked tasks with no due date, overdue tasks, and tasks due today. Unchecks the task, removes @waiting, and sets due: to today.
Upcoming
Unchecked tasks with a future due date. Unchecks the task, removes @waiting, and preserves a future due date or sets tomorrow.
Waiting
Unchecked tasks with @waiting. Unchecks the task and adds @waiting.
Done
Checked tasks. Checks the task.

Kanban column titles

Column titles are editable display labels. Click the title or pencil icon, rename it, and press Enter or click away to save. Clear the field to reset the default label.

  • Renaming a column does not change task grouping or task metadata.
  • Status columns can be labelled Backlog, Todo, In Progress, Done, or any workflow labels you prefer.
  • While dragging, the insertion line marks the exact spot where the card will land.
  • Same-column reordering changes the local Kanban order only; it does not rewrite task metadata.

Remote and self-hosted

The practical model for Docker, browser access, desktop-to-server use, and the security posture you get out of the box.

Browser login uses the token once, then a session cookie

In self-hosted web mode, ZenNotes asks for the server auth token once, then the server issues an HttpOnly, SameSite=Strict session cookie. Refresh should keep working without leaving the token in the URL or browser local storage.

Docker serves a host-mounted vault

Your notes stay in a normal host folder. Docker mounts that folder into the server container; ZenNotes is serving the host files, not copying them into container-only storage.

Desktop can use the same remote vault

The desktop app can connect to the same ZenNotes server the browser uses. Saved Remote Workspaces let you keep multiple servers or vaults ready, change the active remote vault later, and switch back to a local vault cleanly.

Browse access is intentionally scoped

The server-side vault picker only sees allowed mounted roots. If a folder is not mounted or not inside the configured browse roots, the browser picker and remote desktop flow will not be able to select it.

Vault paths refuse symlink escapes

Note read, write, rename, delete, asset upload, and folder operations all walk each existing path component and resolve symlinks. Any link that points outside the canonical vault root is rejected before any file is touched, so a planted symlink inside the vault cannot be used to read or overwrite host files.

TLS is operator-declared

The Go server does not terminate TLS itself. Set ZENNOTES_BEHIND_TLS=1 once a reverse proxy is in front and the server marks cookies Secure and emits HSTS. ZENNOTES_TRUSTED_PROXIES then controls which TCP peers may set X-Forwarded-Proto and X-Forwarded-For so the flags cannot be flipped by an arbitrary client.

Rotate the auth token without restarts

POST /api/session/rotate-token replaces the bootstrap token, persists it with mode 0600, and invalidates every existing session. Requires the current token in the body even when authenticated, so a stolen session alone cannot rotate the secret.

Tight defaults for modes and size caps

New notes default to 0600 and directories to 0700 on Unix hosts; tune with ZENNOTES_VAULT_FILE_MODE / ZENNOTES_VAULT_DIR_MODE if needed. Per-request body limits cap note writes (10 MiB) and asset uploads (50 MiB) so a single bad request cannot fill the disk.

Login backoff makes weak tokens cost time

Repeated failed logins from the same client incur exponential backoff (1, 2, 4, 8, 16, 32, 60 seconds). Combined with the 256-bit bootstrap-token entropy, brute-force is not a realistic threat — but the backoff still protects users who set a short manual token.

At-rest encryption is the operator's call

Notes are written as plain Markdown so any tool can back them up or read them. For VPS-snapshot or stolen-disk threats, layer encrypted backups (Borg, restic) and an encrypted volume (LUKS, ZFS native, APFS encrypted) underneath the vault path. The repo docs include a cookbook for each.

Remote mode is visibly different

When desktop is using a server-backed vault, ZenNotes shows a Remote badge in the sidebar and title bar, labels copied paths as server paths, and keeps local-only file-manager actions separate from remote workspaces.

The browser and desktop share the same product core

Editor behavior, Markdown rendering, slash commands, picker behavior, and most settings come from the same shared app core. The main differences are runtime-specific things like native file dialogs, desktop save-to-PDF, and browser print-to-PDF.

Keyboard shortcuts

Every binding is remappable in Settings. Mod is on macOS, Ctrl on Windows and Linux.

Global shortcuts

These work across the main app shell.

Mod+P
Search notes Open the note search palette.
Mod+F
Search notes (non-Vim) Open the note search palette directly when Vim mode is off.
Shift+Mod+P
Open commands Open the command palette.
Shift+Mod+N
New Quick Note Create a quick capture note in the main window and focus its title.
Mod+,
Open Settings Appearance, editor behavior, fonts, vault controls.
Mod+1
Toggle sidebar Hide or show the left sidebar.
Mod+2
Toggle connections Toggle the connections panel for the active editor pane.
Mod+3
Toggle outline panel Toggle the heading-outline panel for the active editor pane.
Mod+4 / Mod+5 / Mod+6
Edit / Split / Preview mode Switch the active note between the raw editor, side-by-side split, and rendered preview.
Shift+Mod+Space
Open quick capture window Open the floating, always-on-top capture window. Also bound system-wide (default Cmd/Ctrl+Shift+Space) so it works over any app; change it under Settings → Editor.
Shift+Mod+E
Export Note as PDF Desktop saves a PDF directly; browser opens the print-friendly export view.
Mod+.
Toggle Zen mode Hide or restore the app chrome.
Mod+W
Close active tab Close the current note or virtual tab.
Alt+Z
Toggle word wrap Switch between wrapped lines and horizontal scrolling.
Mod+= / Mod+- / Mod+0
Zoom in / out / reset Scale the whole app UI; the zoom level persists across sessions.
Esc
Dismiss overlay Close note search or the command palette.

Quick capture window

These apply inside the floating capture window, opened with the quick capture hotkey.

Mod+Enter
Save and hide Save the note into Quick Notes and hide the window. A fresh capture clears for next time; an opened note is left as you left it.
Mod+N
New note Save the current note, then open a fresh blank capture without hiding the window.
Mod+P
Open a note Search the vault and load an existing note into the window to edit it in place.
Shift+Mod+P
Command palette Run a capture command: save, save without hiding, start a new note, or open another note.
Esc
Dismiss Close an open overlay; otherwise save and hide the window.

Pane and panel motion

The primary keyboard-first movement patterns. The Vim-style ones assume Vim mode is on.

Ctrl-w h/j/k/l
Move focus Move between sidebar, note list, editor, connections, or adjacent panes.
Ctrl-w v
Split right Clone the current tab into a pane to the right.
Ctrl-w s
Split down Clone the current tab into a pane below.
Space o
Open buffers Show a searchable list of every open buffer across every pane.
Space f
Search notes Open the vault-wide note search palette.
Space s t
Search vault text Fuzzy-search matching text lines across notes.
Space e
Toggle left sidebar Show or hide the folder/tag sidebar.
Space p
Note outline Jump to any heading in the active note.
Space (pause)
Show leader hints Open a which-key style guide if hints are enabled.
Mod+3
Toggle outline panel Show or hide the persistent outline in the active pane.
zc / zo
Fold / unfold heading Collapse or expand the section below the heading at the cursor.
zM / zR
Fold / unfold all Collapse or expand every heading section in the note.
Ctrl-o
Go back Jump to the previous note location in history.
Ctrl-i
Go forward Jump forward in note history.
f
Hint mode Show jump labels for clickable targets when not in insert mode.

Palettes and pickers

These apply once a palette, search overlay, or picker already has focus.

ArrowDown / Ctrl+N
Move to the next result Works in the command palette, note search, vault text search, outline, and buffer switcher.
ArrowUp / Ctrl+P
Move to the previous result Matches the same picker navigation model as the next-item binding.
Enter
Run or open the selected result Open the selected note, heading, buffer, command, or search hit.
Esc
Close the picker Dismiss the overlay and return focus to the previous surface.
Type to filter
Narrow the current result set Each picker filters its own data live as you type.

Sidebar and list navigation

These bindings work when the sidebar or note list owns focus in Vim mode.

j / k
Move selection Move down or up one visible item.
g g / G
Jump to top or bottom Fast travel to the first or last visible row.
Enter / l
Open item Open the selected note, folder, tag, or built-in row.
h
Collapse or move left Collapse the current folder or move focus back toward the editor.
o
Toggle folder Expand or collapse the selected folder in the sidebar.
/
Search notes Open note search from keyboard navigation mode.
m
Open context menu Open the right-click menu for the selected row.
Esc
Return to editor Drop back into the main editor focus path.

Editor writing aids

Inline completions that appear while you type in the Markdown editor.

/
Open slash commands Insert menu for headings, lists, to-dos, callouts, code blocks, dividers, tables, math, links, images, new page.
Type after /
Filter the insert menu Narrow the slash command list by name, then confirm to insert.
@
Open date shortcuts Inline suggestions for Today, Yesterday, Tomorrow.
Type after @
Filter date suggestions Match by weekday, month, day number, or ISO date fragment.

Preview and connections

These keys apply when reading preview content or the connections panel.

j / k
Scroll preview Move through rendered preview content line-by-line.
Ctrl-d / Ctrl-u
Half-page scroll Move preview content by half a viewport.
g g / G
Jump to top or bottom Go to the start or end of the preview or connections list.
m / Shift+F10
Open active tab menu Close, Split, Pin, Pin as Reference, Floating Window, Reveal.
/
Search notes Open note search without leaving keyboard navigation.
p
Peek backlink In connections, open a hover preview for the selected note.
h / Esc
Back out Return from hover preview to connections, or from connections to the editor.

Tasks, tags, and trash

These virtual views each run their own keyboard loop in the main pane.

j / k
Move row cursor Step through task rows, tagged notes, or trashed notes.
g g / G
Jump to top or bottom Move to the first or last visible result.
Enter / o
Open current result Open the selected source, tagged note, or trashed note.
Space / x
Toggle task Tasks view only: check or uncheck the selected task.
h / l
Move Kanban column focus Kanban view only: move left or right between columns.
j / k
Move Kanban card focus Kanban view only: move through cards in the focused column.
r
Restore trashed note Trash view only.
x / d
Delete forever Trash view only. Asks for confirmation.
/
Filter the view Focus the local filter box.
:
Open local ex prompt Run the view-specific command line inside Tasks or Tags.
Esc
Close or clear Clear the filter first, then close the view on a second press.

Vim ex commands

Run any of these from the : prompt. Tab on the ex line completes commands and supported arguments.

:w
Save the active note Flush the current buffer to disk immediately.
:q
Close the current tab or virtual view Closes the active note or virtual tab (Tasks, Tags, Help, Trash).
:wq
Save and close Writes the current note, then closes it.
:format
Format Markdown Runs Markdown formatting on the active note.
:tasks
Open Tasks Open the vault-wide Tasks virtual tab.
:template / :tmpl
New note from a template Open the template picker. With an argument like :template ADR, create from the best match directly.
:daily
Open today’s daily note Open or create today’s daily note (requires daily notes enabled). Uses the assigned daily template.
:weekly
Open this week’s note Open or create this week’s note titled YYYY-Www (requires weekly notes enabled). Uses the assigned weekly template.
:tag foo bar
Open Tags with a selection Open the Tags view and replace the tag set with the given tags.
:trash
Open Trash Open the built-in Trash recovery view in the active pane.
:split / :vsplit
Split the current tab Clone the active tab down or right.
:edit path / :e path
Open or create by vault path Open a note by vault-relative path; create if needed.
:new [path]
Create a new note No path → new inbox note. With a path → opens or creates exactly there.
:move [folder] / :mv
Move the active note No argument opens the move prompt. With a path like archive/Reference, moves directly.
:bn / :bp
Cycle tabs Move to the next or previous tab.
:buffers / :ls
Open the buffer switcher List the current pane’s open buffers in a searchable overlay.
:bd / :bc
Close the active tab Buffer-delete aliases for the current tab.
:only
Close sibling tabs Keep only the active tab in the current pane.
:qa / :quitall / :xa / :wa
Close every tab everywhere Closes all tabs across all panes.
:help / :h
Open this manual Bring up the built-in Help tab.
:demo_generate / :demo_remove
Seed or remove the demo tour Install or remove onboarding notes under inbox/demo.
:cmd query / :commands
Run or browse palette commands Fuzzy-run the best matching command, or open the palette.
:tab_menu / :tab_close_others / :tab_close_right
Tab-menu actions from the ex line Every palette tab action is also on the : line.
gd
Follow the link under the cursor Open wikilinks, external links, create missing notes, or pin PDFs.
<Tab> on the ex line
Complete ex commands Cycle through registered commands with a wildmenu popup; complete args like :view edit|split|preview.
<Space> l f
Leader-format Format the active note from normal mode.
<Space> (pause)
Show leader hints Which-key overlay for the next available leader actions.
<Space> o
Leader buffer switcher Open every open buffer across every pane.
<Space> f
Leader note search Open the vault-wide note search palette.
<Space> e
Leader toggle sidebar Show or hide the left sidebar.
<Space> p
Leader note outline Searchable list of every heading in the active note.
<Space> t
Leader new from template Open the template picker to create a note from a built-in or custom template.
<Space> d
Leader today’s daily note Open or create today’s daily note when daily notes are enabled.
<Space> w
Leader this week’s note Open or create this week’s note when weekly notes are enabled.
:outline
Note outline palette Ex-line path to the searchable note outline.
:view edit|split|preview
Switch the active note layout Editor-only, side-by-side split, or preview-only.
:zen [toggle|on|off]
Toggle Zen mode :zen toggles; :zen on / off force a state.
:editmode / :splitmode / :previewmode
Direct mode aliases Single-command aliases for switching the active note layout.
:fold / :unfold
Toggle the heading at the cursor Collapse or expand the section beneath the current heading.
:foldall / :unfoldall
Fold every heading Collapse or expand every heading section at once.

zen CLI

zen is a small command-line tool bundled with the desktop app. It talks to your local vault directly, so any command you can do from the app you can also script from a shell. Pass --json on any command for machine-readable output.

Install

The CLI is shipped inside the desktop bundle. Open Settings → CLI and click Install — ZenNotes drops a zen shim into the first writable directory it finds on your $PATH (~/.local/bin, ~/bin, or /opt/homebrew/bin). The macOS admin prompt is only used when nothing user-writable is on $PATH.

  • The Install / Uninstall / Open CLI Settings actions are also in the command palette under the CLI category.
  • ZENNOTES_VAULT overrides the resolved vault root, useful when scripting against a non-default vault.
  • --no-color and the NO_COLOR environment variable disable ANSI color in the help output.
  • Run zen --help for the live command list, or zen --version for the CLI version.

Notes

zen list
List notes, most recent first --folder <f> --tag <t> --limit <n> --json
zen read <path>
Print a note body to stdout --meta --json
zen create
Create a new note. Body from --body or stdin --title <t> --folder inbox|quick|archive --subpath <p> --tag <t> --body "..."|-
zen write <path>
Replace a note body. Destructive — prefer append --body "..."|-
zen append <path>
Append text to the end of a note --body "..."|-
zen prepend <path>
Insert text at the top, after frontmatter --body "..."|-
zen rename <path>
Rename a note (filename only) --to <new title>
zen move <path>
Move a note to a different folder --folder <f> --subpath <p>
zen archive <path>
Move a note into archive/
zen unarchive <path>
Move it back from archive/
zen trash <path>
Soft-delete; reversible via restore
zen restore <path>
Restore a trashed note to inbox
zen delete <path>
Permanent delete --yes
zen duplicate <path>
Copy a note next to itself

Search

zen search <query>
Full-text search across live notes --limit <n> --json
zen search-title <q>
Match notes by title (substring) --json
zen backlinks <path>
Notes linking to this one via [[wikilink]] --json

Folders, tags, tasks

zen folder list
List every subfolder in the vault --json
zen folder create <p>
Create a subfolder, e.g. inbox/Work
zen folder rename <p>
Rename a subfolder in place --to <newPath>
zen folder delete <p>
Delete a subfolder and everything in it --yes
zen tag list
Every #tag with its note count --json
zen tag find <tag>
Notes carrying this #tag --limit <n> --json
zen task list
Open checkbox tasks across all notes --unchecked --all --tag <t> --json
zen task toggle <id>
Flip a task checkbox by stable id

Vault, capture, MCP

zen vault info
Vault path + per-folder counts --json
zen capture "..."
Quick add. Pipes stdin if no positional --folder <f> --tag <t> --title <t> --json
zen mcp
Start the MCP stdio server (Claude / Codex)

Examples

Common one-liners. Pipe stdin into capture, append, prepend, create, or write with --body -.

$ zen capture "Meeting takeaways" --tag work
$ pbpaste | zen append inbox/Daily.md --body -
$ zen search "deadline" --json | jq '.[].path'
$ zen list --tag idea --limit 5
$ zen task list --unchecked --tag work

MCP via the CLI

zen mcp launches the same MCP stdio server the app uses. New Claude Code, Claude Desktop, and Codex installs prefer this entry whenever the CLI is present, so the server upgrades alongside the app. Existing mcp.js integrations keep working unchanged.

  • MCP vault_info reports primaryNotesLocation and an inboxAbsolutePath so assistants pick the right folder for new notes.
  • Tool descriptions explain that the returned path is canonical — never prefix inbox/ yourself when the vault is in root mode.

MCP and AI assistants

ZenNotes ships a local Model Context Protocol (MCP) server so AI assistants — Claude Code, Claude Desktop, and Codex — can read and write your vault directly. Manage it in Settings → MCP (desktop).

The MCP server exposes your vault to compatible assistants over the Model Context Protocol. Because it operates on the same plain Markdown files as the app, anything an assistant creates or edits shows up immediately in ZenNotes. The server runs locally via the bundled zen CLI (zen mcp).

Open Settings → MCP to see the server status (Ready, Not built, or Checking), reveal the exact launch command, connect clients, and edit the system prompt sent to assistants.

Connect an assistant

One-click install writes a managed ZenNotes entry into each client config. Uninstall removes only that entry.

Claude Code
Install the ZenNotes MCP server for Claude Code Settings → MCP → Integrations. Writes a managed entry to the Claude Code MCP config.
Claude Desktop
Install for Claude Desktop Settings → MCP → Integrations. Updates the Claude Desktop config JSON.
Codex
Install for Codex Settings → MCP → Integrations. Updates the Codex TOML config.
Instructions
Edit the system prompt assistants receive Settings → MCP → Instructions. Default or custom; saved to .zennotes/mcp-instructions.md.
zen mcp
Start the MCP stdio server manually Run zen mcp in a terminal to point any MCP client at the vault.

What an assistant can do

The MCP server exposes the full vault toolset — read, search, create, edit, organize, and manage tasks.

vault_info
Vault path, primary notes location, and per-folder counts Reports primaryNotesLocation and the inbox absolute path.
list_*
list_notes, list_folders, list_assets, list_tags, list_tasks Enumerate vault contents.
read_note
Read a note body and metadata By vault-relative path.
create_note / write_note
Create a note or replace its body write_note is destructive; prefer append/prepend.
append / prepend / insert_at_line
Add content without rewriting the whole note Targeted edits.
replace_in_note
Find-and-replace within a note String replacement.
rename / move / duplicate
Reorganize notes Filename, folder, or copy.
archive / trash / restore / delete
Lifecycle operations trash is reversible; delete is permanent; empty_trash clears it.
folder create / rename / delete
Manage folders Nested paths supported.
search_text / search_by_title / search_by_tag
Find notes Full-text, title, or tag.
backlinks
Notes linking to a given note Via [[wikilinks]].
list_tasks / toggle_task
Read and check off tasks By stable task id.

Raycast extension

On macOS, ZenNotes can install a Raycast extension so you can search and act on notes without opening the app. Install it from Settings → CLI → Raycast.

Install

ZenNotes copies the bundled extension into app data, installs its dependencies, builds it, and imports it into Raycast.

  • Requirements: the zen CLI installed, Node 22.14+ and npm 7+, and Raycast.
  • Open Settings → CLI → Raycast on macOS and press Install (or Update / Reinstall after upgrading the app).
  • The extension talks to your vault through the zen CLI, so it always reflects the live files.

Search Notes command

Raycast’s “Search Notes” command lists notes and offers actions on the selected note.

Filter
Filter results by folder or tag Narrow the note list inside Raycast.
Open
Open the note in ZenNotes Via the zennotes:// URL scheme.
Open in Window
Open the note in a floating window Desktop floating-window view.
Archive / Unarchive
Move the note to or from Archive Without leaving Raycast.
Trash
Move the note to Trash Recoverable from the Trash view.
Reveal
Reveal the note in Finder Shows the underlying .md file.
Copy
Copy the note path or a [[wikilink]] For pasting elsewhere.

Inline comments

Highlight a passage in any note and leave a comment anchored to the text. 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 .md files don't grow comment clutter.

Settings reference

Every setting in ZenNotes, grouped by panel.

Appearance

Theme, mode, and variant
Pick a theme family, light or dark mode, and the active flavor where supported.
Dark sidebar
Tint the sidebar slightly darker than the canvas so chrome reads as a distinct surface.
Sidebar arrows
Show or hide disclosure arrows for collapsible sidebar folders and sections. When hidden, folders and files still stay aligned.

Editor behavior

Vim mode
Turn CodeMirror Vim bindings on or off for the editor and reference pane.
Leader key hints
Show a which-key style guide after pressing Leader. Available when Vim mode is enabled.
Leader hint behavior
Choose between timed auto-hide or a sticky overlay that stays open until dismissed.
Leader hint duration
When timed, control how long the overlay stays visible and how long the pending sequence remains active.
Vault text search backend
Auto, built-in, ripgrep, or fzf. Auto prefers system tools when installed. Settings shows the resolved runtime backend.
Live preview
Hide Markdown syntax on lines you are not actively editing.
Note tabs and wrap tabs
Enable tab-based editing, and wrap the tab strip when it overflows.
Word wrap
Wrap long lines to editor width or let them scroll horizontally (also Alt+Z).
Smooth preview scroll
Animate Ctrl+D / Ctrl+U half-page scrolling in the preview pane.
PDFs in edit mode
Choose between compact PDF cards or full inline PDF embeds while editing.
Date-titled Quick Notes
Name quick notes by date instead of timestamp-based titles.
Quick Note prefix
Choose the prefix used for new quick note titles, or leave it blank for a bare timestamp/date.
Quick capture hotkey
Record, reset, or disable the system-wide hotkey (default Cmd/Ctrl+Shift+Space) that opens the floating quick-capture window.

Typography and layout

Interface, text, and monospace fonts
Choose different fonts for chrome, reading text, and code blocks.
Font size and line height
Tune reading density in the editor and preview.
Reading and editor width
Cap long lines so wide windows stay readable.
Content alignment
Center note content in its column or left-align to the pane edge.
Line numbers
Off, absolute, or relative gutter numbering.

Keymaps

Shortcut overrides
Remap global shortcuts, Vim bindings, panel navigation, and view actions from one place.
Recorded sequences
Capture single shortcuts or multi-step sequences like Leader flows, pane prefixes, g g, g d, or fold motions — no raw config editing.
Context-menu bindings
The same keymap table controls the context-menu action used across the sidebar, note list, and active-tab menu.
Reset controls
Clear an individual override or reset the entire keymap table to shipped defaults.

Vault

Vault location
Reveal or change the root folder ZenNotes treats as the active vault.
Primary notes location
Choose whether Inbox stays the main notes area or whether the vault root itself becomes the primary notes surface.
Daily notes
Enable daily notes, choose the directory, and assign a template so each day’s note starts pre-filled. Open today’s note with Space d, :daily, or the command palette.
Weekly notes
Enable weekly notes with a YYYY-Www title, choose a directory, and assign a template. Open this week’s note with Space w, :weekly, or the command palette.
Folder icons
Right-click a folder in the sidebar and choose a custom icon that follows the current theme colors.
Saved Remote Workspaces
Save multiple remote servers or vaults, reconnect from Settings or the command palette, and edit or remove them later.
Remote workspace controls
When connected remotely, Settings exposes Change Remote Vault…, Return to Local Vault, and Open Local Vault….

Templates

Template library
Browse every template — built-in and custom — in one place.
Create a custom template
Author a new template as Markdown with optional frontmatter (name, description, category, titleTemplate, targetFolder, targetSubpath) and variables. Saved as a .md file in .zennotes/templates/.
Edit or reset built-ins
Press Edit on a built-in to fork an editable copy that shadows the original; Reset removes the copy and restores the built-in. Custom templates can be edited or deleted directly.
Save current note as template
The “Save Current Note as Template…” command captures the active note as a new custom template.

MCP

MCP server status
Shows whether the local MCP server is Ready, Not built, or Checking, and reveals the exact launch command.
Client integrations
One-click install/uninstall a managed ZenNotes entry for Claude Code, Claude Desktop, and Codex.
Instructions editor
Edit the system prompt sent to assistants; default or custom, saved to .zennotes/mcp-instructions.md.

CLI

Install zen
Install the bundled `zen` command into a user-writable directory on $PATH (~/.local/bin, ~/bin, or /opt/homebrew/bin preferred). Falls back to the macOS admin prompt only when no user-writable target is on $PATH.
Uninstall zen
Remove the installed shim. Never touches an unmanaged binary that happens to share the same path.
Reinstall / update
Reinstalls the shim against the current desktop build, useful after upgrading the app.
Status and path
Shows whether `zen` is installed, where it lives, and which app build it points to.

About

App identity
App icon, current version, and a short description of ZenNotes.
Lumary Labs
About section links to lumarylabs.com.

Ready to try it?