Skip to content

Architecture Desktop Updates

Teofanis Papadopulos edited this page Jun 14, 2026 · 1 revision

Desktop updates

The app polls GitHub Releases for newer v* tags (ignores ext-v*). Stable channel = latest non-prerelease; beta = latest prerelease.

Same channel rules as the web site — packages/shared/src/releases.ts.

Flow

flowchart LR
  UI[About tab / startup toast] --> Check[CheckForUpdate]
  Check --> GH[GitHub Releases API]
  GH --> Pick[select by channel]
  Pick --> Cmp[semver compare]
  Cmp -->|newer| DL[DownloadUpdate]
  DL --> Install[InstallUpdate → quit app]
Loading

States

idlecheckingup_to_date | availabledownloadingready → install quits the app.

Errors land in updateInfo.error; user can retry from About.

Channels

Channel Picks
stable Newest v* release where prerelease: false
beta Newest v* release where prerelease: true

Toggle in About → saved in settings.

Install per OS

  • Windows — run downloaded installer or replace portable .exe
  • macOS — replace app in Applications
  • Linux AppImage — helper script copies new image after the app exits
  • Linux tarball — opens release page (manual)

Where in the code

File Role
internal/infra/updater/updater.go API, download, install
internal/app/app.go Wails surface
frontend/.../UpdateCard.tsx About UI
frontend/.../use-startup-update-check.tsx One check after launch

Cutting a release: Architecture-Releases-and-CI.

Clone this wiki locally