Disk cleaners are not particularly exciting software, and that is probably how they should be.
You open one because your computer is running out of space, it tells you where that space has gone, you decide what you are comfortable removing, and then you get on with your life. At least, that was roughly what we wanted.
The cleaners we tried tended to make the experience rather more dramatic. A free scan would discover an alarming amount of “junk”, the numbers would become increasingly red, and somewhere between finding the problem and solving it there would usually be a payment screen. In some cases, what started as a fairly ordinary utility also came with background services, browser extras, notifications and a surprising enthusiasm for staying involved long after the clean had finished.
There is a perfectly understandable commercial reason for that. If a product earns its money through an ongoing subscription to a cleaning tool, it needs users to keep feeling that cleaning is an ongoing problem. Suddenly the flashing warnings and ever present reminders make a little more sense.
That incentive always felt slightly uncomfortable to us because a disk cleaner is unusually trusted software. You are allowing it to inspect parts of your computer and, ultimately, remove things from it. Of all the tools you install, it is probably not the one you want creating unnecessary anxiety in order to improve conversion.
So we built the one we wanted to use ourselves.
Clean Rabbit scans on your machine, tells you what it has found and lets you decide what happens next. It does not need to persuade you that your Mac, PC or Linux machine is in a state of emergency, because there is no premium button waiting behind the result.
It is free. There are no adverts. There is no subscription.
The cleaner can simply be a cleaner.
What Clean Rabbit actually does
Clean Rabbit is a desktop disk cleaner for macOS, Windows and Linux. The installer is roughly 10 MB, and the application currently brings together six tools that deal with the fairly ordinary ways storage disappears over time.
The main Disk Cleaner looks for things that tend to accumulate without much intervention from you: application caches, temporary files, logs, incomplete downloads and similar clutter. Rather than presenting one enormous number and asking you to trust it, the results are separated by category so you can see where the space has actually gone before deciding what to remove.
Deletion is recoverable by default. Clean Rabbit asks whether you want files moved to the Trash or Recycle Bin, or removed permanently, with the recoverable option as the default. The deletion logic also checks that anything being removed belongs to the locations that were actually scanned.
The Duplicate Finder is more deliberate. You point it at a folder and it looks for files that are genuinely identical rather than simply sharing a name. It works progressively, using size, then partial hashing, then a full BLAKE3 hash before treating two files as duplicates. One copy is always kept.
Large & Old Files does something simpler, but often more useful. It surfaces the files taking up the most space and those you have not touched for a while. We have found that a handful of forgotten downloads, videos or old installers often account for more wasted storage than thousands of tiny cache files, so sometimes the quickest clean is simply being shown the right five things.
The App Uninstaller removes an application alongside the caches, preferences and support files it has accumulated around the system. Dragging an application into the bin is easy, but it does not necessarily deal with everything the application left behind. On macOS, where an app needs elevated permission to be removed, the operating system handles that request through its own authentication dialogue. Clean Rabbit never needs your administrator password itself.
There is also Startup Items, which shows what is launching when you sign in and lets you disable things reversibly, and Scheduled Scans, which quietly checks for accumulated clutter on an interval you choose. The scheduled scanner does not decide to clean your computer while you are asleep. It simply lets you know when there is enough there to be worth looking at.
That distinction matters to us. Clean Rabbit can recommend. It does not presume.
The privacy promise underneath it
The rule that shaped most of the technical design was straightforward: file names, folder paths and file contents should never leave the computer being scanned.
The cleaner therefore runs locally. There is no server analysing your files somewhere else, and scan results are not uploaded. The public product page describes this quite plainly: file names, paths and contents are never sent to White Rabbit Foundry.
If activity history is enabled, what can be associated with the account is deliberately much less interesting: which tool was used, how many items were involved, how much space was freed and when it happened. We designed the underlying record without somewhere convenient to put a file path in the first place.
That may sound like a small implementation detail, but we like it for exactly that reason. There is a difference between writing “we will not store this” in a policy and designing a system where the data model does not expect the information at all. Good intentions matter, but architecture is harder to forget.
We took the same approach with diagnostic logging. Paths are stripped when log entries are written rather than being collected first and hidden later. This means the diagnostic copy on the machine does not quietly accumulate a catalogue of local file locations either.
Optional usage analytics are similarly restrained. The analytics identifier is regenerated when the application starts, which makes it far less useful for building a perfect picture of individual behaviour. From a conventional product analytics perspective this is slightly annoying. From a privacy perspective, that is the point.
We would rather know a little less about our users than require them to trust us with information we never needed.
How we actually use it
Our own use of Clean Rabbit is disappointingly ordinary.
Every so often, one of us runs the cleaner. A scheduled scan usually tells us when it is worth bothering. Large files occasionally expose something ridiculous that was downloaded months ago and forgotten. The uninstaller gets used when an application has reached the end of its useful life.
That is about it.
There is no ritual of optimisation, no belief that deleting a browser cache will somehow transform a four year old laptop into a supercomputer, and no score telling us that the machine is only 73 per cent healthy.
Probably my favourite moment during development was using Clean Rabbit to uninstall another disk cleaner. It felt like the product explaining itself rather efficiently.
Building the boring parts properly
Clean Rabbit is built in Rust with a relatively small React interface using Tauri. That combination is part of the reason the application can remain around 10 MB rather than carrying a much heavier desktop runtime with it. The scanning and deletion engine lives primarily in Rust, separate from the interface, which also makes it much easier to test without pretending to click around the application thousands of times. The application is a universal macOS build for both Apple Silicon and Intel, alongside Windows and Linux versions.
A disk cleaner is one of those products where the uninteresting engineering is probably the most important engineering. Deleting a file is trivial. Knowing that you have found the right file, that the file still exists, that the user really asked for it to be removed and that the application will behave sensibly when the operating system refuses is where the work sits.
One early example involved caches disappearing between scanning and cleaning. macOS routinely manages its own temporary files, so occasionally Clean Rabbit would scan something, the operating system would remove it naturally, and then our cleaner would arrive a few moments later and report that it had failed to delete the file.
Technically, something had gone wrong. Practically, the desired outcome had already happened. Treating that situation as a frightening error would have been technically defensible and completely unhelpful, so the behaviour changed. A lot of the development has involved cases like that.
The worst bugs are the ones that look completely reasonable
One of our more instructive bugs had nothing to do with deleting files. The updater once generated a release manifest containing an unencoded space inside a download URL. Installed copies of Clean Rabbit then asked for a file at an address that did not exist.
The interesting part was what happened next. There was no spectacular failure screen. Nothing crashed. Our build pipeline remained green. The updater simply concluded that there was no update available. For four releases, an installed copy could sit there looking perfectly current while being unable to reach the newer version.
It was a good reminder that silent and plausible failures can be much more dangerous than obvious ones. When software explodes, somebody investigates. When software calmly gives the wrong answer, it can survive for quite a while.
The fix was not simply to be more careful when generating URLs. Every release now performs an external check against the actual published addresses and attempts to fetch them before the release manifest goes live. If one of them cannot be reached, publication stops.
Testing what the code intended to create had not been enough. We needed to test what a user would actually receive.
A success message should occasionally be treated like a suspect
We found another version of the same lesson in the uninstaller. At one stage, Clean Rabbit could display a cheerful green tick and tell someone that an application had been uninstalled even when macOS had refused to remove it.
There was no single catastrophic piece of code behind this. Several individually sensible assumptions happened to meet in exactly the wrong place, and the result was a user interface confidently describing something that had not occurred.
That bothered us more than a visible failure would have. A wrong explanation does not merely fail to help. It sends the person using the product in the wrong direction. If Clean Rabbit says an app has gone, why would you look for a permissions issue?
The uninstaller now verifies the outcome. If the application survived the attempt, Clean Rabbit says so and explains what needs to happen instead. There is a fairly general product lesson hidden in that bug. Success should be measured against the real world, not against whether the function returned without throwing an exception.
“Works on Windows” should mean more than “compiled on Windows”
Cross platform software creates another easy trap. For a while, saying Clean Rabbit worked on Windows effectively meant that the Windows build had completed successfully. That is useful information, but it is not the same thing as knowing that the installer someone downloads will install, launch and stay running on a real machine.
We eventually decided that distinction was too generous. The release process now installs the actual published installers from the actual public download links on Windows and Linux environments, launches the application and requires it to remain alive. A screenshot is captured as part of the test.
This sounds almost comically literal. That is why it works. There is an awkward space between “the code compiled” and “a normal person can download and use this”, and that space contains a surprising number of embarrassing bugs. We now test the second thing.
Watching the product from the outside
The same philosophy extends after release. The website and update service are monitored continuously, while a daily health check looks across the boring pieces that can quietly break: functions throwing errors, download links disappearing, emails failing to deliver or updates failing somewhere in the process.
When everything is fine, it generally stays quiet. Once a week it deliberately speaks anyway. On Mondays, the watchdog sends a report even when there is nothing wrong. This is less about information than it is about proving that the monitor itself is still alive. A silent watchdog and a dead watchdog look remarkably similar.
So if the Monday message ever fails to arrive, that absence becomes its own alert. None of this is particularly glamorous engineering. That is why we like it.
Where AI actually fitted into the build
A substantial amount of Clean Rabbit was developed in collaboration with an AI coding assistant. We do not find that especially controversial, nor do we think it is the most interesting part of the build.
AI can produce code quickly. It can suggest an implementation, trace unfamiliar parts of a codebase, write tests and help explore why something behaves unexpectedly. It can also make a completely reasonable looking mistake at impressive speed.
The interesting question is therefore not whether a human or an AI wrote a particular function. It is what has to happen before that function is trusted.
For Clean Rabbit, the answer is the same regardless of the author. The test suites need to pass. Published URLs need to resolve. Installers need to launch. The real result needs to match the success message. Release notes need to explain what changed rather than hiding behind “performance improvements and bug fixes”.
AI has made us faster. It has not made verification optional. If anything, making code easier to produce makes that discipline more important, because the amount of plausible looking software you can create in a day has increased enormously.
Why Clean Rabbit is free
Clean Rabbit is free, but running it is not. There are developer programme fees and signing costs associated with distributing trusted desktop applications. There is infrastructure behind account access, email delivery, downloads and updates. Bandwidth costs money. Storage costs money. Keeping the surrounding services monitored costs something too.
None of these costs is enormous on its own. They do, however, have an annoying habit of arriving as invoices. We decided to absorb them for two reasons.
The first goes back to the original itch. Charging a recurring subscription for a disk cleaner changes the incentives around the product. The business starts needing people to keep seeing a problem worth paying to solve.
That does not mean every paid cleaner behaves badly, and there are perfectly reasonable paid utilities in the market. But we knew what we wanted Clean Rabbit to optimise for, and it was not recurring anxiety.
There is no paid tier, no advertising and no premium unlock hidden behind the scan results. The number Clean Rabbit shows you has no commercial reason to be larger than it really is. The live product page makes the same commitment: free, no card and no trial.
The second reason is more specific to White Rabbit Foundry. We call ourselves a foundry because we like building things. Some of those things are products for clients, some become experiments, and occasionally one becomes a tool that is useful enough to release properly.
Clean Rabbit is also a fairly good demonstration of how we think software should behave. Local where local is possible. Quiet when there is nothing to say. Explicit when something fails. Conservative with access. Easy to undo. Useful without constantly trying to become a relationship.
If somebody downloads it, clears some space and then forgets about Clean Rabbit until they need it again three months later, we consider that a successful product experience.
There is a contribute page for anyone who has found it useful and wants to help cover the development costs. Any amount is appreciated, but nothing changes inside the application if you never use it. There are no features waiting to be unlocked afterwards.
That would rather undermine the point.
A final thought
Software does not always need to demand more of our attention. Sometimes the best version of a product is the one that solves a narrow problem, explains itself clearly and then gets out of the way. That is what we wanted from a disk cleaner.
Something small enough to understand, cautious enough to trust and boring enough not to invent new reasons for us to open it. Clean Rabbit will continue to cost us a little money every month.
For now, we are quite happy with that arrangement. Clean Rabbit is free for macOS, Windows and Linux at cleaner.whiterabbitfoundry.com. The release notes are public too, including the embarrassing ones.

