v0.2.11 — macOS · Windows · Linux

Reclaim your disk.
Kill the cruft.

A developer machine accumulates build output the way a workshop accumulates sawdust. A target/ here, a node_modules/ there, a build/ in every app — none of it precious, all of it invisible, and collectively tens of gigabytes. Kruftle finds every project under a folder, works out what built it, and asks that toolchain to clean up after itself.

Free software under the GPL-3.0-or-later. No account, no subscription, no server. It runs entirely on your machine.

Kruftle — review
Kruftle's review step: a list of detected projects with their stacks and artifact sizes, a treemap of where the space is, and a Clean now button.
42project types detected
10safety rails, each with a test
10languages, including RTL
0bytes of telemetry
The idea

It runs the tool's own clean command

Because rm -rf on a guessed directory name is how people lose work.

cargo clean knows which files in target/ are Cargo's. A shell glob does not. Kruftle asks each toolchain to clean up after itself, and reports what was actually freed rather than what was predicted.

It only ever deletes a directory outright when three things are true at once: the SDK for that project genuinely is not installed, the directory name is on that stack's own allow-list, and you have ticked a box saying so — for that run, not for ever.

See all ten safety rails →

cargo clean flutter clean mvn clean ./gradlew clean go clean -cache -testcache dotnet clean swift package clean xcodebuild clean mix clean bazel clean stack clean sbt clean dune clean rebar3 clean gleam clean dub clean fpm clean --all cabal clean alr clean pio run --target clean ninja -t clean cmake --build build --target clean
How it works

Five steps, and you can stop at any of them

Nothing is touched until you have seen it, selected it and confirmed it.

Kruftle — scan to report
Kruftle scanning a folder, finding 21.5 GiB across 8 projects, reviewing what it found, running each project's own clean command, and reporting 18.4 GiB reclaimed.

Point it at a folder

Choose your codebase root — or drop it on the window. Kruftle walks everything underneath, up to a depth you control, and recognises projects from the files they leave behind.

It finds every project, including the nested ones

The Rust crate inside a Flutter app has build output that flutter clean will never touch. Kruftle detects both, and tells you which toolchains are installed before you start.

Review what it found

Every project, every artifact directory, and what each one costs you — measured from the filesystem, not guessed. Filter, sort, select all, none, or exactly the ones you mean.

Dry run, or clean

A dry run changes nothing and measures what would be freed. You can skip it. The real run cleans several projects at a time and can be stopped mid-flight.

Read the report

What was reclaimed, how long it took, what failed and why — the tool's own error output, verbatim. Plus the volume's free space before and after, straight from the operating system.

Features

Everything the job actually needs

Built for the machine you work on, not for a screenshot.

42 project types

From Cargo and Gradle to Bazel, Meson, OCaml, Crystal, Terraform and Unity. Nested projects are found, not shadowed by their parent.

Measured, not guessed

Sizes are the space a directory actually occupies on disk, read from the operating system — the figure Finder and df report, and the one you get back.

See where the space is

A treemap of the biggest artifact directories under the folder you chose, so you can decide before you act rather than after.

Scheduled cleanups

Daily, weekly or monthly. Kruftle can nudge you while it is open, or register a job with your operating system's own scheduler and run with Kruftle closed.

The caches in your home directory

Cargo's registry, Gradle's caches, the npm, pub, Go module and Xcode DerivedData caches — shared by every project, and often the biggest win on the disk.

Everything is logged

Every command, every exit code, every refusal — written to a rotating JSONL log on your machine and exportable when you want to know what happened.

Teach it your own stack

A cleanup profile tells Kruftle which file marks a project, what command cleans it and which directories it may remove. Profiles obey exactly the same safety rules as the built-ins.

Ten languages

English, Español, Deutsch, Français, Português, Русский, 中文, 日本語, हिन्दी and العربية — with full right-to-left layout.

Light, dark or system

Dense and tabular, built to sit next to a terminal. Motion can be reduced, and your system's reduced-motion setting is honoured automatically.

Safety

A disk cleanup tool gets one chance to earn trust

These ten rails are enforced in one file, re-checked at the moment of deletion, and each one has a test that fails closed.

