Skip to content

ZenNotes for Android 1.1.27

Choose a tag to compare

@adibhanna adibhanna released this 25 Sep 14:24
· 52 commits to main since this release

ZenNotes for Android 1.1.27 (versionCode 30): the shared ZenNotes core moves from 2.55.0 to 2.56.1, and a vault can go by a name of its own.

What changes on the phone

  • A vault can go by a name of its own (ZenNotes/zennotes#692). Rename Vault… in the command palette (the menu button, More, All commands…) or the Vault name field under Settings → Vault names the vault in the sidebar drawer's header and in the vault switcher; the folder keeps its name on disk, and an empty name goes back to it. The name lives in the vault's own .zennotes/vault.json, so a vault named on the desktop shows that name here, a folder vault named here shows it on the desktop, and a sync carries it along. On the phone this took a core fix and shell work: this shell's vault root is a label ("On this device › ZenNotes › docs"), so core 2.56.1 lets a host name the folder itself (ZenNotes/zennotes@f8b24c09) and the bridge hands over folderName, and the bridge resolves the display name from vault.json whenever it returns the open vault, so a named vault shows its name from the first launch instead of after the first settings save.
  • The vault switcher marks the open vault by its folder. The Vaults sheet compared folder names with the shown name, so a renamed vault lost its check mark and the manage view offered Delete and Rename for the vault that was open. It now compares folders; each row shows the name the vault goes by, and the manage view names the folder beside a display name that differs, so a rename or delete is understood to act on the folder.
  • A Markdown table converts into a database, linked from the note (ZenNotes/zennotes#832). With the cursor in a pipe table, Convert Table to Database… in the command palette writes a <Name>.base database with typed columns and leaves a [[Name]] link where the table stood, one undo away.
  • Settings search reaches every setting, and finds where new tasks go. Searching for tasks folder, tasks location or new task lands on Vault → Notes → Default tasks location, and the drawings and databases locations beside it and fourteen more settings are found too; every hit opens the tab its setting is on with the row highlighted.
  • Tasks added or moved from the calendar panel join the note's Tasks section (ZenNotes/zennotes#851) instead of the bottom of the note.
  • A code block inside a task stays under the task's text in Preview (ZenNotes/zennotes#849), and a done task strikes its words, not its code.
  • Undo after the open note changed on disk no longer saves a text nobody wrote (ZenNotes/zennotes#852). When a sync changes the open note, the editor starts a clean history from the text on disk.
  • Help reads as one page: a title, a search field and section links that stay pinned while you scroll.
  • In the core without a surface here: the template pickers' new shortcuts (ZenNotes/zennotes#847) are keyboard chords, and the palette's template entries are the phone's routes, unchanged.

Under the hood

Core packages: @zennotes/app-core 2.56.1-core.hc872c08b6872aec4, @zennotes/bridge-contract and @zennotes/shared-domain 2.56.1-boundaries.h3434125ac49b85c7, built with a clean tree from ZenNotes/zennotes f8b24c09 (the desktop's 2.56.0 release commit 2c3dd065 plus two test-only commits, one tooling commit and the core fix; core release core-2.56.1-core.hc872c08b6872aec4). Adopted with npm run core:adopt, which checks every archive's SHA-256 and SHA-512 against its provenance and that all three record that source commit; the boundary check passed without an override. The shell's own changes are folderName and describeCurrentVault in the bridge, display-name reads from vault.json in native-fs.ts, the Vaults sheet's current row by folder with display names on its rows, and one new test of the vault.json round trip. No dependency changes, no new permissions, no native code changes; android/app/build.gradle only moves the version.

Installing the APK

zennotes-1.1.27-universal.apk is the Google Play-signed universal APK for 1.1.27 (30), Android 7.0 and later, downloaded from Play Console's App bundle explorer and attached exactly as downloaded: 31,785,233 bytes, SHA-256 05573d34c3148ebc6c1c3e1b43421f1c98b325e24fb4c52d1c4bcaa47b4d7e62. aapt dump badging reads md.zennotes versionCode 30, versionName 1.1.27, sdkVersion 24, targetSdkVersion 36; apksigner verify --print-certs signer SHA-256 9f1af3a4b6b11156a6b1f49e1a54bcaecef480f18eab1692a3bd8f416af6ae50, the same certificate as every release since 1.1.22; no CHECK_LICENSE or pairip entries. Sideloaded installs do not self-update; use Obtainium. The same version rolls out on Google Play once approved.

Validation

Release branch release/1.1.27 (cfc1bc7 adopt core 2.56.1, 2f2d8f6 bump, 542e27f the Vaults sheet fix), merged as PR #85 by fast-forwarding main to 542e27f after CI passed (build and boundary job, and the emulator job's instrumentation tests on an API 35 emulator, which passed on one re-run after the runner's emulator failed before the app was installed; run 36140337102). On the release tree: package boundary check without an override, typecheck, 162 unit tests, production build, Capacitor sync and the signed release bundle (~/Desktop/zennotes-1.1.27-vc30.aab, 31,533,054 bytes, SHA-256 a5c53a77a9212983ce67a93e85021f85d5cf6361f7dfde228a98be23ec3af832, upload key unchanged). Submitted to Google Play production on September 25, 2026 at 09:15 CDT (14:15 UTC), 100% rollout, all targeted countries. The vault-name flow was driven on the iPhone shell's simulator with the same TypeScript; no local Android emulator pass this cycle; coverage is not physical-device certification.