Skip to content

ZenNotes v2.10.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Jul 20:08

ZenNotes 2.10.0 — Transclusion, Markdown-link backlinks, and reorderable database columns

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

✨ Improvements

  • Transclusion — embed notes with ![[Note]]: prefix a wikilink with ! to inline the target note's rendered content in the reading view and PDF export, recursively and with cycle protection. A "master note" can pull in sub‑notes and export to PDF as a single document — frontmatter is stripped, code‑fenced embeds stay literal, and image/asset embeds work as before. (Requested on YouTube by @Hisky.)
  • Backlinks for Markdown links: the connections panel now counts standard Markdown links [text](Note.md) — incoming and outgoing — not just [[wikilinks]], so notes stay connected even if you never use wikilinks. (Next: the MCP backlinks tool + rename‑rewriting follow.) (Requested on YouTube by @70dark.)
  • Excalidraw + the Space leader key play nice: inside an Excalidraw tab, tap Space for ZenNotes' leader menu and hold Space to pan the canvas with Excalidraw's Hand tool. The leader no longer swallows Space, so panning big boards works again — a quick tap still opens the leader. (#309, thanks @junereycasuga)
  • Quick Note editor matches the main editor: in the Quick Note window, j/k now move by visual line through soft‑wrapped text (the #290 behavior), and the inline‑format shortcuts work — ⌘B/⌘I/⌘E (bold/italic/code), ⇧⌘S/⇧⌘H/⇧⌘M (strike/highlight/math), ⌘K (link) — so ⌘I italicizes the selection instead of selecting the line. (#312, thanks @nianiam)
  • Reorder database columns: in a CSV/database table you can now reorder fields — drag a column header, press H/L on the focused column (vim‑style; the cursor follows), or use Move left / Move right in the column's field menu. Previously a new field could only be appended to the end. (#317, thanks @bahaospanov)
  • CLI renamed zenzn: the opt‑in command‑line tool now installs as zn so it stops colliding with Zen Browser's zen on your PATH (Linux, and macOS via Homebrew). Installing migrates an old ZenNotes zen for you — and it never removes a zen that isn't ours — while the Raycast extension and zn mcp follow along. Update any scripts or aliases from zen … to zn …. (#126)

🐛 Fixes

  • Calendar counts @waiting tasks consistently: a task with a due date and @waiting now appears in the sidebar calendar too, not just the Tasks calendar — so the two views' per‑day counts match again. (#311, thanks @npodoscope)
  • Relative‑number jumps respect wrapped lines: with relative line numbers on, a counted {count}j / {count}k (e.g. 3j) now jumps to the logical line the gutter shows — counting logical lines, not wrapped display rows — while a bare j/k still steps one visual row. (#314, thanks @npodoscope)
  • Sidebar keyboard nav works in Daily/Weekly Notes: h/l and / now expand/collapse the Daily Notes and Weekly Notes date groups (and their year/month subgroups) like any other folder, instead of doing nothing or snapping the selection back to the parent. (#301, thanks @uNyanda)

🔒 Security & maintenance

  • Docker image — updated Go runtime: the self-hosted server image now builds on Go 1.26.4 (was 1.22.12), clearing a critical plus 40+ high/medium stdlib CVEs that image scanners flagged, and bumps the go-chi/chi router to v5.2.5 (from v5.2.0). No behavior change — just a patched runtime. (#303, thanks @wedgen)
  • Docker — clearer ZENNOTES_AUTH_TOKEN_FILE failures: when the auth‑token file is set but missing, unreadable, or empty (wrong path, unmounted secret, permissions), the server now logs a precise reason — ZENNOTES_AUTH_TOKEN_FILE "…" could not be read: … — instead of the misleading "ZENNOTES_AUTH_TOKEN missing", and the startup message lists the _FILE option. The self‑hosting docs gained a Docker‑secrets example and the common gotchas. (#304, thanks @wedgen)
  • Linux arm64 packages are back: the release build again produces the arm64 .deb / .pacman / .AppImage / .tar.gz — v2.9.0 shipped without them because electron‑builder's bundled fpm is x86‑only and errored on the native aarch64 runner (the AppImage/tar.gz built, then the deb step killed the run). The arm64 release leg now installs a native fpm and points electron‑builder at it, scoped so x64 keeps the bundled binary. (#307 / #308, thanks @robwilkerson)
  • Persist self‑hosted sessions across restarts (opt‑in): browser logins were kept in memory, so restarting the Docker container made you re‑enter the auth token every time. Set ZENNOTES_PERSIST_SESSIONS=1 to save sessions to sessions.json on the /data volume (mode 0600) and reload them on startup, so you stay logged in. Off by default since it writes session tokens to disk. (Asked on Discord by Dave.)

Keyboard‑first and local‑first, as always.