Trust
Verify your download.
Anyone can publish a file. These are the commands that prove the one you downloaded is the one we built.
Why a checksum alone is not enough
A SHA-256 proves a file arrived intact. It does not prove who made it: whoever could replace an installer could replace the checksum list in the same action, and both would still match. So we sign the checksum list itself, and publish the key here rather than next to it.
Why the key is on this page
If verification fails
An opinion that is not ours
Who signed it, not just that it is intact
The minisign check above proves the manifest came from whoever holds our release key. It cannot tell you who that was. The Sigstore signature can, and it leaves a public record.
Recent releases also carry SHA256SUMS.sigstore.json, a single bundle produced
by keyless Sigstore signing that holds the signature, the certificate and the transparency
log entry together. The certificate binds the signature to a verified identity, and the
entry is recorded in Sigstore's public, append-only transparency log. So the fact that this
manifest was signed, by whom, and at what time, is something you can look up rather than
something we tell you. Coverage is not yet every release: the bundle is present from
v0.1.156 with the exception of v0.1.158, and is produced unconditionally from v0.1.160
onward. The minisign signature below is the one that covers more releases and needs nobody.
cosign verify-blob SHA256SUMS \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity [email protected] \
--certificate-oidc-issuer https://github.com/login/oauth
That identity is [email protected], via GitHub, and it is what the current
release's certificate carries. Be precise about what that means: the command above pins the
identity you are willing to accept, which is the right way to use it. Our signing tool does
not itself pin one, so if a certificate ever names a different identity or issuer, the
command fails and you should stop and tell us rather than relaxing the flags. Two
independent signatures over the same manifest is deliberate: minisign depends on nobody and
works offline, Sigstore proves the signer. Neither one replaces the other.
The Sparcle release signing key
Ed25519, via minisign
(brew install minisign, apt install minisign). This key signs
the checksum manifest of every Bolt release.
RWR074VTKBGzGWsQbnByhGrH9pQG5uHOJSgqL8rs5Zu4GQAxZ1C+JIzaIf this key ever changes we will say so here and explain why. A key that changes without explanation is a reason to stop and ask us.
Verifying, step by step
These commands work on the current release. Signing coverage is not uniform across our history and we would rather you knew where it stops: every release from v0.1.155 onward carries a signed manifest, and before that most but not all do, so on an older tag step 2 may have nothing to verify against.
1. Download the checksums and the signature
Both live on the release you downloaded from. SHA256SUMS lists a SHA-256 for every installer and CLI binary in that release; SHA256SUMS.minisig is our signature over that file.
curl -LO https://sparcle.app/releases/latest/SHA256SUMS
curl -LO https://sparcle.app/releases/latest/SHA256SUMS.minisig2. Check the signature against our key
This is the step that proves origin. If it fails, stop. The checksums themselves cannot be trusted, so verifying against them would be meaningless.
minisign -Vm SHA256SUMS -P 'RWR074VTKBGzGWsQbnByhGrH9pQG5uHOJSgqL8rs5Zu4GQAxZ1C+JIza'3. Check your download against the checksums
Only once the signature verifies. Substitute the name of the file you actually downloaded: the manifest names the version you fetched, so a filename copied from this page will match nothing. On macOS and Linux it prints the filename followed by OK.
grep ' <the file you downloaded>$' SHA256SUMS | shasum -a 256 -c
# or check every artifact you have in one pass
shasum -a 256 -c --ignore-missing SHA256SUMSIf you installed through a package manager
Homebrew, winget, Chocolatey and apt already check a SHA-256 for you before they run anything. You do not need the commands above, but it is worth knowing exactly what that check does and does not prove.
What your package manager checks
What it does not prove
Platform trust, and where it stands
Both platform signing paths are in place. Neither replaces the verification above, which works today and depends on no one else.
macOS Gatekeeper
Developer ID Application: Sparcle Inc. (4VSW7NBZ2S) and carry a
stapled notarization ticket. Check it yourself before installing:
spctl -a -vvv -t install against the downloaded .dmg reports
accepted and source=Notarized Developer ID. The installer tests for
a stapled ticket and leaves Gatekeeper's own provenance in place rather than stripping the
quarantine attribute, so the operating system's verdict on the file you downloaded stays
yours to read.
Windows SmartScreen
In-app updates
Something not verifying?
If a signature or checksum does not match, do not install it. Tell us and we will confirm what the current release should be.