Containment. A resolved path must be inside the folder you chose — checked after symlinks are resolved, not before.
Forbidden roots. A project scan refuses /, your home directory, C:\Windows, /etc, /usr and the rest. The shared caches in your home directory are the deliberate exception, on their own screen with their own confirmation.
Too shallow is refused. Any path less than two levels below a filesystem root is rejected outright.
No symlink traversal. The scanner never descends a symlinked directory and the cleaner never deletes through one.
Allow-list only. Raw deletion is permitted only for directory names a matched stack declares. Never a glob, never a pattern you typed, never a file.
Anchored to a project root. An artifact directory must be an expected child of a directory positively detected as that stack.
Anything git tracks is left out of the plan. Some repositories commit their build/, and a rebuild will not bring that back. This one needs git installed to work, and it cannot restrain a toolchain's own clean command.
Every raw deletion is opted into. Per category, per run. Never remembered as a silent default.
Timeouts and cancellation. A clean command that overruns is killed and reported; you can abort mid-run and still get the partial result.
One Kruftle at a time. A second window — or a scheduled run arriving while one is open — stands aside rather than taking the same directory apart twice.

Don't take our word for it: the rails live in lib/src/core/clean/safety.dart and their tests live next to them.

Supported stacks

42 project types, detected from the files they leave behind

A directory legitimately matches more than one — a Flutter app also has a Gradle build — so Kruftle runs each one's command and lets the tools decide which files are theirs.

RustGoZig FlutterDartMaven GradleNode.jsPython RubyElixirCMake Make.NETSwift Package Xcode BazelMesonNinja AutotoolsConanvcpkg PlatformIOHaskellCabal sbtClojureErlang OCamlGleamNim CrystalDFortran AdaDenoPHP / Composer TerraformUnityJulia RPerl

Missing yours? A cleanup profile adds it without a rebuild, or one file and one list entry adds it to Kruftle itself.

Privacy

Nothing leaves your machine

There is no account, no subscription and no server. Dizitart operates no backend for Kruftle and receives no notification, log entry or count from it — we do not know that you have it installed.

Kruftle makes exactly one kind of network request, and only while you leave it switched on: it asks GitHub's public releases API whether a newer version exists, and — only if you click Update — downloads the installer from GitHub and verifies it against the SHA-256 published in that release. Turn the setting off and Kruftle makes no network connection at all, ever.

Read the Privacy Policy →

No analytics SDK, advertising SDK, crash reporter or A/B framework
No account, no sign-in, no licence key
Your file paths, project names and logs stay on your disk
Every line of it is GPL-3.0 and readable on GitHub
Questions

Before you run it on your codebase

Can it delete something I cannot get back?

It is designed so that it cannot, and the design is testable. By default Kruftle runs each toolchain's own clean command and deletes nothing itself. In a project scan, raw deletion happens only for directory names the matched stack declares, only inside the folder you chose, only after you tick that category for that run — and not for anything git tracks.

Two things sit outside that rule, both deliberately. The global caches live in your home directory rather than in the folder you chose, so they get their own screen and their own confirmation. And a scheduled background run has nobody to ask, so it cleans using the categories you pre-selected in Settings — none, on a fresh install.

That said, Kruftle deletes files; that is what it is for. Read the Terms before you use it in anger, and do a dry run first if you are unsure.

What if the SDK for a project is not installed?

Kruftle tells you before you start. Those projects are offered a fallback: deleting the stack's own well-known output directory instead. It is off unless you turn it on for that run, and rebuilding restores what it removed.

Is it really free?

Yes — free as in both senses. Kruftle is distributed under the GNU General Public License v3.0 or later. There is no paid tier, no trial and nothing to unlock.

Why does my system warn me when I open it?

The builds are not code-signed yet, so macOS Gatekeeper, Windows SmartScreen and Linux's executable bit each need one extra step on first launch. The exact commands are on the download page, and every release publishes a checksums.txt you can verify against.

Does it need admin rights?

No. Kruftle runs as you, touches only paths you could touch yourself, and refuses system directories outright.

How does it update?

It checks GitHub Releases on launch, verifies the download against the SHA-256 published in the release, and never installs without asking. On macOS it replaces itself and reopens on the new version. You can switch the check off entirely in Settings.

Can it clean while I am not there?

Yes. Turn on background runs and Kruftle registers a job with launchd, a systemd user timer or Task Scheduler, depending on your platform. An unattended run does each toolchain's clean command and deletes only the categories you have already pre-selected — it cannot widen its own permission while you are not watching.

Find out what your disk is actually holding

A scan changes nothing. You may be surprised by the number.