This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryRenaming 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 andCtrl+N/Ctrl+P. This also fixes a Linux/Windows bug whereCtrl+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
⇧⌘Spacethat 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>vand pressingEscused to drop you into the full command palette instead of closing.Escnow 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
weeklyNotesfield, 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 a100vhfallback) andviewport-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/gTnow move to the next / previous tab in the active pane, with:tabnext/:tabpreviousex-commands (shown in the:autocomplete). Both are rebindable under Settings → Keymap. ffind-char motions work in the editor (#107) —f,df,cf,yf(and thetfamily after an operator) were being hijacked in normal mode because bareftriggered hint mode. Hint mode moved to<leader>h, so the wholef-family works normally now. Search notes stays on<leader>f, and vault text search now sits under a<leader>ssearch group — press<leader>sfor a which-key list, thent(mirrors the<leader>lgroup). 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 pressEscto 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
Beta — feedback welcome: [email protected]