In-app updates (opt-in): signed feed, update bar, Windows/Android install #98

Open
opened 2026-10-07 23:33:35 +00:00 by robocub · 0 comments
Member

In-app updates for people who opt in (Settings › Check for updates), Discord-style: download in the background, then a bar at the bottom of the app — "Update installed, restart now?" — that can be clicked or dismissed. Most useful on Windows and Android, where there's no package manager doing it for us.

Phases

  1. Signed feed + update bar — feat/auto-update (not yet listed). The checker reads our own feed (update-feed branch, testing.json), signed with an Ed25519 key held as CI secret UPDATE_FEED_KEY; the app checks the signature against a public key compiled in. A newer release for this platform shows a bar with Download / Later (Download opens the release page). Builds are compared by source commit time, so every platform's build of one release counts as the same version, and a release without a Windows build doesn't hide the last one. Commet's checker (Commet's release data + Commet's Windows installer) is gone. Checks stay off until the public key is filled in.
  2. Windows: Velopack — per-user install (no admin prompt), background delta downloads, apply-and-restart behind the bar. Unsigned for now (no Microsoft identity verification), so the first install shows SmartScreen once; updates don't. Zip users reinstall once.
  3. Android: self-install (sideload builds only) — background APK download + PackageInstaller; silent from Android 12 once the app installed itself, one confirm tap the first time. Needs REQUEST_INSTALL_PACKAGES, so it must stay out of F-Droid/Play builds (separate flavor).
  4. Flatpak: "restart to apply" — Flathub forbids self-updaters; instead use the Flatpak portal's update monitor to show the same bar when a newer version was installed in the background. The single-file .flatpak tester bundle can't update itself; it gets the phase-1 Download bar.

Notes

  • One channel for now: testing. A stable channel later is a second feed file (stable.json) plus a build define picking the channel; nothing in the format changes.
  • A Flathub build must set its own BUILD_DETAIL (not flatpak), or it would check the testing feed.
  • Releases → feed: after publishing a tester release, dispatch publish-feed.yml on ref update-feed.
In-app updates for people who opt in (Settings › Check for updates), Discord-style: download in the background, then a bar at the bottom of the app — "Update installed, restart now?" — that can be clicked or dismissed. Most useful on Windows and Android, where there's no package manager doing it for us. ## Phases 1. **Signed feed + update bar** — `feat/auto-update` (not yet listed). The checker reads our own feed (`update-feed` branch, `testing.json`), signed with an Ed25519 key held as CI secret `UPDATE_FEED_KEY`; the app checks the signature against a public key compiled in. A newer release for this platform shows a bar with Download / Later (Download opens the release page). Builds are compared by source commit time, so every platform's build of one release counts as the same version, and a release without a Windows build doesn't hide the last one. Commet's checker (Commet's release data + Commet's Windows installer) is gone. Checks stay **off** until the public key is filled in. 2. **Windows: Velopack** — per-user install (no admin prompt), background delta downloads, apply-and-restart behind the bar. Unsigned for now (no Microsoft identity verification), so the *first* install shows SmartScreen once; updates don't. Zip users reinstall once. 3. **Android: self-install (sideload builds only)** — background APK download + `PackageInstaller`; silent from Android 12 once the app installed itself, one confirm tap the first time. Needs `REQUEST_INSTALL_PACKAGES`, so it must stay out of F-Droid/Play builds (separate flavor). 4. **Flatpak: "restart to apply"** — Flathub forbids self-updaters; instead use the Flatpak portal's update monitor to show the same bar when a newer version was installed in the background. The single-file `.flatpak` tester bundle can't update itself; it gets the phase-1 Download bar. ## Notes - One channel for now: **testing**. A stable channel later is a second feed file (`stable.json`) plus a build define picking the channel; nothing in the format changes. - A Flathub build must set its own `BUILD_DETAIL` (not `flatpak`), or it would check the testing feed. - Releases → feed: after publishing a tester release, dispatch `publish-feed.yml` on ref `update-feed`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nether/vommet#98
No description provided.