0–5 min: prove provenance
Pick the latest release and trace source revision, build job, artifact digest, signer, metadata and promotion decision.
Success checkOne release can be reconstructed end to end without guesswork.
Desktop release security checklist · Updated 2026-07-05
A practical release-security checklist for Tauri, Electron, Pake-style wrappers, and other desktop applications that ship signed installers and automatic updates across macOS and Windows.
Desktop auto-update turns a release pipeline into a privileged remote-code delivery system. A secure application can still fail catastrophically when signing keys are exposed, update metadata is mutable or unauthenticated, release automation is over-permissioned, staged rollout is missing, or the team cannot halt and roll back a bad update.
This checklist treats packaging, code signing, macOS notarization, Windows signing and time stamping, update metadata, artifact hosting, release promotion, telemetry, staged rollout, emergency halt, rollback, and compromised-release recovery as one control chain. The objective is to make every trusted release reproducible, attributable, stoppable, and recoverable.
RepoDaily verdict
Do not enable unattended desktop updates until the team can answer five questions with evidence: who can sign, what exact source revision produced the artifact, how clients authenticate update metadata and artifacts, how rollout is paused before broad impact, and how users recover after a bad or compromised release. Signing alone is not a release-security strategy; the complete chain needs protected identities, provenance, verification, staged promotion, monitoring, halt controls, rollback policy, and incident recovery.
| Release surface | Baseline rule | Failure signal | Evidence to keep |
|---|---|---|---|
| Source revision | Release from an immutable reviewed revision | Manual local build or moving branch reference | Commit/tag, review, build run identity |
| Build environment | Use controlled reproducible release workers | Developer laptop produces public artifacts | Runner identity, toolchain versions, build logs |
| Signing identity | Keep signer access narrow and auditable | Exported certificate shared in chat, drive, or broad CI secret scope | Signer owner, access policy, signing event log |
| macOS distribution | Sign with the correct identity and complete notarization workflow | Unsigned, ad hoc signed, or unnotarized public artifact | Signature verification and notarization result |
| Windows distribution | Use trusted code signing and time stamping as appropriate | Unsigned installer or signature that cannot survive certificate expiry | Signature verification and timestamp evidence |
| Update metadata | Authenticate version, URLs, hashes/signatures, platform and rollout data | Mutable JSON or feed can redirect clients to arbitrary binary | Published metadata snapshot and verification test |
| Artifact hosting | Use immutable release objects with restricted write access | Release file can be silently replaced in place | Object/version identifier, digest, access log |
| Promotion | Separate build from production promotion | One job both builds and instantly reaches every client | Approval record and promoted digest |
| Rollout | Start with internal/canary cohorts and explicit health gates | 100% rollout on publish | Cohort size, health metrics, promotion decision |
| Emergency halt | Have a tested way to stop new update adoption | Only option is deleting files or editing production manually | Halt runbook and exercise result |
| Rollback | Define supported downgrade or forward-fix policy | Old binary cannot read migrated data and no recovery path exists | Compatibility matrix and recovery test |
| Incident recovery | Plan signer revocation/rotation and trusted recovery release | Compromised signer leaves no alternate trust path | Rotation owner, revocation steps, recovery channel |
Score the updater pipeline before broad automatic rollout.
| Control | 0 points | 1 point | 2 points | Owner question |
|---|---|---|---|---|
| Release provenance | Unknown/manual | Build job recorded | Reviewed immutable revision + auditable build identity + artifact digest | Can we prove exactly what source produced this binary? |
| Signer protection | Shared/exported broadly | CI secret with broad access | Narrow protected signer with audited use and rotation plan | Who can produce a trusted binary? |
| Platform trust | Unsigned | Signed only | Signed, platform verification completed, notarization/time-stamp policy documented | Will the OS and users be able to verify this release later? |
| Metadata integrity | Mutable unauthenticated feed | HTTPS only | Cryptographic updater verification plus immutable artifact digest/provenance | Can feed compromise redirect clients to arbitrary code? |
| Rollout control | All users immediately | Manual partial rollout | Automated cohorts, gates, metrics, pause and promotion controls | How many users can a bad release reach first? |
| Halt control | Delete or hot-edit | Manual documented pause | Tested emergency halt with named owner and audit evidence | How fast can new adoption be stopped? |
| Rollback/recovery | Reinstall is the plan | Manual downgrade | Compatibility-tested rollback/forward-fix and data recovery path | What happens after a schema-changing bad release? |
| Compromise response | No plan | Rotate key manually | Revocation, rotation, alternate channel and recovery release rehearsed | How do we recover when the trust anchor is compromised? |
A fast release-gate exercise before enabling broad automatic updates.
Pick the latest release and trace source revision, build job, artifact digest, signer, metadata and promotion decision.
Success checkOne release can be reconstructed end to end without guesswork.
Modify an artifact or metadata fixture and verify the updater refuses it according to the runtime's trust model.
Success checkTampering fails closed and produces usable diagnostics.
List identities and jobs that can sign or publish stable update metadata.
Success checkSigner and stable-channel permissions are narrow, owned and auditable.
Promote a harmless test release to a small cohort, observe health, then pause further adoption.
Success checkThe team can halt rollout without deleting evidence or editing production ad hoc.
Test downgrade or forward-fix behavior with representative local data and configuration.
Success checkUsers can return to a supported state without silent data loss.
Walk through freeze, evidence preservation, restriction, rotation/revocation, notification and recovery release.
Success checkThe incident has named owners, alternate trust path and concrete first actions.
| Scenario | Required controls | Stop condition |
|---|---|---|
| Small Tauri desktop app | Updater signing key protection, signed updater artifacts, staged channel, rollback test | Updater key is stored with broad build credentials or rollback is untested |
| Electron app using autoUpdater | Signed app/installers, controlled update feed, platform-specific update testing, staged release | Feed changes can redirect every client without approval |
| macOS direct distribution | Developer ID signing, notarization, verification, immutable download artifact | Public artifact is unsigned, unnotarized, or replaceable in place |
| Windows direct download | Trusted signing, verification, time stamping policy, protected signer | Unsigned installer or uncontrolled signing certificate export |
| Pake-style internal wrapper | Pinned build source, signed installer, controlled target URL policy, managed update channel | Wrapper update and remote target can both change without review |
| Desktop app with local database migration | Forward/backward compatibility plan, backup/restore test, staged rollout | Schema migration makes rollback impossible and recovery is untested |
| Security hotfix | Fast lane still uses signer protection, provenance, verification, canary and halt control | Emergency process bypasses the trust chain |
| Suspected signing compromise | Freeze promotion, preserve evidence, restrict signer, rotate/revoke, alternate recovery channel | Team keeps publishing through the suspected trust path |
A stolen signing identity can convert malicious artifacts into trusted-looking releases. Protect signing authority more strongly than ordinary CI credentials.
Replacing a binary at the same URL after approval breaks provenance and makes incident reconstruction difficult.
An update feed that can point clients to arbitrary URLs without independent verification becomes a high-value control plane.
Publishing directly to all clients removes the opportunity to detect crashes, migration failures, update loops, or platform-specific regressions.
Binary rollback is meaningless when a new version irreversibly changes local databases, config, plugins, or caches.
Security hotfixes are dangerous when teams skip signing controls, provenance, verification, or canary rollout under time pressure.
Poor certificate lifecycle and time-stamp practices can make legitimate historical releases difficult to validate.
A compromised updater channel is much harder to recover from when every communication and recovery artifact depends on the same trust anchor.
Create platform artifacts once, identify them by digest, then promote the exact same bytes through internal, canary and stable channels.
Let normal CI build and test while a narrower protected step or service performs signing after policy checks.
Record source revision, artifact digest, version, platform, signer, build identity, update metadata revision, rollout cohort and rollback target.
Block promotion unless install success, launch success, crash rate, update completion and key workflow checks remain within thresholds.
Pause new adoption by channel or promotion control instead of deleting release artifacts needed for investigation.
Classify each local data/config migration as reversible, backward-compatible, backup-required, or forward-fix-only before release.
Practice restriction, revocation/rotation, alternate signing path, trusted notification and recovery release before an incident.
Short answers for teams operating desktop update channels.
No. Signing authenticates artifacts, but teams also need protected signing authority, release provenance, authenticated update metadata, immutable artifact handling, staged rollout, halt controls, rollback policy and compromise recovery.
Desktop releases can fail by OS version, architecture, installer path, local database state, antivirus interaction or runtime-specific behavior. A canary cohort limits blast radius while producing real health evidence.
Avoid it. Publish a new immutable artifact and versioned metadata so review, rollback and incident reconstruction remain trustworthy.
Local databases, configuration migrations, plugins, caches, credentials, local services and protocol compatibility may all determine whether rollback is actually safe.
Use an accelerated but still controlled path: immutable source, provenance, protected signing, verification, small canary, active monitoring, halt control and recovery plan.
Assume the signing or update-channel credential is stolen and prove the team can freeze promotion, preserve evidence, restrict trust, rotate or revoke, notify users and ship a trusted recovery release.
Feedback
Anonymous feedback helps RepoDaily improve what is actually useful.