Code-signing roadmap
Hyveon's v1 packaged builds are unsigned (see Install for what that means for end users right now). This page records the path to signed releases for whoever picks this up next — the cost, the ownership decision, the config changes required, and what changes once signing lands.
Why this isn't done yet
Signing costs money and requires an account tied to a person or organization, which is a maintainer/ownership decision this project hasn't made yet — not a technical blocker. The wiring below is what's needed once that decision is made.
macOS: Apple Developer Program + notarization
- Cost: Apple Developer Program membership, ~$99/year, tied to an Apple ID (personal or organization).
- What it unlocks: a Developer ID Application certificate, used to sign
the
.appbundle, plus notarization (Apple's automated malware scan) so Gatekeeper shows no warning at all rather than the current right-click workaround. - electron-builder config changes (
electron-builder.yml):- Set
mac.hardenedRuntime: true— currentlyfalse(see below). - Add
mac.notarize(or rely on electron-builder's automatic notarization whenCSC_LINK/CSC_KEY_PASSWORDand Apple ID credentials are present in the signing environment). - Supply the exported
.p12certificate and an app-specific Apple ID password (or API key) as CI secrets — never commit them.
- Set
Why hardenedRuntime: false today
electron-builder.yml's mac.hardenedRuntime: false is intentional and
must stay false until a real signing identity exists. The hardened
runtime enforces entitlements that only make sense for a properly signed and
notarized app — enabling it without a valid Developer ID certificate produces
a build that's neither hardened-runtime-compliant nor notarizable, and is
strictly worse than the current honestly-unsigned build. Flip this only in
the same change that adds the real signing certificate and notarization
config.
Windows: Azure Trusted Signing
- Cost: ~$10/month for an Azure Trusted Signing subscription (replaces the old EV code-signing-certificate model, which required a hardware token and cost hundreds of dollars per year).
- What it unlocks: SmartScreen reputation builds up faster with a trusted signing identity, and eventually the "Windows protected your PC" warning stops appearing for the NSIS installer.
- electron-builder config changes:
- Configure
win.azureSignOptions(or the equivalent CLI/env-based signing hook electron-builder documents for Azure Trusted Signing) pointing at the Azure subscription's endpoint, certificate profile, and account name. - Store the Azure credentials (tenant ID, client ID/secret, or federated identity for GitHub Actions) as CI secrets.
- Configure
Linux (AppImage)
AppImages don't have an OS-level signing/notarization gate the way macOS and
Windows do — chmod +x is the only friction today (see
Install), and that stays true regardless of the macOS/Windows
signing work above. No roadmap item needed here.
Enabling auto-update once signing lands
electron-updater is already wired (see the auto-update-scaffold
capability) but stays disabled by default via the enableAutoUpdate
electron-store flag, specifically because an unsigned updater would fail
Gatekeeper checks on macOS regardless of what the update feed says. Once
signing is in place:
- Confirm the release feed is actually reachable:
.github/workflows/package.yml'spackagejob uploads each platform'slatest*.ymlmanifest (latest.ymlfor Windows,latest-mac.ymlfor macOS,latest-linux.ymlfor Linux) alongside the installer, and the macOS build produces aziptarget in addition to thedmg—electron-updater'sMacUpdateronly ever looks for azipasset in the release feed and explicitly ignores dmg/pkg, so without it macOS auto-update can never resolve an update no matter how correct the signing is. - Flip the
enableAutoUpdatedefault totrue(or add a Settings-page toggle — out of scope for this change) so new installs pick up updates automatically. - Windows and Linux builds can be flag-on tested as soon as their respective signing is done, independently of macOS — only the macOS path is Gatekeeper-blocked pending Apple Developer enrollment.
- Re-verify the "first launch, flag off, zero network calls" behavior still holds for anyone who explicitly opts back out.
Current blockers
- No Apple Developer account has been provisioned for this project.
- No Azure Trusted Signing subscription has been provisioned for this project.
- Both require a maintainer/ownership decision (whose name/org the certificate is issued to, who holds the renewal billing) before any config work above can start.