FUTO Notes
v1.8.0

FUTO Notes 1.8.0

Find in note, the whole interface in Simplified Chinese, and a feedback box you can reach without leaving the app.

Been a while! Let’s talk 1.8.0.

Find in note - you can now search within a note. Localization - added language support for simplified Chinese. More languages coming soon. In-app feedback - you can now leave feedback directly from the app, in settings.

Also a lot of bug fixes and polish.

Find in note

Searching within the open note, as opposed to the search that finds notes across your vault.

  • Ctrl/Cmd+F on desktop opens a find bar along the bottom of the editor. On iOS and Android it’s “Find in note” in the editor’s overflow menu, so you can reach it with the keyboard down
  • A live match count — “3 of 17” — with next and previous, and stepping wraps around
  • Matching is case-insensitive and literal: cat finds concatenate
  • Find runs over the markdown, not the rendered text, so a match hidden inside a link URL, a wikilink’s brackets or a heading’s # still counts — and stepping to it reveals that line’s syntax so you can see where you landed
  • Matches inside a rendered table are reachable the same way
  • The bars are native on each platform — SwiftUI on iOS, Compose on Android — over one shared engine, so the count and the stepping behave identically everywhere
  • The current match stays clear of the bar itself instead of hiding underneath it

Send feedback from inside the app

Settings → Send feedback. It replaces the old “Report an issue” link out to GitHub.

  • A message and up to three screenshots
  • It sends only the app version, platform, OS version, device model and what you typed. No route, no session id, nothing derived from your vault — your notes root contains your username, so none of it goes
  • It works whether or not “Share crash reports” is on. Pressing Send is the consent

Fixed: notes in folders never arrived on Windows

A note created inside a folder on any other device never reached a Windows client — the pull would fail on that note every cycle and stay stuck behind it, so the failures piled up and never drained. A fresh Windows install of a vault with folders got none of its foldered notes at all.

The cause was the non-Unix filesystem path answering “that parent folder isn’t there” with an error instead of a plain no, even though the write right after it creates the folder anyway. This shipped in 1.6.1 and is fixed now.

Mobile

  • New note and New folder are separate controls. On Android, New folder is a top-bar action and the New-note button goes back to being one plain button
  • Rejecting a folder name now tells you which character it objected to
  • Android takes the keyboard down when you close find

Desktop

  • Linux reads the system light/dark preference from the desktop portal instead of guessing from the page, and understands every spelling of it
  • Reading that preference no longer blocks the interface — a KDE theme flip fires several portal signals at once, and each one used to stall the UI for a D-Bus round trip
  • Pinning a theme no longer fights the system preference in a loop
  • No grabbing-hand cursor on a pressed sidebar row
  • Save failures during navigation are reported instead of swallowed, and your buffer comes back

Editor

  • A table scrolled off-screen and back came back as a blank band. It rebuilds properly now (github#41)
  • Clicking the spacing just above or below a table no longer flips the table to its source
  • Emptying the find query clears every highlight it left behind

Search speed

Reconciling the index against your vault got faster at every size, and an unchanged vault now costs almost nothing:

  • At 10,000 notes, a full rescan went from 12.1ms to 9.9ms and warm startup from 12.2ms to 10.8ms
  • A 5,000-note rescan with nothing changed took 19.6ms and rewrote the index metadata. It now does neither — no pending changes means no commit

iOS

  • Leaving an open note could abort the app — tapping back or edge-swiping out of a note you’d already opened once that launch. Fixed
  • The shipped Rust core is built with optimizations on. It never was: every release carried an unoptimized build with debug assertions. The stripped app binary went from 21.1 MB to 11.8 MB
  • Thousands are grouped in localized numbers
  • The find field doesn’t autocapitalize or autocorrect your query

Android

  • Release builds no longer turn on WebView remote debugging. It was on unconditionally, which meant a shipped install exposed the editor to chrome://inspect from any adb host you’d previously authorized — and through the editor bridge, to every note. The Android default is off; it is off now
  • The Settings language dropdown closes on click instead of reopening when you let go

Everywhere

  • A missing vault folder says so instead of blaming the download
  • Toasts hold for five seconds instead of three
  • Dependency updates across CodeMirror, Svelte and Tailwind

Sync server

If you self-host, the sync server was rewritten in Go and now uses SQLite by default instead of Postgres — one container, one data directory, and the one-line installer sets it up. Docker images are published for amd64 and arm64.

Existing Postgres installs need a migration; the server repository has a script and instructions for it. The encryption is unchanged — the server still stores only sealed blobs it cannot open.