Updates
What this does: explains how Helm Cues updates itself, which builds you are offered, and how to go one build back.
Nothing installs mid-show without a click. Cues checks on launch. Downloading and restarting are always up to you.
Check for an update
Section titled “Check for an update”- On launch: Cues checks once, quietly. No dialog, no toast.
- By hand: Helm Cues → Check for Updates… Settings opens on Updates and checks at once. Or press Check for updates there.
- An update is waiting: a dot on the Settings Updates tab, labelled
Update available.
Settings → Updates shows Current version and Last checked. Up to date: You're on the latest version.
Install an update
Section titled “Install an update”-
Settings → Updates. The card reads
Update available — <version>, with that build’s release notes. -
Download update. A progress bar shows
n%. -
The card reads
Update ready to install:Version 0.2.17 is staged. Restarting applies it — save your work first. -
Restart to install. Cues never restarts on its own.
Name the risk: with Live armed the card warns twice.
- Before download:
Live is armed. Downloading is safe, but hold the restart until the show is down. - Before restart:
Live is armed. Restarting will stop playback and close the show.
Download during the show if you must. Restart after it.
Channels: stable and beta
Section titled “Channels: stable and beta”| Channel | Offered |
|---|---|
| Stable | Released builds only |
| Beta | Pre-release builds as well as stable ones. The newer wins. “They have had less show time.” |
Settings → Updates → Update channel:
| Your licence | You see |
|---|---|
| A key with beta access | A Beta switch. On: beta. Off: stable. |
| A key without beta access | Beta or Stable, read-only. “Set on your licence by Helm.” |
| No key on this Mac | Stable. “Beta builds need a licence key with beta access.” |
- Changing the channel checks again at once.
- Switching back to stable never downgrades. Cues waits until a stable build is newer than the one you run.
- A perpetual licence is offered builds within its major version only.
What’s new
Section titled “What’s new”After an update installs, Settings → Updates shows What's new in <version> with that build’s release notes. The Updates tab carries a dot until you open it.
It shows once. Every build’s notes are also on What’s new.
Reinstall previous version
Section titled “Reinstall previous version”Goes one build back: the one you ran before the last update.
-
Settings → Updates → Previous version.
-
Reinstall previous version (0.2.15), with the build number you came from.
-
Read the confirm:
It downloads 0.2.15 again and replaces 0.2.16 when you restart. Shows saved by 0.2.16 may not open in 0.2.15.Confirm. -
The download is checked like any update.
-
Previous version ready to install. Restart to install.
| It does | It does not |
|---|---|
| Install the previous build’s exact file, checked like any update | Roll back shows, media or settings |
| Work once per update | Go more than one step back |
| Need the network | Work if that release is no longer offered |
- The button shows only when a previous build is recorded and nothing is downloading or staged.
- An app in
/Applicationsyou cannot write to asks for an administrator password. - Shows saved by the newer build stay as they are. Until 0.3.0 they still open in 0.2.12 and later. See Technical reference.
For maintainers: the release pipeline
Section titled “For maintainers: the release pipeline”Cues follows the same pipeline as Helm DJ. The differences are the signing key, the tag prefix and the product segment on the endpoint.
Never release without an explicit instruction.
Signing
Section titled “Signing”- Private key:
~/.tauri/helm-cues.key, empty password, never committed. Public key:products/cues/src-tauri/tauri.conf.json→plugins.updater.pubkey. - Name the risk: rotating the key strands every shipped build. It can no longer verify an update, and Reinstall previous version cannot reach a build signed with the old key. Rotate only if the private key leaks, and ship a fresh installer.
bundle.createUpdaterArtifactsmust staytrue. Without it the release ships DMGs only and the update endpoint has nothing to serve.
| Product | Tag | Example |
|---|---|---|
| Helm Cues | helm-cues-v<semver> | helm-cues-v0.2.16 |
| Helm DJ | v<semver> | v0.3.14 |
A beta build is a GitHub pre-release. A stable build is a normal release.
Endpoint
Section titled “Endpoint”https://helm.show/api/updates/helm-cues/{{target}}-{{arch}}/{{current_version}}website/src/lib/updates.tspicks the newest release on the caller’s channel from the last 20, and answers 204 when the caller is current.- The channel comes from the licence key the app sends. No key, or an unknown, revoked or expired one, gets stable.
?pin=x.y.zreturns exactly that release. Reinstall previous version uses it.- Downloads go through
/api/downloads/<asset_id>, so the GitHub token never reaches the app. - The app sends
X-Helm-Client-Key, compiled in fromproducts/cues/.env. Without it the endpoint answers 401 and the app never updates.
See Auto-update service.
Cut a release
Section titled “Cut a release”-
Every version file reads the release version and is committed:
tauri.conf.json,Cargo.toml,package.json. -
Write this release’s notes in
products/cues/RELEASE_NOTES.md. They become the GitHub release body and the in-app notes. -
Tag and push:
git tag -a helm-cues-v0.2.17 -m "Helm Cues v0.2.17", thengit push origin helm-cues-v0.2.17. -
The Release Helm Cues workflow builds arm64 and x64, signs the updater files, uploads them with
latest.json.
products/cues/scripts/release.sh <tag> is the local equivalent: it builds both architectures, notarizes, uploads and bumps to the next patch.
Verify
Section titled “Verify”curl -H "X-Helm-Client-Key: $HELM_CLIENT_KEY" \ https://helm.show/api/updates/helm-cues/darwin-aarch64/0.0.0 | jqExpect a manifest with the new version, a signature and a download URL. A 404 with no asset for platform means the .app.tar.gz names lack the darwin-aarch64 / darwin-x86_64 slug.
| Area | Path |
|---|---|
| Updater config | products/cues/src-tauri/tauri.conf.json (plugins.updater) |
| In-app update flow | products/cues/src-tauri/src/updates.rs, src/src/lib/integrations/updater.ts |
| Release workflow | .github/workflows/release-cues.yml |
| Local release script | products/cues/scripts/release.sh |
| Update service | website/src/lib/updates.ts, website/src/lib/update-channel.ts |