ssd mascot: pleasing

Download & Install

Download & install

Android and Linux local builds are available now. Windows / macOS packages are produced by CI on demand; iOS uses backup import and has no standalone installer. Verify SHA-256 before installing.

v1.0.3 · 2026-10-16

Pick your platform

These files are from the local v1.0.3 build. Android packages are signed with a debug certificate and are suitable for local use; public distribution requires official signing. The AAB is store material.

AndroidAPK · arm64

arm64 APK

Contains only lib/arm64-v8a, so it is smaller. Fits most modern Android phones.

23,405,995 B · versionName 1.0.3 · versionCode 19

Download APK
sha256 8da051203129cc50e651fcc326f2c4be356f3c3ae4fc32477b02cf236f001a1b
AndroidAAB · store

App Bundle · AAB

Three-ABI store package for app-store distribution. Regular users should download an APK above.

67,059,984 B · applicationId xyz.erik.ssd

Download AAB
sha256 d6bf8a44d0b695e435e0490f5b9cac697b7caaeb81cd73fac72e657ae3905b57

Not included in this release: the standalone x86_64 APK and the Linux portable tar.gz. Build them from source if needed. Windows / macOS packages are produced by CI on demand and are not in the download section.

Integrity

Verify before installing

The download directory includes SHA256SUMS (download the checksum file). If verification fails, do not install; download again.

cd ~/Downloads
sha256sum -c SHA256SUMS
# Every file should print: OK
# Or check a single file
sha256sum ssd-1.0.3-all-abi.apk
# 14a5757b9c4d0a427490738868647bc112771a606d54462c6a142cf578a97d6e

Signing: the Linux release bundle also provides an SSHSIG signature for SHA256SUMS. Verify with:

ssh-keygen -Y verify -f allowed_signers \
  -I erik@erik.xyz -n erik-xyz-provenance \
  -s SHA256SUMS.sig < SHA256SUMS

Expected: Good "erik-xyz-provenance" signature. apt / dpkg do not verify per-package signatures by default; this package is not individually signed.

Android

Sideload the APK

Steps

  1. Download the universal APK or the arm64 APK.
  2. Allow installation from the source in system settings.
  3. Open the APK to install; an older version can be installed over.
  4. Open the app, plug in a USB drive / card reader, or choose “Recover from folder”.

Notes and boundaries

  • Package xyz.erik.ssd, targetSdk 36; only the framework-injected receiver permission, zero INTERNET.
  • Signed with the Android debug certificate: fine for local use, but public distribution requires official signing.
  • Android root block-device scanning is not connected; non-root source is not implemented. On Android 10+ (FBE), deleted content usually cannot be recovered.
  • The AAB is store material, not a sideload installer for regular users.
# Or install with adb
adb install -r ssd-1.0.3-all-abi.apk

Linux

All-in-one deb

Since v1.0.3 the deb contains both the desktop app and the engine. After installation, search for “ssd” in the app menu.

Install

sudo dpkg -i ssd_1.0.3_amd64.deb
# If dependencies are missing:
sudo apt -f install

Payload: /opt/ssd (GUI), /usr/libexec/ssd (daemon / writer / cli), polkit, udev, menu entry and icon.

Uninstall & state

sudo dpkg -r ssd

Trial ledger, license and preferences live in the user directory and survive uninstall / upgrade. Upgrades can be installed over the old version.

If the menu entry does not appear immediately, log out and back in, or run update-desktop-database. The deepin launcher searches by app name, so search “ssd”.

Build from source

Toolchain and commands

Rust stable (edition 2024, ≥ 1.97) + Flutter 3.47.5 stable (pinned in CI; other versions are not verified).

Desktop (Linux)

cargo build -p xd-daemon
bash scripts/build-deb.sh
# Or run the UI directly:
cd ui && flutter run -d linux

Android

cd ui
flutter build apk --release \
  --dart-define=SSD_VERSION=1.0.3
flutter build appbundle --release \
  --dart-define=SSD_VERSION=1.0.3

Windows / macOS

# CI: Actions → CI → Run workflow
# Check packaging=true
# Artifacts:
# ssd-v1.0.3-windows-x64.zip
# ssd-v1.0.3-macos-arm64.zip
# ssd-v1.0.3-macos-x64.zip

Unsigned packages: on Windows choose “More info → Run anyway”; on macOS 15+ use System Settings → Privacy & Security → Open Anyway.

Tests

cargo test --workspace
bash scripts/e2e.sh
cd ui && flutter test

See the repository README for the full test and e2e guide; unverified real-device paths follow the release notes.

Troubleshooting

Common install issues

Android says “not installed”

Uninstall an older build with the same package name first, or check that the source is allowed. The package has been xyz.erik.ssd since v0.7.0.

Linux menu does not show ssd

The deepin launcher searches by app name (Name=ssd). Search “ssd”. If it still does not appear, log out and back in.

macOS says the app is damaged

That is Gatekeeper for an unsigned build. Use System Settings → Privacy & Security → Open Anyway, or run xattr -dr com.apple.quarantine <app>.

Windows SmartScreen appears

The current package is unsigned. Choose “More info → Run anyway”. Signing / notarization credentials are not configured yet.

Engine not found

The desktop app resolves the engine in this order: explicit argument → XD_DAEMON_BIN → same directory → /usr/libexec/ssd/xd-daemon. A user-level zip needs a daemon next to the app.

Trial export is blocked

The desktop trial needs a first-run network time anchor. Before anchoring, trial export is unavailable. After anchoring: 7 days ∧ 3 export sessions ∧ 20 files / 1 GiB.

ssd mascot: smile

Installed. Next: scan.