Understand your disk before you clean it.
Diskern scans your computer, understands what every file is for, and safely frees up space — explaining exactly what's safe to remove and what would break if you did.
Findings are grouped by verdict, and every row carries the rule that
matched it. 0 B on the risky rows is deliberate: bytes on files nothing
will offer to move don't count toward the reclaimable total.
- Read-only by default. Scanning never modifies anything.
- Never hard-deletes. Actions move files to a reviewable quarantine; purging quarantine is a separate, explicit user step.
- Rules decide, AI narrates. Safety verdicts come from a deterministic, auditable rules database and local evidence — never from a model or a network call. The optional AI layer only explains, in plain language, what the engine already found.
- Evidence over confidence. Every finding shows why ("matched rule chrome-cache", "referenced by 3 projects"), not just a percentage.
crates/diskern-core engine: scanner, dedup (BLAKE3), rules, risk, graph, quarantine
crates/diskern-cli `diskern scan <dir>` — the engine from the terminal
app/ Tauri v2 desktop app (React frontend)
site/ landing page (GitHub Pages)
docs/ architecture and release docs
Project docs live in docs/ — running locally, architecture, the rules database, an FAQ, and release instructions. Each section has its own README: core · cli · app · site
# Engine + CLI — no GUI dependencies needed
cargo test -p diskern-core -p diskern-cli
cargo run -p diskern-cli -- scan ~/Downloads
# Desktop app
cd app && npm install && npm run tauri devdocs/DEVELOPMENT.md has the full setup: what to install per platform, how to run what CI runs, and what the build failures mean.
See docs/RELEASING.md. Short version: set the two
updater-key secrets once, then git tag vX.Y.Z && git push --tags.
Contributions are welcome — see CONTRIBUTING.md for setup and guidelines, and docs/ARCHITECTURE.md for how the pieces fit together.
Looking for somewhere to start? Issues are labelled by difficulty:
level: beginner
is scoped to a single file with the reasoning worked out, and teaching
Diskern about a cache on your platform is a
rules change that needs no Rust at all.
MIT. Unless you explicitly state otherwise, any contribution you intentionally submit for inclusion in this work shall be licensed as MIT, without any additional terms or conditions.
