Mac cleaner for developers
A developer Mac does not fill up the way a normal Mac does. The space is in build products, dependency trees and a Docker image that grows but never shrinks — and almost none of it shows up in Apple's Storage settings.
On a working developer Mac, five directories hold most of the reclaimable
space: Xcode's DerivedData, nested node_modules
folders, package-manager caches (SwiftPM, Homebrew, npm, Cargo, Gradle, Maven, Go),
iOS simulator runtimes, and Docker's disk image. The first three are safe to remove
and rebuild themselves. The last two must be reclaimed by their own tooling — a
cleaner that deletes those files directly will break your install.
Why Storage settings is useless here
Apple's Storage pane files everything it cannot categorise under System
Data. Build caches, dependency trees and container images all land there, in
one opaque grey bar with no way to look inside. You can see that 80 GB is gone; you
cannot see that 38 GB of it is DerivedData from projects you shipped last
year. For the general case, see what
System Data actually contains.
The five places the space goes
1. Xcode DerivedData — usually the biggest single win
~/Library/Developer/Xcode/DerivedData holds build products, indexes and
module caches. Xcode regenerates all of it. Deleting it costs one slower build and
routinely returns tens of gigabytes, because Xcode keeps a folder per project
indefinitely — including for projects whose source you deleted years ago.
Safe to remove. Broomkit lists it under Xcode Junk and moves it to the Trash.
2. Nested node_modules
Everything inside node_modules is reinstallable from
package.json. The problem is not any single folder — it is that they
nest, and Finder will not total them across a home directory. A Mac with a few years
of side projects can be carrying dozens, and no macOS tool will add them up for you.
Broomkit walks the home folder rather than a fixed list of known locations, which is
why it finds the ones in ~/Desktop/old-thing/ that a path-based cleaner
misses.
Safe to remove for projects you are not actively building.
3. Package-manager caches
Downloaded artefacts that every package manager keeps forever by default:
~/Library/Caches/org.swift.swiftpm— SwiftPM~/Library/Caches/Homebrew— Homebrew downloads~/.npm— npm's content-addressable cache~/.cargo/registryand~/.cargo/git— Rust crates~/.gradle/caches— Gradle~/.m2/repository— Maven~/go— Go module cache
Safe to remove. Every one of these re-downloads on the next build.
4. iOS simulators — advisory only
Simulator runtimes and device data live in
~/Library/Developer/CoreSimulator and can reach tens of gigabytes.
Broomkit will not delete these. Removing device directories by hand
leaves CoreSimulator's index pointing at devices that no longer exist, and Xcode then
behaves unpredictably. Instead it reports the size and gives you the command that does
it properly:
xcrun simctl delete unavailable
5. Docker's disk image — advisory only
Docker Desktop keeps everything in one file:
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw. It
grows as you build and pull, and it does not shrink when you prune —
pruning frees space inside the image, not back to macOS. Deleting the file destroys
every image, volume and container you have.
Broomkit reports its size and gives you Docker's own reclaim command:
docker run --privileged --pid=host docker/desktop-reclaim-space
See these five numbers on your own Mac. Broomkit is free for 3 days, with every feature unlocked — then a one-time licence, never a subscription.
Download for MacThe rule that matters: regenerable vs reclaimable
The distinction the five categories above turn on is the one most cleaners ignore. Regenerable files can be deleted because the tool that made them will make them again — DerivedData, node_modules, package caches. Reclaimable-by-tooling files cannot: the bytes are inside a database or an image whose owner has to compact it. Simulators and Docker are in this group.
A cleaner that treats the second group like the first will happily free 40 GB and leave you reinstalling Docker. That is why Broomkit shows a command for those two instead of a checkbox — detection is not the same as permission to delete.
What Broomkit will not touch
.gitdirectories, ever — history is not a cache- Source files, or anything it cannot positively identify as regenerable
- Kernel caches,
~/Library/Containerswholesale, swap or sleep images - Anything at all without showing you the full path first
Inferred categories start unchecked. Removals go to the Trash rather than being unlinked, so a mistake is recoverable until you empty it. There is no privileged helper and no daemon.
Is it safe to delete Xcode DerivedData?
Yes. It holds build products, indexes and module caches that Xcode regenerates. The cost is one slower build. It is usually the largest single win on a developer Mac.
Can I delete node_modules folders to free up space on a Mac?
Yes, for projects you are not actively working on — everything in them is reinstallable from package.json. The difficulty is finding them all, because they nest and Finder will not total them.
Why does Docker use so much disk space on a Mac?
Everything lives in one disk image, Docker.raw, which grows as you build and pull and does not shrink when you prune. The space is freed inside the image, not returned to macOS. Reclaiming it needs Docker's own tooling.
Will a Mac cleaner delete my source code or git history?
It must not. Broomkit never proposes .git directories, source files, or anything it cannot identify as regenerable. Inferred categories start unchecked and every path is shown before anything moves.