Skip to content

feat(desktop): auto-update via tauri-plugin-updater - #63

Merged
loss-and-quick merged 3 commits into
mainfrom
feat/desktop-updater
Jun 21, 2026
Merged

feat(desktop): auto-update via tauri-plugin-updater#63
loss-and-quick merged 3 commits into
mainfrom
feat/desktop-updater

Conversation

@loss-and-quick

Copy link
Copy Markdown
Owner

Summary

Desktop auto-update over tauri-plugin-updater, distributed through GitHub
releases (no separate update server).

App side

  • Register the updater plugin (desktop only) and configure it in tauri.conf.json:
    a releases/latest/download/latest.json endpoint, the minisign public key,
    passive Windows install, and createUpdaterArtifacts so the build emits signed
    update artifacts. updater:default added to the default capability.
  • Widen bundle targets to deb/appimage/nsis/msi — Tauri filters to the host's
    applicable types, which is what actually makes the Windows NSIS/MSI build
    (previously the Linux-only target list meant no Windows installer was produced).

Frontend

  • An About section in Settings shows the running version (app_version) and a
    check → download (with progress) → restart flow, wrapped in lib/updater.ts
    over @tauri-apps/plugin-updater + plugin-process. Gated by the Tauri-only
    check, so the Android WebUI (updated by the root manager) renders nothing.
  • New strings added across all 8 locales.

Release pipeline

  • The bundle build gets the minisign signing key, emitting a .sig per updatable
    artifact (distinct from the existing GPG AppImage signature).
  • Each matrix leg writes a per-platform manifest slice; a new updater-manifest
    job merges them into one latest.json and attaches it to the release. Asset
    URLs account for GitHub rewriting spaces in the AppImage name to dots.

Signing secrets (TAURI_SIGNING_PRIVATE_KEY / _PASSWORD) are already set on the
repo; the public key is committed in tauri.conf.json.

Affected layer

  • frontend/ — React Web UI
  • CI / .github/
  • Other: Rust desktop (src-tauri)

Verification

  • cargo build -p kasumi-desktop — tauri.conf + capabilities validate
  • cargo fmt --all --check; codegen — no drift in frontend/src/generated
  • bun run check (Biome), bun run test (64 vitest), bun run build
  • bun run check:i18n — 8 locales in sync (615 keys)
  • actionlint .github/workflows/release.yml

Notes for reviewers

End-to-end auto-update can only be confirmed by cutting two releases (vN detects
vN+1, verifies the signature against the bundled pubkey, installs, relaunches).
The Windows arm is unblocked now that NSIS builds. Supported install targets:
Linux AppImage + Windows NSIS; deb/portable users update manually.

Register tauri-plugin-updater on desktop and configure it: a GitHub-release
latest.json endpoint, the minisign pubkey, passive Windows install, and
createUpdaterArtifacts so `tauri build` emits the signed update artifacts.

Also widen bundle targets to deb/appimage/nsis/msi — Tauri filters to the host's
applicable types, so this is what actually makes the Windows NSIS/MSI installers
build (and produce the .sig the updater's Windows arm needs).
Add an About section showing the running version (via app_version) and a
check/download/restart flow over @tauri-apps/plugin-updater + plugin-process,
wrapped in lib/updater.ts. Gated by the Tauri-only check, so the Android WebUI
(updated by the root manager) renders nothing. Strings added across all locales.
Pass the minisign signing key to the bundle build so each updatable artifact
gets a .sig, then merge the per-platform slices into a single latest.json and
attach it to the release — the static endpoint the updater polls. Asset URLs
account for GitHub rewriting spaces in the AppImage name to dots.
@loss-and-quick
loss-and-quick merged commit 4fbd4f3 into main Jun 21, 2026
7 checks passed
@loss-and-quick
loss-and-quick deleted the feat/desktop-updater branch June 21, 2026 15:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant