Skip to content

ZenNotes

v2.4.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

Broad release touches πŸ› Fixes, Live-preview, ✨ Highlights, and WYSIWYG.

Full changelog

ZenNotes 2.4.0 lets daily and weekly notes follow your own folder and filename patterns and wires daily-note tasks into a keyboard-driven Tasks calendar (tasks fall due on their note's date, drag or Vim to reschedule, roll unfinished tasks over to today), brings a live-preview (WYSIWYG) Edit mode that renders tables, callouts, strikethrough and more inline β€” with full keyboard/Vim control of tables β€” reorganizes each database into a single self-contained folder, unifies assets into one folder with a dedicated browse view, adds Back/Forward navigation with restyled tabs, auto-closes Markdown delimiters as you type, and tightens the keyboard-first writing flow with refreshed in-app help, cleaner onboarding controls, and a fix for note tabs losing their place when you switch between them.

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

✨ Highlights

Configurable daily & weekly note patterns (#77)

Daily and weekly notes can now follow your own folder and filename conventions. Set a directory pattern and a naming pattern from date tokens β€” yyyy, MM, MMM, dd, EEE, ww, and more β€” plus a locale for localized month and weekday names. For example, yyyy/MM-MMM with yyyy-MM-dd-EEE creates 2026/06-Jun/2026-06-09-Tue.md, and you can wrap literal text in single quotes like 'Daily Notes'/yyyy/MM-MMM. The previous behavior stays the default (Daily Notes/2026-06-09.md). Changing a pattern keeps your existing notes recognized β€” including titles that encode the day by ISO week and weekday β€” and a Reset to defaults button restores the directory, naming, and locale in one click.

Daily-note tasks meet the calendar

Working in daily notes is now wired into the Tasks calendar end to end:

  • Tasks are due on the note's date. A task you write in a daily note now shows up on the calendar for that day automatically β€” no due: needed. The line stays clean (nothing is written to your text); the due date is derived from the note's own date, and an explicit due:YYYY-MM-DD you type still wins. On by default; toggle under Settings β†’ Vault β†’ Daily notes.
  • Add & manage tasks from the calendar. The Tasks β†’ Calendar view has a quick-add box under the grid: type a task and it's added to the selected day's daily note β€” and for a day that has no daily note yet (past or future), it offers to create the note first.
  • Reschedule by dragging β€” or from the keyboard. Drag a task onto another day to change its due date. Keyboard-first too: Tab picks a task in the day list, < / > nudge it a day earlier/later, and T moves it to today.
  • Roll over unfinished tasks to today. Opt in (Settings β†’ Vault β†’ Daily notes) and every unchecked task from previous daily notes is moved into today's note when you open it β€” Obsidian-style. Checked tasks stay put as history; you can also trigger it any time from the command palette (Roll Over Unfinished Tasks to Today).
  • A week agenda under the grid. The sidebar calendar panel now lists the selected week's tasks beneath the month, grouped by day, so you can scan the week at a glance β€” and drag a task straight onto a day row to reschedule it.
  • Drive the whole calendar from the keyboard. Both the Tasks β†’ Calendar view and the sidebar calendar panel are fully Vim-navigable: h/j/k/l move the day cursor, [/] change month, gg/G jump to the first/last day, and gt goes to today. Tab picks a task in the selected day's list β€” then x toggles it, e edits it inline, dd deletes it, m grabs it to drop on another day (h/j/k/l then Enter), </>/T reschedule, and a focuses the quick-add box.

All of it works the same on desktop and the self-hosted/web app. (Requested by a user.)

Insert a task with /

The editor's / slash menu now has a Task command that drops a - [ ] checkbox at the cursor β€” a fast way to add a task to any note. In a daily note it picks up that day's due date automatically (see above), so it lands on the calendar without typing a due: token.

Live-preview (WYSIWYG) Edit mode

Edit mode now renders Markdown inline instead of leaving it as raw syntax. Strikethrough (#187) renders with a line-through, horizontal rules (---/***/___) become dividers, GFM tables render as an editable grid, callouts (> [!note] / [!tip] / [!warning] / …) become colored cards, and hashtags, [[wikilinks]], and fenced-code blocks get chips and a language-labelled card. Tables are fully keyboard-driven with Vim: move between cells and characters (h/j/k/l, w/b/e/0/$), edit with i/a, char-wise visual mode, operators and text objects (x, dd, dw, ciw, di"), undo/redo (u / Ctrl-r), and an m action menu (add / move / delete / align / sort). The line under the cursor still reveals its raw source for editing. (Built on the WYSIWYG groundwork from community PR #185.)

Databases are now self-contained folders ⚠️ breaking

Each database is now one folder, <Name>.base/, that holds its data (data.csv), its schema (schema.json), and its record-page notes together. The whole database moves, renames, and goes to trash as a single unit, and it shows up in the sidebar as a database β€” its own icon, click to open the grid, expand to reveal its record pages. You can rename it inline from the grid header, and create one from the sidebar's New menu. Existing databases are migrated automatically the first time you open your vault (the old loose <Name>.csv + .csv.base.json sidecar, with record notes, are moved into the new folder); a plain CSV that was never used as a database is left untouched. Databases now work on desktop and the self-hosted/web app alike β€” the web client lists, opens, edits, creates, and renames them with the same grid, reusing the same CSV/schema engine so the files stay byte-identical across platforms. (Idea from community PR #185.)

A record's page note shows its fields as live "metadata": the table is the source of truth, and each record page mirrors its row's properties as a tidy frontmatter card at the top of the note. Editing a cell or adding/renaming/removing a field in the table now updates an open record page's metadata immediately (its body is left intact), and the in-editor frontmatter renders as a compact properties card β€” quiet rounded edges instead of raw --- fences, with each field name shown as a muted label beside its value. (Reported by a user.)

Unified asset management ⚠️ breaking

Assets (images, PDFs, attachments) are no longer mixed in with your notes β€” they live in a top-level assets/ folder, and new imports (including pasted images) go there. Loose attachments are migrated automatically on open (root-level files and the legacy attachements//_assets/ dirs move into assets/), skipping any name collision so existing ![[…]]/![](…) embeds keep resolving; notes and databases are never touched. A dedicated Assets view (sidebar entry) browses everything in one place as an aligned table β€” filter, and per asset see where it's used ("used in N" / "unused"), with a right-click menu to open, copy embed, reveal in file manager, rename, or move to trash. (Idea from community PR #185.)

Workspace navigation & tabs

Added Back/Forward navigation through your note history: arrow buttons at the left of the tab bar, plus Alt+←/Alt+β†’ on any platform (Vim's Ctrl+O/Ctrl+I still work). The workspace tabs were restyled to flat, full-height segments (VS Code-style) β€” the active tab is filled and scrolls into view, and the close button reveals on hover for inactive tabs, and you can middle-click a tab to close it (community PR #140). (Idea from community PR #185.)

Selection toolbar & formatting shortcuts

Select text in the editor and a Notion-style bubble toolbar pops up over it: a "Turn into" block menu (Text, Heading 1–3, bulleted/numbered/to-do lists, quote, code), inline formatting (bold, italic, ~~strikethrough~~, ==highlight==, code, $math$), a link, and a comment. The footer shows the focused/hovered action's keyboard shortcut right on the popup. The same inline formats have keyboard shortcuts that work on every platform, in or out of Vim mode β€” handled before Vim's own Ctrl chords get a chance, with Mod = ⌘ on macOS and Ctrl on Windows/Linux: Mod+B bold, Mod+I italic, Mod+E code, Mod+K link, Shift+Mod+S strikethrough, Shift+Mod+H highlight, Shift+Mod+M math. The toolbar is fully keyboard-navigable too β€” Mod+/ focuses it, then the arrow keys (or h/j/k/l in Vim mode) move row-aware across the formats and up to "Turn into"; Enter applies, Esc returns to the text. (Requested by a user.)

Markdown snippet auto-close

Editing now auto-closes Markdown delimiters as you type. Type an inline marker β€” **, __, ~~, `, ==, [[, or %% β€” then Space to wrap the cursor (**|**), or a fence β€” ```, ~~~, or $$ β€” then Enter to expand a block with the cursor on the inner line. It skips delimiters that are already closed, closing fences, and escaped markers, and works across every editor surface (main editor, quick capture, floating notes, external files, templates). Toggle it under Settings β†’ Writing β†’ "Markdown snippets" (on by default). In Vim mode it only fires in insert mode β€” never in normal/visual, where Space/Enter belong to Vim. (Idea from community PR #185.)

Refreshed in-app help

The built-in Help tab now reflects the current app more completely: CSV databases, database-grid shortcuts, comments from the keyboard, always-on pane focus with Alt+H/J/K/L, palette navigation, and the expanded theme family list are documented in one place.

Cleaner onboarding mode controls (#123)

The onboarding mode selector now uses a more consistent segmented-control layout, with clearer accessibility state for the active mode.

Markdown in comments

Comments now render Markdown. What you write in a comment β€” ## headings, bullet and nested lists, **bold**, _italic_, `code`, links β€” displays formatted in the comments panel instead of as raw text. You still type plain Markdown source in the comment box (it renders on save), and headings are scaled down to sit neatly in the comment card. (Requested by a user.)

Custom icons & colors

Custom icons and accent colors now work on notes and databases too β€” not just folders. Right-click an item β†’ Change icon… / Change color…, then pick from the icon set or the 10-color palette; Reset is now folded into those same menus as an inline option instead of being a separate command. A color tints the item's icon and name in the sidebar and stays readable in every state β€” a colored row that's selected keeps its color (a faint tint + ring instead of the solid highlight, so same-hue text doesn't disappear). Choices are stored per-vault and follow items through rename, move, and duplicate. (Requested by a user.)

Copy a note as Markdown

A new Copy Note as Markdown command copies the whole note's Markdown source β€” including unsaved edits β€” to the clipboard. Run it from the command palette, or with the Vim leader binding Space l y (under the note-actions group; remappable in Settings β†’ Keymaps). (Requested by a user.)

Excalidraw drawings

You can now keep Excalidraw drawings right alongside your notes. A .excalidraw file is a first-class, note-like item β€” it shows up in the sidebar with the real Excalidraw icon (not buried under Assets), and opens in a full, embedded Excalidraw editor that follows the app's light/dark theme. The editor loads lazily, so it never weighs on startup, and it auto-saves your scene back to disk as you draw. Create one with New drawing from the sidebar (folder menu or the empty-area menu) or from the breadcrumb create menu; rename and move work exactly like notes and always keep the .excalidraw extension. The drawing's header hides the Markdown-only controls (edit/split/preview, connections, comments, outline, PDF export) and keeps archive and trash. Drawings work on desktop and the self-hosted/web app β€” the server lists, creates, renames, and moves them just like notes (a drawing's scene JSON is never mistaken for note content, so its colors don't leak in as tags). (Requested by a user.)

Create from the breadcrumb

The path breadcrumb above a note is now a create surface: right-click any folder crumb β€” or, with Vim, focus a crumb (e.g. via hint mode, <leader>h) and press m β€” to open a menu that creates a New note, New drawing, or New folder inside that folder.

Favorites

You can now favorite notes and folders to pin them to the top of the sidebar. Right-click a note or subfolder β†’ Add to Favorites (or, with Vim, Space l s on the active note β€” remappable in Settings β†’ Keymaps, shown in the leader-l which-key menu). Favorites appear in a dedicated Favorites section with their real icons β€” click or press Enter to open. They survive renames and moves (the favorite repoints itself), drop away when you delete the folder they live in, and are stored per-vault, so they work on desktop and the self-hosted/web app. (Requested by a user.)

A cleaner, organized sidebar

The sidebar is now grouped into clear labeled sections β€” Favorites, Quick access (Tasks, Quick Notes, Daily & Weekly notes), Notes (your tree), Tags, and System (Archive, Trash, Assets) pinned to the bottom. The header + button opens a create menu for every supported type β€” note, drawing, template, database, or folder β€” instead of only a note. Vim navigation now stops on the Daily and Weekly note rows (they were being skipped), Assets opens from the keyboard, and a stray gap above Daily Notes is gone. The rows themselves were restyled Notion-style β€” a soft selected-row highlight (instead of the solid fill), roomier spacing, thinner muted icons, and a hover chevron that aligns the tree. (Requested by a user.)

Databases & drawings on the self-hosted web client

The web client now matches the desktop for databases and drawings. Open the self-hosted app in a browser and your databases list in the sidebar and open to the full grid (add fields, rows, views, record pages); .excalidraw drawings list, create, open, and edit the same way. Both reuse the exact same engine the desktop uses, so files round-trip byte-for-byte between desktop and web. (Requested by a user.)

πŸ“¦ Linux packaging

Three community-contributed ways to install on Linux:

  • Flatpak (community PR #145) β€” a new packaging/flatpak/ manifest builds a self-contained Flatpak that ships its own runtime, sidestepping the host FUSE / system-library issues that keep the AppImage from starting on Fedora Atomic/Silverblue, minimal installs, and some Arch variants (the class of problem in #65). Flathub publishing is a planned follow-up.
  • Plain tar.gz + a simpler AUR package (community PR #133, fixes #103) β€” release builds now also ship a generic tar.gz, and the AUR zennotes-bin package repackages that tarball instead of extracting the AppImage. Because a tarball preserves permissions, the chmod workarounds behind the earlier install breakage (#70 / #74 / #92) are gone.
  • Nix / NixOS (community PR #149) β€” a root flake.nix plus a packaging/nix/ set with separate zennotes-desktop and zennotes-server packages that build from source, a dev shell, and install docs. Thanks to @hallwack and @justkrysteq.

πŸ› Fixes

  • Custom pane-focus shortcuts override the editor (#124) β€” remapping Focus pane left/down/up/right onto a key CodeMirror also uses (e.g. Ctrl+H to delete a character, Ctrl+K to kill a line) no longer runs both at once. The key now only moves focus instead of also editing the text. Focusing rightward from the sidebar also lands on the adjacent pane instead of skipping to the far side.
  • Tabs keep their editor position (#127) β€” switching between open note tabs now preserves each note's editor scroll position and cursor/selection. The editor no longer jumps back to line 1 when you scroll in one note, move somewhere else in another note, and return.
  • Calendar recognizes existing daily notes (#131) β€” daily and weekly note detection now uses the same vault-layout rules across the calendar, sidebar, and open/create commands, so synced or manually added date notes show their calendar dots and open without creating duplicates. Daily/weekly directory fields in Settings also wait until blur or Enter before saving, so they no longer snap back to the default while you are clearing or typing a path.
  • No more duplicated tooltips on sidebar icons (#141) β€” the sidebar action icons (search, new note, new folder, sort, auto-reveal, collapse) showed their label twice on hover β€” the themed in-app tooltip plus the native OS tooltip. The redundant native tooltip is gone; the styled tooltip and screen-reader label remain.
  • Clipboard keys on Linux, Vim yank-to-clipboard, and highlight on yank (#144) β€” the editor's right-click menu now shows the correct modifier per platform (Ctrl on Linux/Windows, ⌘ on macOS) instead of always ⌘. A new Settings β†’ Vim β†’ "Yank to system clipboard" option mirrors clipboard=unnamed, so y/d/c/x also copy to the system clipboard while Vim's Ctrl bindings stay intact. And yanked text now briefly highlights, like Neovim's vim.highlight.on_yank().
  • Space reaches Vim while a command awaits an argument (#147) β€” in Vim normal mode, pressing Space right after r, f/t/F/T, an operator, or a count no longer opens the leader/which-key overlay. The keystroke now goes to Vim, so r+Space replaces a character with a space and f+Space jumps to the next space. A plain Space at rest still opens the leader.
  • Hint mode works in the Tasks and Tags views (#151) β€” since 2.3.0, hint mode (<leader>h) and every other leader command were dead in the Tasks and Tags views, because those views only let the old standalone hint key through. The leader now works there. With the default Space leader, toggling a task moves to x (Space still toggles if you've remapped your leader off Space), hint labels that overlap panel keys are no longer intercepted, and Esc no longer closes the Tasks/Tags tab β€” it clears an active filter instead (close with :q, the header button, or ⌘W).
  • Sidebar header reflects the remote vault (#153) β€” when connected to a remote workspace, the sidebar header showed the server-side vault folder name and a mismatched badge instead of the connection you named. The header now mirrors the vault switcher, so the name and its colored badge match your remote profile (e.g. "Home").
  • Switching from a remote workspace back to a local vault β€” when the remote was a localhost server pointing at a folder that is also a local vault, picking that local vault in the switcher did nothing, because the app couldn't tell it apart from the vault it was already in. Switching now works regardless of matching paths.
  • Window menu renders fully on macOS (#154) β€” the Window menu's tab rows (Toggle Tab Bar, Show Next/Previous Tab, Merge All Windows) appeared blank under Electron 41 and thinned out further on repeat opens, because the macOS tab roles no longer carry default text. Each row now ships an explicit label, so the menu renders completely every time.
  • Quick-capture window is distinguishable on Wayland (#155) β€” the quick-capture window now carries its own title, ZenNotes Quick Capture, instead of sharing the main window's ZenNotes. Wayland compositors surface it as a separate xdg_toplevel, so WM rules (niri, Hyprland, Sway, …) can target the quick-capture window independently β€” e.g. for hotkey binding or floating placement. The title is set both at window construction and in the renderer so it sticks after load. (Community PR #174.)
  • Self-hosted server skips unreadable files instead of stopping (#159) β€” the server's vault scan aborted at the first file or folder it couldn't read (e.g. a vault copied in with root-owned files while the Docker container runs as a non-root user), so the whole vault appeared empty. It now skips entries it lacks permission to read and lists the rest. (Self-hosted / Docker server only.)
  • Complete macOS app icon (#165) β€” the bundled macOS icon now ships every standard size (it previously omitted the 32Γ—32 and 1024Γ—1024 representations), so it renders consistently across launchers and the system icon cache. (A missing icon specifically in Raycast is usually a stale Raycast cache β€” relaunching Raycast refreshes it.)
  • Sidebar folders sort by name immediately (#168) β€” folders are now sorted by name with a numeric-aware comparator (so 2 Foo comes before 10 Foo) at render time, so a newly created folder lands in the right position right away instead of only after a restart. Notes and assets use the same numeric-aware order when you sort by Name.
  • Editor ex-command errors no longer break typing (#173) β€” an ex command with a bad argument (e.g. :mv trash) reported its error with a blocking native dialog that stole focus from the editor, leaving Vim users unable to type after dismissing it. Errors from :mv/:move, :e/:edit, and :new now show as a non-blocking message at the bottom of the editor (like an unknown :command), so focus stays put.
  • zen open no longer opens two windows (#178) β€” on a cold start, zen open <note> (which launches the app with the file as an argument) opened the note plus a spurious second default window, because the pending-file queue was flushed twice during startup. The eager flush now waits until startup finishes, so the file opens in a single window. (Double-clicking a .md to launch the app is fixed the same way.)
  • Self-hosted server no longer hangs where inotify is restricted (#179) β€” on hosts that restrict inotify (notably unprivileged LXC containers), the file watcher could wedge the server process β€” unkillable, with the bind-mounted vault locked. Set ZENNOTES_DISABLE_WATCHER=1 to run with a no-op watcher (the vault is still fully served; only live auto-refresh stops). The watcher is also non-fatal now β€” it falls back gracefully instead of crashing if it can't start β€” and previously-silent watch-setup failures are logged. (Self-hosted / Docker server only.)
  • IME conversion Enter no longer triggers actions (#183) β€” when typing with an IME (Japanese, Chinese, Korean, …), the Enter that confirms a conversion no longer also commits a rename, opens a search result, or blurs the field. Composition now owns Enter/Arrows/Tab across the rename prompt and breadcrumb rename, the search/command palettes, database inline renames (view/field/cell/group/tag), settings fields, the remote-profile and directory-picker modals, quick capture, and the tasks filter and Kanban column rename; a fresh Enter confirms once composition ends.
  • Images and PDFs show in a capital-cased Inbox folder (#186) β€” on a case-insensitive filesystem (macOS/Windows), an inbox folder stored on disk as Inbox/ (rather than the canonical lowercase inbox/) hid its images and PDFs in the file browser while still showing its notes, so a folder containing only attachments looked empty. The browser now matches the system folders (inbox/quick/archive/trash) case-insensitively, so a capitalized Inbox/ behaves exactly like inbox/ and its attachments appear alongside the notes. (The real on-disk path is preserved for file operations, so this stays correct on case-sensitive Linux.)
  • Reference-link definition colon stays visible in Edit mode (#188) β€” in a reference-style link definition ([label]: url), the : parses as a link marker and was hidden along with inline-link brackets, leaving a broken-looking [label] url in Edit mode. The colon now stays visible. (Preview already resolved reference links correctly and dropped the definition line, per standard Markdown.)
  • Cmd+W closes the window when no tab is open (#192) β€” with all tabs already closed, Cmd+W (macOS) / Ctrl+W (Linux/Windows) did nothing because the shortcut only closed tabs. It now closes the window once there's no tab left. In vim mode Ctrl+W is reserved for the <C-w> pane prefix only while a tab is open, so an empty window closes with vim mode on too.
  • Obsidian-style vaults no longer look empty (#195) β€” opening a vault whose notes live at the root (and in custom folders) while ZenNotes was in Inbox mode showed a silently empty vault β€” the scan only walks inbox/quick/archive/trash, so top-level content was hidden. (This typically happened when a flaky first directory read on an iCloud-backed or symlinked folder fell back to the Inbox default.) The sidebar now detects the mismatch and shows a banner β€” "Notes at your vault root aren't shown" β€” with a one-click Switch to Vault root, replacing the empty window with a clear, actionable fix.
  • Links to headings β€” [[Note#heading]] (#196) β€” internal links with a heading anchor finally work. [[Note#heading]] resolves to Note (it used to be treated as a brand-new document, and the connections tab even offered to create it), and clicking it β€” or pressing gd β€” now scrolls to the heading instead of the top, in both the editor and the preview. Typing [[Note# autocompletes that note's headings ([[# lists the current note's), Ctrl+Y accepts the highlighted completion Vim-style, and Tab accepts a note link while keeping the caret inside [[…]] so you can chain straight into a #heading.
  • No error when deleting an open database β€” removing a database (.csv) while its grid tab was open logged a repeated Database not found error and left the dead tab open, because the app kept trying to re-read the deleted file. The tab now closes cleanly and a missing database is handled quietly (a tab can simply outlive its file); genuine read errors still surface.
  • Vim shortcuts respect the mode and stand down for dialogs β€” in the Trash/Archive/Tasks/Tags/Quick Notes views, the single-key list shortcuts (j/k/x/d/gg/G/o/r//) fired even with Vim mode off, and they fired through an open confirm dialog or context menu β€” so pressing Enter on a delete confirmation was swallowed and repeated Enter kept deleting items. These views now stand down completely while a modal or menu owns the keyboard, and when Vim mode is off only arrows/Enter/Escape navigate. (Reported by songgenqing.)
  • Naming a new note no longer needs a second step β€” creating a note from the sidebar (the note-list +, the folder right-click menu, and the empty-area menu) now drops you straight into the title field with "Untitled" selected, so you can type a name and press Enter to move into the body β€” matching the command palette's "New Note". Previously these put the cursor in the body and left the name as "Untitled" to rename manually afterward. (Requested by a user.)
  • Ctrl+D scrolls in Vim mode on macOS β€” in Vim mode on macOS, Ctrl+D (and Ctrl+A/Ctrl+E/Ctrl+F/Ctrl+B/Ctrl+V …) ran the macOS emacs-style editing action β€” Ctrl+D deleted the character ahead β€” instead of the Vim motion, because CodeMirror's default keymap bound those chords above Vim's. They now reach Vim, so Ctrl+D/Ctrl+U half-page scroll, Ctrl+A increments, Ctrl+V enters visual-block, and so on. With Vim mode off the macOS editing keys are unchanged, and Linux/Windows were never affected. (Reported by a user.)
  • Existing Obsidian vaults keep their loose files in place (#202) β€” opening a vault that belongs to another app (it has an .obsidian/ folder) no longer relocates loose root-level files β€” images, PDFs, and Obsidian .canvas files β€” into assets/ on first open. ZenNotes now leaves an externally-managed vault's files exactly where you put them; the migration still tidies a former-ZenNotes vault's loose attachments. (Reported by a user.)
  • Standard Markdown links are clickable (#201) β€” [text](Note.md) links now navigate like [[wikilinks]] everywhere β€” the preview, the editor's live preview, and gd. Internal links (relative paths and #heading anchors) open the note; external links β€” including bare domains you typed without a scheme, like [site](google.com) β€” open in the browser. In the editor a plain click follows a rendered link (click one the cursor is inside to edit it instead), Cmd/Ctrl-click always follows, and Markdown links show the pointer cursor on hover. Previously internal links were treated as assets and opened a broken tab. No "link type" setting needed β€” both styles are first-class. (Reported by a user.)
  • Tags in any script β€” Cyrillic, CJK, and more (#205) β€” hashtags no longer have to start with a Latin letter, so #тСст, #ошибка, #ζ ‡η­Ύ and other non-Latin tags are recognized as tags: they render as clickable pills in the editor and preview and show up in the sidebar Tags list. Headings (# x) and hex colours (#1971c2) are still not tags. Fixed across desktop and the self-hosted/web server alike. (Reported by a user.)

Thanks to everyone filing issues and requests β€” closes #77, #103, #124, #127, #131, #141, #144, #147, #151, #153, #154, #155, #159, #165, #168, #173, #178, #179, #183, #186, #187, #188, #192, #195, #196, #201, #202, #205.

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]