Skip to content

ZenNotes v2.81.1

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Nov 17:03
· 3 commits to main since this release

ZenNotes 2.81.1 fixes databases on touch screens and in narrow panes. 2.81.0 shows the controls that appear on hover all the time where nothing can hover, and in the Table that put a row's Open button over the end of a long name and squeezed the select column against the edge. Checking that fix found two older problems in a narrow pane, and they are fixed here too. It is a patch for 2.81.0, whose notes have everything 2.81 brings.

Released from daedf423 through #1042 on 2026-11-02. All installers are verified.

Fixes

  • The Table's Open no longer covers a long name on a touch screen. Before: the Open button that a mouse brings up over the right end of a row's name sat on every row, hiding the end of a long name ("Book the venue for the spring lau…"). After: a touch screen leaves it out, since the page icon left of the name already opens the page; with a mouse it still appears on hover. The web app on a phone or tablet had it, and so did the desktop app on a touch-first device such as a Surface in tablet mode.
  • The Table's select column keeps its width. Before: a long title made the Table wider than a phone's screen, and the select column, shown all the time on touch since 2.81.0, shrank from 40 px to 18 px with its box against the edge. After: it keeps 40 px.
  • A Table with a long name opens at its first column. Before: in a narrow pane, a first cell wider than the pane scrolled the Table 40 px as it opened, so the select column was off screen and "New row" read "ew row". After: it opens at the start and scrolls only when the cursor moves. This one is older than 2.81.
  • + Row and the header's menu stay on screen in a narrow pane. Before: under about 490 px the database header's tools ran past the pane's edge, and + Row and the … menu could not be reached. After: the tools wrap inside the pane. A wide pane still draws one line.

The phone apps get all four with this core: iPhone 1.36.0 in a new build, replacing the one waiting for review, and Android 1.1.53.

For contributors

  • zn-hover-only (17bd43d8): the counterpart of 2.81.0's zn-hover-reveal, for a hover shortcut to something already on screen. The no-hover block in styles/index.css sets it to display: none, so the control neither covers anything nor takes an unseen tap. The Table row's overlay Open is the only user so far.
  • The Table's select header and cells add min-w-10 beside w-10 (1f816456), since a table squeezes a column's width but not its minimum.
  • Tests (f11c3b81): lib/touch-hover-style.test.ts reads the no-hover block, and DatabaseTableView.test.ts checks the overlay Open, the page glyph and the select column. All three are red on 2.81.0.
  • Opening scroll (416fbb4a): the effect that scrolls the active cell into view compares row and column by value and skips an unchanged cursor, because the effect that keeps the cursor in bounds hands back a new object with the same numbers on every open. Its test is red without the fix.
  • Header tools (e69ea716): the group is max-w-full flex-wrap justify-end. Checked on the web app; no unit test, since jsdom lays nothing out.

Verification

