github ZenNotes/zennotes v2.76.0
ZenNotes v2.76.0

latest release: web-2.76.0-web.h5b1c11f768454e10
2 hours ago

ZenNotes 2.76.0 is a Tasks release. Any task can take any due date from its right-click menu, a task without a due date waits under its own No due date group instead of in Today, and the Tasks list can put high priority first while staying grouped by date. It also fixes Cloud conflicts that a phone could not settle, one of which could delete a note it kept, and names a note's folder the same way in note search, the buffer switcher and the [[ picker.

Released from 61628218 through #994 on 2026-10-23.

Features

  • Choose any due date from the task menu (#991, thanks to @davi-jorge-art). The menu every task surface shares stopped at Due next week, so a day further out meant finding it on a calendar and typing due:2026-11-04 on the line, which is the most work on a phone. Choose a date… now follows the presets in the Tasks list, on the board, in both calendars, and on the phones a long-press on a task. It opens the month calendar that typing @date opens in a note, on the task's due date (today without one), and a click on a day sets it. In Vim mode, @ opens it on the selected task in the list, on the board and in the Tasks calendar. A daily-note task picked for its own note's date gets that date written out, so it stays when the task moves.
  • No due date has its own place (#990, thanks to @davi-jorge-art). An open task without a due date sat in Today, so Today mixed what is due with everything undated. It now waits under No due date, after Upcoming, in the Tasks list; the Status board gains a No due date column between Upcoming and In progress, and dropping a card there (or Shift+L / Shift+H into it) clears its due:. Home's Today keeps only what is due today or overdue. A task written in a daily note still counts as due on that note's date while "Tasks are due on the note's date" is on, so it stays in Today, and the No due date column refuses it, since its date is its note's.
  • Order the Tasks list by priority (#989, thanks to @davi-jorge-art). The list kept each group in its notes' line order, so a high-priority task could sit under five low ones. A new Order menu above the list switches each group between Note order and Priority: high, then medium, low and none, ties by due date, still grouped by Today, Upcoming and the rest. s switches it in Vim mode, :order priority and :order note on the ex line, and the command palette, Settings → Tasks and tasks_list_order under [view] in config.toml set the same thing. Shift+J/K and dragging reorder only in Note order; in Priority order they say how to switch back. zn 0.11.0 reads the same key (O in its task list).

Fixes

  • Cloud conflicts settle cleanly, and none deletes a note (reported by Dave on Discord). A phone whose sync had been stuck came back to two conflicts on one Untitled.md: keeping the other device's version said the file already existed, the second conflict then refused both choices as "changed again", and taking the other device's version of a note this phone never had could delete the note it kept, on both devices. Three causes, reproduced with two devices against a local Cloud server. A note met at a file this device had edited was queued as a conflict against it; such a conflict now settles after each pull once Cloud has moved that note on, landing where Cloud keeps it and leaving this device's file alone. The other device's version could not take its place while any file of this device held the path; that file now moves beside it to the next free name (Untitled 2.md and on). And a Cloud path taken by another file now says so instead of "changed again".
  • One folder label for a note everywhere. 2.75.0's note search showed the whole vault path (inbox/Projects/Atlas), the [[ picker showed Projects/Atlas/, and the buffer switcher the raw parent folder, while the picker made an archived 2025/Atlas look like an inbox folder. All three now name a note's folder the same way: inside the main notes area, the folder within it; anywhere else, the path from the vault root, area first (archive/2025/Atlas).
  • Move asset takes a folder like v1..2. The Move asset prompt refused any path with two dots in a row, and promised that an empty answer moves the asset to the vault root while every host files it in assets/. It now refuses only a whole .. segment, says an empty answer goes to assets/, and does that: an asset loose at the vault root moves there.
  • zn 0.11.0 is bundled. On macOS and Linux, the zn that ZenNotes installs is now 0.11.0, the terminal side of No due date and the priority order (ZenNotes/tui#16).

For contributors

  • Due date picker (1bf79403): chooseTaskDueDate in lib/task-context-menu.ts opens the @date DatePickerModal and writes through the same due-date mutation as the presets; the @ key is Vim-gated like x, i, c and > in TasksView, TasksKanban and TasksCalendar. Tests in task-context-menu.test.ts.
  • No due date (032e5da2): VaultTaskGroups.undated in shared-domain tasks.ts; the Status board's undated column and dropMutationsFor('undated') (refused for dueInferred tasks) in task-column-mutations.ts; Home and getTodayTasks now apply inferDailyTaskDueDates as the Tasks view does. Drag-reorder inside the No due date group came with 712a0e7a.
  • List order (712a0e7a): applyPriorityOrder and the order parameter of computeTasksRender in lib/tasks-filter.ts; tasksListOrder in the store, PORTABLE_PREF_KEYS and the desktop's TOML map ([view] tasks_list_order).
  • Cloud (5a34aea7): settleMovedArrivals in shared-domain's cloud-sync-coordinator.ts runs after each pull and on resolve; cloudSyncFreePath and displace_existing make room for the other device's version; PATH_CONFLICT has its own message.
  • Folder label (d825b149): noteFolderLabel in vault-layout.ts, used by SearchPalette, BufferPalette and the [[ picker. Move asset (0b3c8ce9): one prompt in lib/move-asset.ts.
  • zod 4.6.6 (61628218), the first release fixing the advisory that failed npm audit --omit=dev --audit-level=high; only that package moves in the lockfile. What's New 2.76.0 (efe5592f); bundled CLI 0.11.0 (36b8edbf); version bump (49304a02).

Demos

Screenshots of this release on the release build, attached to this release:

Choose a date… from a task's right-click menu opens the month calendar on its due date; a click on a day sets it.

The month calendar opened from a task's menu

No due date waits after Upcoming instead of in Today.

The Tasks list with a No due date group

Priority order: high first inside each group, still grouped by date.

The Tasks list ordered by priority

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. Put a note with these lines in the vault (use today's date for the first):

- [ ] Call the bank !med due:2026-10-23
- [ ] Renew passport !high due:2026-10-20
- [ ] Book museum tickets due:2026-11-04
- [ ] Read the manual
- [ ] Review contract !high due:2026-10-23
  1. No due date. Open Tasks (Cmd+Shift+P, "Open Tasks"): Read the manual sits under No due date after Upcoming. Before: it was in Today. Switch to Kanban: the Status board has a No due date column; drag Book museum tickets there and its due: is gone from the line.
  2. Choose a date. Right-click Call the bank and pick Choose a date…: a month calendar opens on its due date; click a day and the line's due: changes. With Vim mode on, select a task and press @ for the same calendar.
  3. Priority order. Set the Order menu above the list to Priority (or press s in Vim mode): Today reads Renew passport, Review contract, Call the bank. Press Shift+J: a message says reordering works in Note order. :order note brings the line order back, and tasks_list_order = "note" is under [view] in config.toml.
  4. Cloud conflicts. Needs two devices on one Cloud vault. Close the first and edit a note there by hand (say Daily Notes/Untitled.md). On the second, move that note to the trash, make a new note with the same name in the same folder, and trash that one too. Open the first again and let it sync: the new note lands in its trash on its own, and Review sync changes (Space r) asks only about the note you edited. Either choice goes through; with the other device's version, a file of this device already at its path moves to Untitled 2.md instead of refusing. Before: a second conflict claimed the edited file and refused both choices, and taking the other device's version on it could delete the edited note on both devices.

Distribution channels

Release validation

Don't miss a new zennotes release

NewReleases is sending notifications on new releases.