You’re about to pay for storage you already own.
Macs routinely hide 50–200 GB behind one unhelpful label: System Data. Buy a bigger Mac and you pay hundreds for space that was already sitting on your disk. Dustloft finds it in about two minutes.
curl -fsSL https://raw.githubusercontent.com/kapil303196/dustloft/main/install-online.sh | bash
Free forever · Open source · No account · Nothing leaves your Mac · See what it finds first
What is “System Data” actually made of?
It isn’t one thing. macOS files anything it can’t categorise under that label, then gives you no way to look inside. These are the things that quietly fill a drive — every one a category Dustloft scans.
-
A forgotten screen recordingup to 500 GBStarted by accident, never stopped
-
Video editing scratch caches100–500 GBAfter Effects, Premiere, Resolve
-
Docker disk image40–300 GBDefaults to eating all free space
-
Virtual machines & emulators20–120 GBParallels, UTM, Android images
-
Leftovers from deleted apps10–100 GBUninstalling never removes these
-
Messaging app media50–100 GBEvery photo anyone ever sent you
-
Old iPhone backups10–80 GBOne per device, kept forever
-
Developer dependencies10–50 GBnode_modules, venvs, package stores
Each bar spans the range commonly reported for that category in public macOS support threads. Dustloft reports what is actually on your disk — measured, never estimated.
The expensive way, and the free one
When a Mac fills up, the default answer is to pay — for a bigger machine, or for cloud storage every month, forever. Both are reasonable. Both are worth trying second.
Buy your way out
A storage upgrade is configured at purchase and can never be changed afterwards. Cloud storage is a subscription you keep paying for as long as the files exist. Neither tells you what was filling the disk in the first place.
Look first
Two minutes to find out whether the space you’re about to buy is already sitting on your disk under a label macOS won’t explain. If it isn’t, you’ve lost two minutes. If it is, you’ve saved the upgrade.
Fast is easy. Not destroying anything is the hard part.
Everything Dustloft finds is sorted into three tiers, and the tier decides how much friction sits between you and the delete button. See the complete list of what it refuses to touch.
Regenerable
Caches, build output, dependencies, Docker images. Comes back on its own. This is all Quick Clean will ever touch.
Needs admin
Safe, but macOS wants your password. Every such item is batched into one prompt instead of one per file.
Permanent
Gone forever. Never bulk-selected, never in Quick Clean, gated behind a confirmation you tick yourself.
Four things it flatly refuses to do
- Delete a
.gitdirectory. It offersgit gcinstead, and flags in red any repository whose history exists nowhere but your disk. - Touch Dropbox, iCloud Drive or any synced folder. A delete there propagates to every device you own. Not overridable.
- Remove Docker volumes. Unused images, yes. The volumes holding your databases, never.
- Claim it can reclaim “purgeable” space. No third-party app reliably can. Anyone promising it is overpromising.
The near-miss that wrote the rules
These rules came from an actual cleanup, not a checklist. This one came closest to a disaster.
One project’s
.gitfolder was 2.2 GB. It had a GitHub remote configured, so deleting it looked obviously safe.Running
git ls-remotefirst told a different story. The remote authenticated successfully and returned zero refs. Nothing had ever been pushed. That local.gitwas the only copy of the project’s history in existence.A repository with a remote configured looks backed up. It isn’t, until something has actually been pushed.
Dustloft runs that check for you, and never offers to delete a.gitfolder at all.
Nothing goes until you’ve seen it
Every item, with its full path and real size. Untick anything you want to keep — the total follows along.
Two minutes from now you’ll know
One command. It fetches the latest release, installs it and opens it.
curl -fsSL https://raw.githubusercontent.com/kapil303196/dustloft/main/install-online.sh | bash
Universal build — Apple Silicon and Intel. Prefer a disk image? Download the DMG.
Will it delete something I need?
Not without showing you first. Everything is listed with its full path and real size, and you untick anything you want to keep. Items that cannot be recovered are never bulk-selected and need a separate confirmation. Quick Clean only touches things that rebuild themselves.
Why is my System Data so large?
macOS files everything it cannot categorise under that one label — caches, app containers, virtual machine disks, downloaded models, old device backups, local snapshots. It grows quietly and there is no built-in way to look inside. That is the exact problem Dustloft was built for.
Why does it need Full Disk Access?
Without it macOS hides the Trash, app containers and device backups, so sizes come out far lower than reality — and it asks separately for Desktop, Downloads and Documents. Dustloft asks once, up front, and explains why. macOS applies the permission only to a freshly launched app, so it restarts itself once.
Why the “unidentified developer” warning?
Notarisation requires a paid Apple Developer membership. The build is signed but not notarised. The one-line installer avoids the warning legitimately, because quarantine is applied to browser downloads and not to curl.
Does emptying the Trash actually free the space?
Usually, but not always. Root-owned items left by uninstalled apps often refuse to delete and sit there indefinitely. Dustloft spots those and removes them under a single administrator prompt.
How is it different from CleanMyMac?
Free, open source, no subscription. It also declines to do several things commercial cleaners advertise: it will not claim to reclaim purgeable space, will not delete a .git directory, and will not touch a cloud-synced folder. Fewer promises, no surprises.
Does it work on Intel Macs?
Yes. Every release is a universal binary built in CI and verified with lipo to contain both architectures.
Does anything leave my Mac?
No. There is no telemetry, no account and no server. The only network request it ever makes is checking GitHub for a newer version.