Repository navigation
ZenNotes for Android 1.1.50: a folder Gallery, database views, and the keyboard down when you read
LatestVersion 1.1.50, versionCode 53, October 29, 2026, following 1.1.49 (52). PR #142 carries ff0c2f9; the signed bundle zennotes-1.1.50-vc53.aab (40,043,617 bytes, SHA-256 db6a2a47a1e247695f84fa5ebf5368b97cc18fd57582df9add009abab3820592) was built from that commit, whose tree 59dd6b7 equals that of tag v1.1.50 (96d967a, the merge of #142).
What changes on the phone
- Notes open to read. A note you open from Home, a list, the drawer, a link, a search pick, Back or a command palette command that goes to a note shows its first line rendered with the keyboard down; tap the text when you want to type. Backing out of the palette, or running a toggle from it, leaves the keyboard down too.
- A switch for the status bar (asked for on Discord by Piotr). Settings, Appearance, Chrome, Status bar hides the ZenNotes Cloud strip under a note; it comes back on its own while Cloud needs you. Toggle Status Bar in the command palette does the same.
- A cover's frontmatter folds to one line. In Edit mode a cover's
bannerlines fold into one muted line such ascover · harbor.jpg, since the cover above already shows the picture. Tap it to edit the raw lines; it folds again when you leave. - A blank Quick Note prefix gives a bare timestamp (ZenNotes/zennotes#1008, thanks to davi-jorge-art). Clearing the prefix in Settings, Editor names new quick notes by the timestamp alone, and the empty field reads "No prefix".
- The Tasks filter finds a task note by a tag in its body (ZenNotes/zennotes#1008). A task made with the circle's Task button now matches a tag you write anywhere in its note, in the list, the calendar and the board.
- Self-hosted servers with your own certificate authority (#141, thanks to @lewxdev). A server whose HTTPS certificate comes from a certificate authority you installed under Settings, Security, Encryption & credentials now connects, as it does in a browser on the same phone. ZenNotes Cloud keeps trusting only the system's authorities. When a server cannot be reached, the message no longer points at the iPhone's Local Network setting; for an https server it says where to install a certificate.
- The keyboard stays down when you come back to a note you were reading. Leaving the app and returning raised the keyboard over the note, and so did switching Settings, Appearance, Layout; now it stays down until you tap the text. If you were typing, the keyboard comes back as before.
- A folder opens as a Gallery (asked for by charles). Open Folder Gallery in the command palette shows a folder's notes as cards by their cover, two to a row, sorted by when they changed, when they were made or by title, with the folder's subfolders if you like. A tap on a card opens its note to read.
- Databases keep their own columns and picked rows. Columns chooses which fields a table view shows; tick rows and Show only these to keep a view to those rows; the + beside the views makes a new table view or a copy of this one.
- Code blocks pick their language. Tap a code block's label to choose its language from a list you can filter; a block with no language shows its guess, such as "python · detected" (ZenNotes/zennotes#1014).
- Callouts from the palette. Set Callout Type… turns the paragraph under the caret into a callout or changes its type, and Remove Callout turns it back (ZenNotes/zennotes#1016).
- Typing in a new note goes under its title, from the name field's Return and from New Note in the palette, and picking a theme in the palette leaves the keyboard down. Indenting an empty task with a hardware keyboard (Enter or Vim's
o, then Tab) now types after its checkbox (ZenNotes/zennotes#1012). - The theme list and a database's selection bar fit the phone. Picking a theme from the palette showed its "Theme preview" caption under Cancel on a narrower phone; it now wraps beside a one-line Back. Ticking rows in a database table lost Clear off the right edge on a 360 dp phone; the count now sits on its own line with Show only these, Delete and Clear under it.
- Settings keeps desktop sections out of sight. MCP, CLI and Keymap came back in the section list after typing in the Settings search and clearing it, and the search listed settings of pages the phone hides (Vim, Quick capture and others), which opened a page without them. Both stay hidden now.
- The command palette never runs a hidden command. When the top result was a command the phone hides (Zoom In, Split Right and the like), the highlight stayed on it out of sight and the keyboard's Return ran it. The highlight now stays on a row you can see, and Return with no visible row does nothing.
Under the hood
Core core-2.79.0-core.h7896a01910a2ea0f was built by CI from ZenNotes/zennotes 47d26827, the core 2.79.0 ships with; core:adopt checked SHA-256, SHA-512, packed versions and clean-source provenance. It replaced the earlier 2.79.0 drafts (h04cf920466765284 from 584487ff, h434377c05a50e117 from 44954fab, h747103b57a975077 from cefd86d9) as the release gathered the Covers description, the #1012 editor fix, the folder Gallery, database columns and picked rows, callouts, the code block language picker, and the theme pick and new note fixes from the phone walks. The editor host answers openNotesToRead with isPhoneViewport, so the phone layout reads and a tablet in the desktop layout keeps core's focus. The bridge contract adds six optional Unsplash methods this shell leaves out (no Unsplash tab on Android), the portable keys commandKeymaps, showStatusBar and timelineRange, and vault.json's sharesLocation, which the shell's settings normalizer passes through.
Palette: Toggle Timeline is hidden in the phone layout (its full-screen sheet opens a tapped task's note behind it with the keyboard up); Add Cover from Unsplash and Set Unsplash Access Key are named in the device-wide list, though core already hides them here. The shell's hidden rows never take the highlight or Return (palette-hidden-rows.ts, the same file as the iPhone's). The drawer's note, database and file rows and both Backs (the header chevron and the system Back) open through the read-open hold (drawer-open.ts, goBackToRead). Settings hides its MCP, CLI and Keymap rows on every rebuild of the section list, and its search results for hidden sub-tabs and rows, by section and title (settings-sections.ts). Core's focus heal on returning to the app is held off over a note being read (focus-heal.ts), and the restore landing holds the keyboard until the restored note is on screen (landing-hold.ts), since closing the restored sidebar hands core's focus to the editor. Boot bounds every native call it can do without at two seconds and drops a late answer whole (boot-wait.ts, boot-preferences.ts), after a stalled Preferences call left a blank page following rapid Layout reloads. Gallery cards open to read and the Gallery's wrapping header keeps its own height on a phone; the database Columns menu does not raise the keyboard as it opens (a tap into its find field still does), and a Callout type pick leaves it down. In the palette's theme list the Back row ends before the phone's Cancel, its caption wraps and "‹ Back" stays on one line (the same rules as the iPhone's); a database's selection bar puts the count on a line of its own and the actions under it, so Clear stays on screen. The System bars choice reads "No top bar", next to core's Status bar switch, and a search whose every match is hidden shows core's "No settings match your search."
Source: branch release/1.1.50 from main ea6720b: d312d77 (merge of #141, 9e8ce7c by @lewxdev), 5881249 (Cloud keeps system trust), 3720c84 and 9d4d0e6 (the connect-error message and its test), c4705ac (core 2.79.0 and read mode), 4d75483 (palette hide list), eb832d5 (1.1.50, versionCode 53), caeef0b (drawer rows), 66880a8 (hidden palette rows), c75ccd9 (Back), 875604e (merge of main at a322253, no content change), 5b21a31 (core 2.79.0 refreshed from 44954fab), 4cc775b (Settings sections), 9d3f3b1 (coming back to a note), e827b23 (Settings search), 3277415 (the restore landing), df15455 (boot timeout), 4338491 (search empty state), d20de53 (System bars wording), 9b7f815 (landing hold until on screen), 4292bd8 (core refresh for #1012), 15b1101 (no-matches box spacing), 558a433 (the final core 2.79.0), c04c33b (Gallery read-open and header), 67241fd (Columns menu and callout pick), 1386702 (the theme list's Back row) and ff0c2f9 (the database selection bar).
Validation
boundaries:check,npm run typecheck, 439 JavaScript tests,npm run buildandnpx cap sync androidpassed on core 2.79.0; GradletestDebugUnitTest,lintDebugandassembleDebugpassed;bundleReleasewas signed with the upload key on JDK 21, and the bundle readsmd.zennotes53 / 1.1.50, min 24, target 36, with the same three permissions as 1.1.49.- CI on #142: the build job (TypeScript, package boundary, Android build with lint) and the emulator launch job passed on
ff0c2f9(run40940416533), first attempt. - The release build was walked on an Android 17 emulator (WebView 145) before anything went to Play, recording these clips: notes opening to read from Home, a link, the drawer, a search pick and the palette's Go Back; the palette's Cancel, the system Back and two toggles leaving the keyboard down; the Status bar switch and Toggle Status Bar; the cover fold; a blank Quick Note prefix;
#errandsin a task note's body found by the Tasks filter; the connection message for an http and an https server that is down; the palette with hidden rows; the Covers section in Settings, Typography; and the Settings section list after a search is cleared. The first walk found the hidden-row Return, the second the Settings rows that came back after a cleared search; each was fixed and walked again, and the whole walk was repeated on the refreshed core. A third pass on3277415covered the Layout switch both ways, a return to the app while reading and while typing, a cold launch restoring a note, Settings search for key, vim, quick capture, keymap and mcp (and a sweep of 95 results over 37 queries, none opening a hidden page), and a read-open recheck. The final walk on the shipping core covered two cold launches, a resume, sixteen rapid Layout reloads (none blank, the keyboard down after each), a cold launch keeping the theme, Vim and Layout as set, the System bars wording and Settings search, read-open and Home-then-back, a 2,109-note vault (the scan landing with the keyboard down for 45 seconds), an indented empty task typed with a hardware keyboard, a theme pick, new note typing from the circle, the drawer and the palette, the folder Gallery, database Columns, picked rows and views, the code block language picker by touch, and callouts from the palette. It found the Gallery card, Gallery header, Columns menu and callout pick issues above, each fixed and walked again. A last pass onff0c2f9walked the palette's theme list at 411 dp and 360 dp (the caption clear of Cancel, Back on one line, a theme picked each time with the keyboard down) and a database's selection bar at 411, 390 and 360 dp with two and four rows ticked, Clear on screen and working each time, and the picks editor's bar at 360 dp.
Play Console submission
1.1.49 (52) is live. Production, Create new release: the AAB, processed as 53 (1.1.50), API 24+ and target 36, no devices lost or added (12,536 phones, 6,821 tablets), 39.2 MB for new installs (+110 KB on 1.1.49) and 10.6 MB for updates, one warning (no deobfuscation file; the app is not obfuscated). Release notes inside <en-US> tags, rollout 100%, saved, and sent for review on October 29, 2026; Publishing overview reads Changes in review. Managed publishing is off, so Google publishes it on approval.
This release carries Play's signed universal APK from App bundle explorer as zennotes-1.1.50-universal.apk: 40,309,883 bytes, SHA-256 b94317550072d3ca4990d58fe2cb98f71f96927631e56927eae157b10cf5d459, md.zennotes 53 / 1.1.50, min 24 / target 36, signer 9f1af3a4… as since 1.1.22, the same three permissions as 1.1.49, no CHECK_LICENSE or pairip.
How to test locally
npm ci && npm run build && npx cap sync android, then openandroid/in Android Studio and run on a device or emulator.- Open a note from Home's Recent list, from Browse, and from Search: each opens with the keyboard down and the
# Titleline rendered; tap into the text and the keyboard comes up. Before: Search and the palette left the keyboard up over the note. - Open the command palette (the circle, More, All commands), then Cancel: the keyboard goes down. Run Disable Word Wrap from it: the lines stop wrapping and the keyboard stays down.
- In the palette type
zoomand press the keyboard's Return: nothing runs and the palette stays open, since all three Zoom rows are hidden on a phone. Typetimelineand press Return: Close Right Panel runs, and the Timeline does not open. Before: Return ran the hidden row at the top of the results. - Settings, Appearance, Chrome, turn Status bar off: the ZenNotes Cloud strip under the note goes away.
- Open a note with a
banner:cover in its frontmatter: the frontmatter readscover · <file>; tap it and the raw lines open. - Settings, Editor, clear Quick Note prefix, then the circle's Quick: the new note's title is just the timestamp.
- Make a task with the circle's Task, add
#errandsto its note's body, then filter Tasks by#errands: the task is listed. - Add a remote vault at
https://<a host that is down>: the message says where to install a certificate authority and no longer mentions Local Network. - Open Settings, type
keyin its search, then clear it: the section list still has no MCP, CLI or Keymap. Before: all three came back. - Open a note from Browse, press Home, then come back: the keyboard stays down. Tap into the text, press Home, come back: the keyboard is back. Before: it came up both times.
- Settings, Appearance, Layout: Desktop, then Automatic again: the note comes back with the keyboard down.
- Settings, search
key: no Vim or Quick capture settings are listed. - Open a note in a folder, then Open Folder Gallery from the palette: the cards come two to a row under the Sort and Include subfolders controls; tap one and its note opens with the keyboard down.
- New Database from the palette, then Columns: the picker opens with the keyboard down; tap its find field to type.
- In a note, put the caret on a paragraph, dismiss the keyboard, run Set Callout Type… and pick Tip: the paragraph becomes a Tip callout and the keyboard stays down.
- Tap a code block's language label: the picker opens; pick a language and the fence takes it.
- On a narrow phone (or
adb shell wm size 945x2400), the palette, Themes…: the "Theme preview" caption wraps before Cancel and "‹ Back" stays on one line. Before: the caption ran under Cancel. - On the same width, tick four rows in a database table: the bar reads "4 selected" on its own line, with Show only these in this view, Delete and Clear under it; Clear unticks them. Before: Clear was past the right edge.