r/osx • u/otabek-abdiraimov • 4d ago
I made a Mac cleaner that only does developer junk (Xcode, Docker, node_modules, package caches) and explains every item before you delete it
My 512 GB MacBook hit "disk full" in March. macOS Storage said 180 GB was "System Data". The usual cleaner apps found 4 GB of browser caches and called it a day. The actual culprits were a 21 GB folder in ~/Library/Developer, two Docker.raw images, and node_modules in 40 projects I hadn't opened in a year.
I spent some time after my full-time work building Shedi to find exactly that. It's a native macOS app, scans in about 10 seconds, and groups what it finds:
- Xcode: DerivedData, Archives (listed one by one), iOS DeviceSupport, unavailable simulators and old runtimes
- Docker: images, containers, build cache. Volumes are shown separately as your files, never pre-selected
- node_modules in every project, with each project's last-modified date
- Package manager caches: npm, pnpm, Yarn, Homebrew, CocoaPods, SwiftPM, Cargo, Gradle, pip, Go
- App caches, logs, and large old files in Downloads
The part I cared about most is the safety model, because I've been burned by "one-click clean":
- Every item says what it is, whether it's safe to remove (Safe / Check first / Your files), and whether it comes back
- Only items marked Safe are pre-selected
- Files go to the Trash, not deleted. The few commands that can't use the Trash (docker builder prune, xcrun simctl delete unavailable) are named on a confirmation sheet before they run
- Nothing outside your home folder is touched except through Docker's and Xcode's own tools
What it doesn't do: no malware scanning, no "speed up your Mac", no duplicate finder, no account. If you want those, CleanMyMac is the better fit. If you only need the disk space back and want to see what's being removed, that's what this is for.
Pricing is one-time: $19.99 for one Mac, $27.99 for two. 14-day refund, no questions. Launch code EARLY10 takes $10 off for now. macOS 15 or later.
Two things I'd like from this sub: which developer paths am I missing (I know about Android SDK and JetBrains caches, both coming), and does anyone want the free guides on clearing this stuff by hand without the app? Those are at shedi.app/guides and I'll keep writing them regardless.
1
u/half_man_half_cat 4d ago
Could it manage sym links instead? I ended up buying a usb c nvme to move all of this to
2
u/otabek-abdiraimov 3d ago
Not today. Shedi frees space; it doesn't relocate anything. "Move to external and leave a symlink" is a feature I've thought about, but it's riskier than deleting: if the drive isn't mounted when Xcode or Docker starts, they recreate the folder in place and you end up with two copies, and the symlink has to be repaired by hand.
For your NVMe, most of the big ones can be moved without symlinks, through the tool's own setting, which survives the drive being unplugged:
- Xcode DerivedData: Xcode → Settings → Locations → Derived Data → Custom. Archives have the same switch.
- Docker: Docker Desktop → Settings → Resources → Advanced → Disk image location. It moves Docker.raw for you.
- pnpm store: pnpm config set store-dir /Volumes/NVMe/pnpm-store
- npm cache: npm config set cache /Volumes/NVMe/npm-cache
- Homebrew cache: export HOMEBREW_CACHE=/Volumes/NVMe/brew-cache in your shell profile
Simulators and node_modules are the ones with no official setting. Simulator runtimes can be symlinked from ~/Library/Developer/CoreSimulator, but Xcode updates have broken that for people, so I'd leave those on the internal disk and let Shedi delete the unused ones instead.
If a "move + symlink" mode with a mount check would be worth paying for, say so here. That's the kind of comment that decides what I build next.
5
u/xilyix 4d ago
I swear if I have to read one more of these I am going to crash out