How to test locally:

  1. Run the web app with npm run dev:web-stack and open it in Chrome.
  2. Open DevTools, turn on the device toolbar, pick a phone, and reload, so the page sees a touch screen that cannot hover.
  3. Make a database (:kanban, or New Kanban from a folder's menu), switch it to Table, and give a row a long name.
  4. Before: an Open button covers the end of every row's name, and the select boxes sit against the left edge. After: the name reads to its end, the select column stays 40 px wide, and the page icon left of the name opens the page.
  5. Still on the phone or a narrow window with the sidebar open: before, the Table opened 40 px scrolled (the select boxes off screen, "New row" reading "ew row") and + Row and … sat past the pane's edge. After, it opens at its first column and both buttons are on screen.
  6. Turn the device toolbar off, widen the window and reload: hovering a row with the mouse still shows Open, and the header's tools sit on one line.

Distribution channels

  • GitHub release: installers for macOS (Apple silicon and Intel DMG and zip), Windows (x64 and ARM64 installer and zip) and Linux (x64 and arm64 AppImage, deb, rpm, pacman, tar.gz), with five update manifests. Windows and Linux came from run 41486498938, macOS from run 41490682665, whose promote-latest marked it latest once the last feed was up.
  • AUR: zennotes-bin 2.81.1-1 (AUR clone d896443, repo 1ff36e54), pinned to ZenNotes-2.81.1-linux-x64.tar.gz SHA-256 da286ae9…768d after the bump script checked the bundled CLI folder.
  • Nix: packaging/nix/release-data.json from the update workflow (run 41490805804, bot PR #1044 closed) as d5417c81; nix-build passed on main (run 41491811627).
  • nixpkgs: NixOS/nixpkgs#579420 now proposes 2.74.0 -> 2.81.1 (903e776d), the source hash from the v2.81.1 tag tarball; still waiting for review.
  • Homebrew: zennotes 2.81.1 in the tap (b163ea9), mirrored in 03ef9c2b; DMG SHA-256 arm64 7018e6b4…, x64 bf7a8657….
  • Website: ZenNotes/website#105 merged at 87f41179 (the 2.81.1 entry and server 2.81.1); deployed by its own deploy job on Laravel Cloud, and the live check passed.
  • zn CLI: unchanged, 0.14.0 stays bundled.
  • Server: ZenNotes/znserver v2.81.1 (#64, README #65) pins web-2.81.1-web.h1357d855920329a8; Docker adibhanna/zennotes:2.81.1, 2.81, latest at sha256:bb1b79cb… (amd64, arm64).
  • Boundary packages: core-2.81.1-core.h4d33347386401068 and web-2.81.1-web.h1357d855920329a8, built from the tag's commit and published as pre-releases. The viewer stays at 2.81.0, since nothing a shared note draws changes.
  • Phones: iPhone 1.36.0 in a new build 56, replacing build 55 before Apple reviewed it, Waiting for Review; Android 1.1.53 (versionCode 56) in Play review, with its GitHub release carrying Play's universal APK. Both also tighten the header's tools on a phone, and Android's system Back now closes Filter and Columns.

Release validation

  • Local gates on the release commit, in a clean npm ci checkout: typecheck, every test suite uncached (shared-domain 2341, app-core 4699, desktop 1376, Quick Look 18), build:prod, the three smoke suites, npm run pack and the packaged launch check (page target, rendered, 2.81.1), hazard scan and dash lint; no failed CI since v2.81.0.
  • The fixes were checked before anything shipped: the web app from the branch and then the real server binary built with the exact web package, both under touch emulation at 700x900 and the first also with a mouse at 1424 px; the built desktop app with a mouse and with touch emulated (its window stops at 900 px, so the narrow case rests on the web checks); and both phones on this core, before it was published.
  • That first web check found the two narrow-pane bugs above, which is why they are in this release. The phone walks found that the wrapping tools left the … menu alone on a line, and that Android's Back left the database over Filter and Columns; both are fixed in the phone apps.
  • #1042: all ten checks green. CI on main passed on the release commit before the tag (run 41480080618, CodeQL included), after one re-run: Windows x64 timed out one test at 5 s, leaves no scratch file behind, on a runner whose disk was badly degraded. Disk-heavy test files ran 10 to 25 times slower than on the same commit's passing run (vault.test.ts 76.7 s against 4.4 s) while tests without disk work took the same time, and the save path's retries total under 0.4 s, so they cannot explain it. vault.ts is untouched in this release.
  • The release run needed two restarts, both GitHub's side and neither on our code. Its first attempt stopped at creating the release on an HTTP 500, before anything was built or pinned, and was re-run. Then the macOS job was cancelled before running a step ("not acquired by Runner"), during a macOS runner shortage GitHub had posted, and macOS was rebuilt alone by dispatch, leaving the other platforms' files untouched. "Latest" stayed on 2.81.0 throughout.
  • verify-installers.py: every file the five feeds name is present at its size; both DMGs are Notarized Developer ID and stapled, reporting 2.81.1; npm run verify:channels -- 2.81.1 reported every channel serving 2.81.1.