Skip to content

ZenNotes

v2.3.0 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

Published 1mo Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

electron local-first markdown mcp notes vim

Summary

AI summary

Renaming a note automatically updates all its wikilinks across the vault.

Full changelog

ZenNotes 2.3.0 is headlined by wikilinks that follow a note when you rename it and a fully keyboard-driven database grid, plus consistent vim-style keyboard navigation across every picker and a batch of fixes from your reports.

Installers for macOS, Windows, and Linux are attached below. On Arch, yay -S zennotes-bin.

✨ Highlights

Links update when you rename a note (#111)

Rename a note and every [[wikilink]] pointing at it across the vault rewrites itself to the new name — no more dead links. It handles all the forms — [[Note]], [[Note|alias]] (your display text is kept), [[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 sharing a title never get cross-wired. It runs in the vault layer (desktop and the self-hosted server), so it applies however you rename — the editor, the MCP tools, the CLI, or the HTTP API.

Keyboard-driven databases (#110)

The CSV database grid is now fully navigable without the mouse, vim-style. Move the cell cursor with h/j/k/l, jump up to the column-header row with k to rename a field (Enter / i) or open its menu (m), press m on a cell for the row menu, and open a row's record page with o — then Ctrl+O jumps right back to the grid (whether you opened the database as a .csv file or via New Database). Ctrl+W k / j / h / l moves between the grid, the tab strip, and split panes exactly like it does from the editor. This also fixes #110: editing a column name no longer swallows h/j/k/l, so you can type url or public, and the arrow keys move the caret in edit mode. The grid reliably takes keyboard focus on open, after a Ctrl+O jump back, and after reopening the app, so motions work without clicking a row first — and a Show sidebar button now appears in the database header when the sidebar is hidden.

🐛 Fixes

  • Consistent picker navigation (#98) — every picker now moves the selection with vim-style Ctrl+J / Ctrl+K (down / up), alongside the arrow keys and Ctrl+N / Ctrl+P. This also fixes a Linux/Windows bug where Ctrl+P — which resolves to the global Search notes shortcut (Mod+P) on those platforms — closed the search palette and hijacked the [[ reference picker instead of moving up the list. Pickers now consume the navigation keys, so it works the same across the search-notes palette, the [[ reference picker, the / slash menu, date shortcuts, template variables, and the command / buffer / outline / template palettes and quick-capture.
  • Quick-capture hotkey wouldn't rebind (#120) — the Keymap settings tab listed an Open quick capture window row at ⇧⌘Space that was never wired up, so changing it there did nothing while the real system-wide hotkey kept firing — making the shortcut feel hardcoded. Removed the dead row; the quick-capture hotkey is managed by its own Record / Disable / Reset control under Settings → Editor → Quick capture.
  • Esc in the Switch Vault dialog (#119) — opening the vault switcher with <leader>v and pressing Esc used to drop you into the full command palette instead of closing. Esc now closes a directly-opened picker and only steps back to the command list when you actually drilled in from there.
  • Weekly notes on the self-hosted server (#117) — the Vault → Enable weekly notes toggle wouldn't stick on the web/Docker build: the Go server's settings model had no weeklyNotes field, so it was silently dropped on save and reverted on reload. The server now mirrors the full client settings contract (weekly notes, plus the daily-notes template that was dropped the same way).
  • Folders sync live across clients — creating or deleting a folder in one client now appears in another open client sharing the same vault — including the self-hosted web app — without a manual refresh. Empty folders previously only showed up on reload, because neither file watcher emitted directory events.
  • Tags pinned to the bottom of the sidebar — the Tags section now sits just above the Files / Help / Settings footer instead of floating directly under the note list, and still scrolls naturally when the list is long.
  • Mobile web: sidebar footer no longer hidden behind the browser (#116) — the web client's app shell now uses dynamic viewport height (100dvh, with a 100vh fallback) and viewport-fit=cover, so the Files / Help / Settings footer stays inside the visible area on iPad and Android Chrome instead of being occluded by the browser's bottom toolbar. The footer also pads for the iOS safe area. Desktop is unaffected.
  • Close the right panel (#114) — added a clear way to dismiss whichever right-hand panel (connections, outline, comments, calendar) is open: a "Close Right Panel" command in the command palette and a :closepanel (:closep) Vim ex-command. Previously you had to re-press the specific toggle that opened it.
  • Vim tab navigation (#99)gt / gT now move to the next / previous tab in the active pane, with :tabnext / :tabprevious ex-commands (shown in the : autocomplete). Both are rebindable under Settings → Keymap.
  • f find-char motions work in the editor (#107)f, df, cf, yf (and the t family after an operator) were being hijacked in normal mode because bare f triggered hint mode. Hint mode moved to <leader>h, so the whole f-family works normally now. Search notes stays on <leader>f, and vault text search now sits under a <leader>s search group — press <leader>s for a which-key list, then t (mirrors the <leader>l group). All rebindable under Settings → Keymap.
  • Hint into a note lands in the editor (#100) — using hint mode (<leader>h) to open a note from the sidebar or a tab used to leave focus on the clicked row / tab, so you had to press Esc to start typing. Hinting a note now drops you straight into the editor — like hinting Tasks already did. Folders (which just toggle), the Tasks / Tags tabs, and plain buttons keep their own focus.
  • Remove or restore the built-in templates (#112) — the shipped templates ship as code constants, so they could only be edited, not deleted. New Remove Built-in Templates / Restore Built-in Templates commands — plus a button under Settings → Templates — hide or bring back all the built-ins, with a confirmation before removing. Your custom templates (and any built-in you've edited) stay, and anything already pointing at a built-in by id (e.g. a daily-note template) keeps working.

Thanks to everyone filing issues and reporting bugs — closes #98, #99, #100, #107, #110, #111, #112, #114, #116, #117, #119, #120.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track ZenNotes

Get notified when new releases ship.

Sign up free

About ZenNotes

Keyboard-first Markdown note-taking

All releases →

Related context

Related tools

Beta — feedback welcome: [email protected]