Read-only by construction
BlockDevice exposes no write method. Write capability lives only in the separate xd-writer binary, pinned by two structural gates: the write-surface manifest and the binary symbol table.
Cross-platform recovery · Flutter + Rust
Deleted photos, formatted USB drives, videos on a camera card — ssd scans, previews and recovers them. The source is opened read-only; not a single byte is written back.
Android and Linux builds are available now; Windows / macOS are packaged by CI on demand.
Why ssd
Read-only is not a slogan. From the type system to the export worker, every layer exists to keep writes away from the source device.
BlockDevice exposes no write method. Write capability lives only in the separate xd-writer binary, pinned by two structural gates: the write-surface manifest and the binary symbol table.
The engine makes zero outbound connections. The client has exactly three network touchpoints: update check, first-run trial time anchor, and activation time check. All are explainable and carry no machine identifier.
Every result carries a quality grade: complete, possibly damaged, or carved-only. If the data is incomplete, the app says so instead of calling a guess a successful recovery.
FAT, exFAT, NTFS, ext4, f2fs and APFS cover USB drives, camera cards, external disks and desktop drives. APFS also supports snapshot recovery.
Exports run in a separate dropped-privilege worker with three destination checks: different device, no overwrite, free space. It never writes back to the source and never deletes an existing file in the destination.
Disk images, a sector editor, batch jobs and xd-cli. The write path follows the same two-phase commit and audit discipline as the GUI — no back door from the command line.
Workflow
A device, a folder, or an iOS backup can all be a source. Every step can be paused, cancelled, or stopped to preview first.
Plug in a USB drive or camera card, choose any folder, or import an iTunes / Finder local backup.
Quick scan reads file-system metadata; deep scan carves by file signature; ext4 supports a scoped subtree.
Chunked reads, never whole-file loads. Image, text and info-card views let you confirm before recovery.
Choose a destination, pass three checks, export item by item; directory sources keep their tree, with a final count and per-file report.
Support matrix
“Available (untested on real hardware)” means code and CI smoke tests pass, while the physical-device path still needs manual verification. We mark it instead of overclaiming.
| Platform | Delivery | Status |
|---|---|---|
| Android | APK (universal / arm64) · AAB | Sideload works; root block-device scan not connected |
| Linux | deb (GUI + engine) | Available (untested on real hardware) |
| Windows | Portable zip (CI on demand) | Available (untested on real hardware) |
| macOS | zip (CI on demand, arm64 / x64) | Available (untested on real hardware) |
| iOS | Backup import / parse | Synthetic samples; real backups pending |
Capability boundary: ssd does not provide root functionality and does not modify your system. Storage partitions are accessed read-only. On Android 10+ (FBE), the content of deleted files usually cannot be recovered; recovery focuses on file names and metadata.
Latest release
After sudo dpkg -i ssd_1.0.3_amd64.deb, the desktop app is ready: the GUI lands in /opt/ssd, the menu entry and icon ship in the package, and the engine binaries plus polkit / udev rules are unchanged. This release also restores per-version verify-code key rotation.
arm64-v8a + armeabi-v7a + x86_64; works on old phones and emulators.
GUI + daemon + writer + cli, with menu entry and icon included.
Project mascot
It is a shield that helps you find lost files. Twelve animated expressions appear across the app: loading, empty states, errors and the about page.
:emoji-smile::emoji-joy::emoji-cry::emoji-depressed::emoji-terrified::emoji-angry::emoji-coquettish::emoji-cute::emoji-pleasing::emoji-knocking::emoji-facepalm::emoji-tongue:Each SVG carries its own expression and motion, and respects prefers-reduced-motion. The back-to-top button in the corner is the mascot too.
Sister projects
A multi-language “annotations become docs” ecosystem: PHP / Rust / Go servers plus a static Vue 3 front end.
PHP annotation parser and document data server.
Rust implementation of the apidoc server.
Go implementation of the apidoc server.
Static Vue 3 + TypeScript documentation front end.
Like the project? You can buy the shield a coffee. WeChat / Alipay QR codes are on the tip page; completely optional.
Download v1.0.3, or build from source. Every recovery starts read-only.