Skip to content

ZenNotes v2.12.0

Choose a tag to compare

@github-actions github-actions released this 09 Jul 19:17

ZenNotes 2.12.0 brings custom Kanban boards for any inline task field, a two-way Vim clipboard, one-move tag-filter clearing, and a batch of keyboard and drawing fixes.

Installers for macOS, Windows, and Linux (x64 + arm64) are attached below once the build finishes. On macOS, brew install --cask zennotes/tap/zennotes; on Arch, yay -S zennotes-bin.

✨ Improvements

  • Custom Kanban statuses, and a board for any task field: the Tasks Kanban can now group by a workflow you define, not just the built-in due-date buckets. Tag tasks with an inline @status:<id> token (like - [ ] Ship it @status:review) and the new "Custom status" board sorts them into your columns. Set the columns and their order in Settings → Tasks (no config editing) or in config.toml under [view] as kanban_statuses = ["backlog", "in_progress", "review", "done"]. It generalizes to any inline field: use @sprint:24, @area:backend, or any @key:value, and each key auto-appears as its own board with a column per value, no setup needed. Everything is keyboard-first: g cycles the group-by, Shift+H / Shift+L move the focused card between columns (rewriting the token), and drag works too. A note's status: frontmatter sets a default for its tasks. (#354, thanks @dwarjie)
  • Clear selected tag filters in one move: in the Tags view, selected tags accumulate as you click, and clearing them used to mean picking off each chip's ×. Now there is a "Clear all" button in the header, the c key (and :clear) wipes the whole selection at once, and right-clicking a selected chip offers Deselect, Unselect others (keep just that one), and Clear all tags — the same actions are on the sidebar tag menu too. The tag strip was tidied up along the way, with the selected chips and the tag picker on their own rows. (#356, thanks @MrClyfar)
  • Vim p pastes from the system clipboard: the Vim clipboard setting used to be one-way, y / d / c / x copied out to the system clipboard, but p only ever pasted Vim's own register. It is now two-way and renamed "Sync clipboard with Vim registers" (Settings → Vim): with it on, p and P paste whatever is on the system clipboard, so text copied in another app drops straight into a note in normal or visual mode. Counts (3p), linewise pastes, and visual-mode replace behave like normal Vim; insert mode, Vim off, and Ctrl/Cmd chords are untouched. (#357, thanks @philippswoboda)

🐛 Fixes

  • CircuiTikZ diagrams render on desktop again: a tikz block using CircuiTikZ (for example \begin{circuitikz} with \ctikzset) used to load forever or crash, most visibly on Linux. The TikZ WebAssembly engine has a fixed memory pool, and ZenNotes was always pre-loading the heavy pgfplots package for every diagram, leaving no room for large packages like circuitikz. pgfplots now loads only when a block actually uses it (pgfplots / axis / plot), and circuitikz is auto-detected and loaded, so circuit schematics render out of the box. Plots are unaffected. (#349, thanks @kuyacarlo)
  • Backspace inside a highlight deletes one character, not the whole run: with the cursor inside ==highlighted== text, pressing Backspace used to delete every character back to the start of the highlight (or wipe the whole phrase from the end), leaving the markers behind. It now deletes a single character like anywhere else. The inner text of a highlight was mistakenly treated as one indivisible unit by the editor; only the hidden == markers are now, so the text stays fully editable. Works in Vim and non-Vim mode. (#351, thanks @uNyanda)
  • Shortcuts and Vim keys keep working after the app sits idle: after roughly ten minutes untouched, usually once the display had slept, pressing Cmd/Ctrl+. (Zen mode) would type a literal . into the note instead of toggling, and Vim keys stopped responding, until you opened Settings and pressed Escape. Chromium was freezing the idle editor window to save power, which halts every bit of the renderer's key handling, so both the app's shortcut handler and CodeMirror's Vim keymap went silent while typed characters still fell through as plain text. Editor windows now opt out of that background freezing, and the app re-grabs editor focus on its own when the window wakes, so shortcuts and Vim keep working without the Settings-and-Escape dance. (#350, thanks @SandeepKumarKuanar)
  • Closing a focused pane returns keyboard focus to the editor: with Vim-style pane navigation, focusing the sidebar and then hiding it (Cmd/Ctrl+1 or Leader E), or closing the Tasks or Tags view with :q, used to leave keyboard focus stranded on the pane that just disappeared. The open note would not accept typing until you moved focus back with a pane command or clicked the editor. Focus now snaps back to the editor automatically the moment a focused pane closes, so you can keep typing without the extra step. Hiding the sidebar while you are already editing still leaves your cursor in the note. (#353, thanks @uNyanda)
  • Exporting a drawing as PNG or SVG writes the file again: in a drawing, "Export image → Save to disk" would show the save dialog, then fail the moment you picked a location with a createWritable "not allowed" error, leaving a 0-byte file. Excalidraw's export uses the browser File System Access API, whose write is gated on a fileSystem permission that the app's locked-down renderer allowlist (tightened alongside the clipboard fix) was denying. The native picker was never blocked, only the write. That permission is now granted for the app's own, user-initiated saves, so PNG and SVG exports write real files again. (#355, thanks @naingyeminn)

🔒 Security & maintenance

  • More resilient Linux release builds: the release workflow now drops the GitHub runner's pre-configured Microsoft/azure apt repositories before installing Linux packaging tools, so an intermittently broken upstream InRelease file can no longer fail the Linux installer build.

Keyboard-first and local-first, as always.