How to confirm that a released binary matches the source code.
For release integrity policy and immutable tag checks, see RELEASE_INTEGRITY.md.
Every GitHub release includes a SHA256SUMS.txt file listing the SHA-256 hash of each artifact.
After downloading a release binary:
# macOS / Linux
sha256sum SafeLens_0.4.0_aarch64.dmg
# Compare the output against the corresponding line in SHA256SUMS.txt
# Windows (PowerShell)
Get-FileHash SafeLens_0.4.0_x64-setup.exe -Algorithm SHA256To reproduce a release build locally and compare against the published artifact:
- Bash 3.2+ (ships with macOS; Linux distros typically include 4.x+)
- Bun v1.3.9+
- Rust 1.93.1 (match the exact toolchain used in CI)
- Platform-specific dependencies:
- Linux:
libwebkit2gtk-4.1-dev librsvg2-dev patchelf libssl-dev - macOS: Xcode Command Line Tools
- Windows: Visual Studio Build Tools (C++ workload), WebView2
- Linux:
# 1. Clone at the release tag
git clone https://github.com/Th0rgal/SafeLens.git
cd SafeLens
git checkout v0.4.0 # replace with the release tag
# 2. Install dependencies
bun install --frozen-lockfile
# 3. Run the full CI check (optional but recommended)
bun run verify:ci
# 4. Build the desktop app
bun run build:tauriBuild artifacts appear in apps/desktop/src-tauri/target/release/bundle/.
| Platform | Bundle location |
|---|---|
| macOS | target/release/bundle/dmg/SafeLens_*.dmg |
| Windows | target/release/bundle/msi/SafeLens_*.msi |
| Linux | target/release/bundle/deb/safe-lens_*.deb, target/release/bundle/appimage/safe-lens_*.AppImage |
Release builds run in GitHub Actions (release.yml):
- verify-ci: Full lint + type-check + test + Rust checks
- build: Matrix build on macOS (ARM64), Windows (x64), Linux (x64) using
tauri-apps/tauri-action - release: Collects artifacts, generates
SHA256SUMS.txt, creates a draft GitHub release
All CI runners use the same pinned toolchain versions (Bun 1.3.9, Rust 1.93.1) and --frozen-lockfile to ensure deterministic dependency resolution.
Before trusting a release artifact, verify the release tag points to the expected commit:
git fetch --tags origin
git rev-list -n 1 v0.4.0
git rev-parse origin/mainThen verify the published artifact checksum against SHA256SUMS.txt.
Tauri/Rust builds are not yet fully bit-for-bit reproducible across environments due to:
- Code signing: macOS and Windows builds may include platform-specific signatures
- Timestamps: Some build tools embed timestamps in binaries
- System libraries: Linked system libraries (WebKit, OpenSSL) differ across OS versions
The SHA256SUMS.txt file in each release is the canonical reference. If local hashes differ, investigate code signing, timestamps, and system library differences before drawing conclusions.
If you suspect a mismatch that cannot be explained by the above factors, report it via the security policy.