ZenNotes 2.80.0 turns the Kanban board into a real planning board: swimlanes, subtasks folded into their card with a progress bar, and WIP limits, in a quieter Tasks header. Templates can live in a folder of your vault, an assistant can be given only part of a vault, and large vaults open on macOS without freezing.
Features
- Swimlanes on the Kanban board (#1027, asked for by williamcheuk03). Pick Lanes: Priority, Folder, Tag or any
@fieldin the board's View menu, and the board splits into rows across the same columns, each with its own count. Drag a card into another lane to change that field on its task line (!high,@sprint:24, or a tag lane's tag); folder lanes are read-only, like folder columns. Click a lane's header to collapse it. In Vim modeSsteps through the lane fields,{/}hop between lanes,Shift+J/Shift+Kmove a card a lane down or up, andza/zM/zRcollapse lanes;:lanes tagworks on the ex line. - Subtasks fold into their card (#1028, asked for by williamcheuk03). A task's indented subtasks now sit inside its Kanban card, with a progress bar such as
3/5 · 60%, counted like the3/5chip in the note (direct subtasks, cancelled ones left out). Click the bar to show them and check them off from the card;Tabsteps onto them,Spacechecks one,Enteropens the note at its line. A task note's checkboxes count the same way. - WIP limits (#1025, asked for by williamcheuk03). Right-click a column header (or
Shift+F10on it) and choose Set WIP limit…;Wor:wip 3in Vim mode. The header reads2 / 3, and past the limit the column turns red. Limits count the whole column, across lanes. - Quieter Tasks views (#1026, asked for by williamcheuk03). Empty
- [ ]placeholders, like the ones daily-note templates leave, stay out of the Tasks list, calendar and board, the Calendar and Timeline panels and the home view, so yesterday's placeholder no longer turns up overdue; in Tasks, a quiet "3 hidden" says how many. Board options live in one View menu, and a Keys button (?in Vim mode) lists each view's shortcuts in place of the two lines of key hints the header and footer used to carry. - A template folder (#1024, asked for by williamcheuk03). Keep templates as ordinary notes in a folder of your vault, the way Obsidian does: Settings, Templates, Template folder, or Use as Template Folder from a folder's menu in the sidebar. Every note in it shows in the template picker; its checkboxes stay out of Tasks, its tags out of the tag list, and its notes out of search (
zn0.13.1 and its MCP server follow the same rules). A self-hosted vault needs server 2.80. - Share part of a vault with an assistant (ZenNotes/tui#21, asked for by lewxdev). The MCP server bundled with the app and
zn mcptake--allow-path,--deny-path,--read-onlyand--access, enforced on every tool: a hidden note answers exactly like a missing one, and the vault's location never shows. The bundled zn is 0.13.1. - Delete rows from the keyboard. In a database grid,
DeleteorBackspacedeletes the selected rows, or the row at the cursor, after asking; the question opens on Cancel. - Numbered lists that line up past 9 (asked for by Julie). A list padded so
9.sits above10.stays lined up as it grows, through Enter,o/Oand renumbering. The demo tour's Start Here list is padded that way. - Phones: a folder's menu opens its Gallery.
Fixes
- Large vaults no longer freeze on macOS (#999, thanks to MDerman). The file watcher used one handle per folder and ran out on a large vault; it now watches the vault as a whole. A folder the app cannot read (such as
lost+foundon Linux) no longer stops live updates, a watcher that runs out of handles restarts on its own, and the themes, CSS snippets, language packs and config.toml watchers keep working past an unreadable folder too. - A duplicate daily note (reported by yeminn). With rollover on, a daily-note template and a Cloud-synced vault, opening today's note could make
2026-10-30 2.mdwith the rolled tasks and open an empty2026-10-30.md. The rollover now uses the note it just opened, and a rolled task no longer stays behind in yesterday's note as well. - One file Cloud won't take no longer stops the sync (#1004). It stays on this device while the rest syncs, and Settings, Cloud says what to do with it. A note moved or renamed to such a path stays in Cloud under its old name until then, so other devices keep it; a path longer than Cloud takes is held before it is sent; and a held note of yours keeps the status bar on "1 file stays on this device" until you rename it.
- Enter in a confirmation presses the focused button. A question that deletes or discards opens on Cancel, so Enter alone keeps everything; Tab to the button that goes ahead.
- A tooltip cut off at the window's edge (#1020, thanks to williamcheuk03). The note header's last button (Move to trash) now shows its whole tooltip.
- Shift+F10 with Vim off on macOS opens the editor's right-click menu at the cursor.
- Databases: Backspace while editing a view's picks no longer offers to delete them; after
dd, the next key still moves in the grid; a row deleted while its confirm was open no longer blames the linked pages. - Kanban: a card moved into In progress keeps the cursor, so the next move acts on it.
- Tasks calendar: Esc puts back a task picked up with
m(it stayed held, and the toolbar kept saying Moving), and other keys wait until the task is placed. With daily notes on,athere always adds a task to the selected day, as its key sheet says; which of that and New task it did used to depend on the order the view had opened in. - MCP: assistants stay inside the note folders: moves, renames and paths can no longer reach
.zennotesor the attachments folder, or follow a link out of the vault. zn base addputs a new row into the picked rows of the view the database opens on, as + Row does.- Phones: closing the sidebar leaves its keys with the editor, and the keyboard stays down where the app moved focus out of habit.
For contributors
- Swimlanes (
7a6e3d36,70189664,f3ad9a3c, mergea069a4bb): lane building and drops reuselib/task-column-mutations.ts;kanban_lanesis a portable pref, collapsed lanes are machine-local. - Subtasks (
aebdeab5,44a9946e,c71a7dcc, mergede8a419d): an optionalparentIdcomputed once inshared-domain/task-nesting.ts, mirrored in znserver (ZenNotes/znserver#55) and held to the shared fixturebridge-contract/fixtures/task-subtasks.json. The nesting walk reads lazy continuation lines the way Lezer does, so a card and the note's chip always agree (0e8a921a). - Empty tasks, View menu and Keys (
3b48e94f; the panels and home view94a527b2), WIP limits (fa5ba5a6):TasksToolbar.tsx;hide_empty_tasksunder[view],[kanban_wip_limits]in config.toml. - Template folder (
8b42b542, tags and local search38a20451): vault.jsontemplates.folder, loaded in app-core for every host;tasksFolderListsForSettingskeeps it out of Tasks andoutsideTemplateFolderout of the tag surfaces; znserver #54 addssupportsTemplateFolder, zn follows in ZenNotes/tui#25. - MCP scopes (
969f50e3,df340cb5,d0fe299f): rules inshared-domain/mcp-scope.ts, contract fixturebridge-contract/fixtures/mcp-scope.jsonshared with zn; path hardening228a1d9e. zn pins6a07ef89(0.13.0) and31520814(0.13.1). - Watchers (
383a2e9aby MDerman,9c27db1b,6bf2604e): chokidar 6 bundled into main;ignorePermissionErrors, restart on handle exhaustion. - Daily notes and buffers (
f6413063,156269b6); Cloud refused paths (3c8fb850,5587a42d,c8493d03,66af53e9,eaab18c4,1b49dcda,dd513589); dialogs695a9237; tooltip0cfcb3a8; menu4bed24c6; calendar Esceca34b23anda4fcf9196.
Demos
Clips and screenshots of this release on the release build, attached to this release:
Swimlanes: View, Lanes: Priority splits the board into a lane per priority; a card dragged into High gets !high, Shift+J moves it a lane down, za folds a lane, and Enter shows the line it wrote. Watch the clip (29 seconds, captioned).
Subtasks on the card: a card reading 3/5 · 60% opens its subtasks, one is checked from the card, Tab steps through the rest and x takes it to 5/5 · 100%; Enter opens the note at that line. Watch the clip (23 seconds, captioned).
WIP limits: Set WIP limit… on In progress, a limit of 3 against 4 cards turns it red, :wip 4 sits at the limit and a bare :wip clears it. Watch the clip (21 seconds, captioned).
Empty tasks and Keys: daily notes' blank - [ ] lines stay off the board behind "3 hidden", the View menu shows them, E hides them again, and ? opens the board's keys. Watch the clip (23 seconds, captioned).
A template folder: a Templates folder's checkboxes leave Tasks once it is picked in Settings, Templates; Space t makes a new note from its Meeting note, and only the new note's checkboxes reach Tasks. Watch the clip (35 seconds, captioned).
Deleting rows from the keyboard, with Vim mode off: Space selects two rows, Backspace asks with Cancel focused so Enter keeps them, then Tab and Enter delete both. Watch the clip (18 seconds, captioned).
Padded numbered lists: Enter after 9. writes 10. and keeps the text in one column, and the Start Here tour lines its list up the same way. Watch the clip (20 seconds, captioned).
The daily note fix: Space d makes today's note from its template with yesterday's open tasks rolled in, one note for today, and yesterday keeps only what it finished. Watch the clip (18 seconds, captioned).
Verification
How to test locally. Build once with npm run build --workspace @zennotes/desktop and launch with isolated stores: ZENNOTES_USER_DATA_PATH=$(mktemp -d) ZENNOTES_CONFIG_DIR=$(mktemp -d) npx electron apps/desktop/out/main/index.js. Turn Vim mode on in Settings for the letter keys.
- Swimlanes. Open Tasks, Kanban. Write a few tasks with
!high,!lowand none. View, Lanes: Priority: three lanes plus No priority. Drag a card from Low into High: its line now reads!high. Presszaon a lane: it folds. - Subtasks. In a note, write
- [ ] Launchwith three indented- [ ]lines, one checked. On the board the card reads1/3 · 33%. Click the bar, tick one:2/3 · 66%and the note's line reads- [x]. - WIP limits. Right-click a column header, Set WIP limit…, 1: with two cards the column turns red and reads
2 / 1.:wipclears it. - Empty tasks. Add a line
- [ ]with no text: no empty card shows, and "1 hidden" sits beside View. Click it: the card shows. Press?: the Keys sheet opens. Open the Timeline (Mod+7): no "(empty task)" there either while Hide empty tasks is on. - Template folder. Make a folder
Templateswith a noteMeeting.md. Settings, Templates, Template folder: Templates.Space t, pick Meeting (marked with its folder), then a folder: a new note from it. Its- [ ]lines are not in Tasks, and its tags are not in the sidebar's tag list. - MCP scopes. Run
zn mcp --allow-path Projects --read-onlyfrom an MCP client (or point a client at it):list_noteslists only Projects, and no write tools are offered. - Large vault (macOS). Open a vault with tens of thousands of notes: it lists without a freeze.
- Daily note. Turn on Daily notes, rollover and a daily template; with an open task in yesterday's note, open today's: one note, holding the task, and yesterday no longer has it.
- Confirmations. In a database, select a row, press Delete: the question opens on Cancel, so Enter keeps the row; Tab, then Enter, deletes it.
- Numbered lists. Write
1.to9.padded with a space, press Enter after9.: the new item reads10.and lines up.



