"My MacBook said low disk. System Data was 220 GB. After Devpurge I was at 176 GB." That receipt comes from a developer in the Devpurge launch thread on Hacker News, which spent a day on the front page and put indie dev-cleaners on the map. The thread also surfaced a more interesting question that the launch itself could not answer in the comments: how does Devpurge compare to other dev-focused cleaners, and which one actually fits your stack? This post is the side-by-side, written by the team behind one of them.
Why does a Devpurge vs CleanMyDev comparison even exist?
Until late 2025 there were two answers to "what should a developer use to clean a Mac": CleanMyMac for the consumer smart scan, or a personal shell script for the rest. Jonathan Spooner's "Reclaim 100+ GB from Xcode" is a multi-year-old artifact that still ranks because iOS devs keep writing the same script.
What changed in 2026 is that Apple's storage UI started folding more categories into "System Data," AI coding tools became disk hogs at scale, and one developer's Claude Code 472 GB blowup hit every Mac developer's timeline. Devpurge launched into that gap. CleanMyDev launched at the same time with a different scope.
How are CleanMyDev and Devpurge priced?
This is the easy part of the comparison. Neither product wants your card on file forever.
| Item | Devpurge | CleanMyDev |
|---|---|---|
| Price model | one-time lifetime | one-time lifetime |
| Headline price | ~$15 once | $9.99 once |
| Yearly renewal | none | none |
| Free trial | limited scan | read-only audit mode |
| Subscription auto-renew | no | no |
| Bundled in Setapp | no | no |
| Account required | no | no |
| Telemetry | minimal, opt-in | none, no account |
Over five years on a single Mac, Devpurge stays at around $15 and CleanMyDev stays at $9.99. The same five years on CleanMyMac costs about $200 at the current $39.95 yearly rate. Both indie cleaners are priced in the same psychological bucket. CleanMyDev is roughly 30% cheaper, but the price gap is small enough that it should not be the deciding factor. The scope gap below matters more.
What does each cleaner actually scan?
The product question is what paths each tool surfaces. Here is the side-by-side for the categories that matter on a modern developer Mac.
| Category | Specific paths | Devpurge | CleanMyDev |
|---|---|---|---|
| Xcode DerivedData | ~/Library/Developer/Xcode/DerivedData/ |
yes | yes |
| Xcode Archives | ~/Library/Developer/Xcode/Archives/ |
partial | yes |
| iOS DeviceSupport | ~/Library/Developer/Xcode/iOS DeviceSupport/ |
no | yes |
| CoreSimulator caches | ~/Library/Developer/CoreSimulator/Caches/ |
yes | yes |
| Orphaned sim runtimes | /System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/ |
no | yes |
xctestdevices |
~/Library/Developer/XCTestDevices/ |
no | yes |
| Claude debug logs | ~/.claude/debug/, ~/.claude/projects/ |
yes | yes |
| Claude CLI MCP logs | ~/Library/Caches/claude-cli-nodejs/ |
partial | yes |
| Codex CLI sessions | ~/.codex/sessions/, rollouts, worktrees |
partial | yes |
| Cursor workspaceStorage | ~/Library/Application Support/Cursor/User/workspaceStorage/ (.pack) |
yes | yes |
| Cline checkpoints | ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/ |
no | yes |
| Factory AI cache | ~/.factory/, ~/Library/Caches/factory-ai/ |
no | yes |
| Windsurf cache | ~/.codeium/, ~/Library/Application Support/Windsurf/ |
no | yes |
| Gemini CLI | ~/.gemini/ |
no | yes |
| Ollama models | ~/.ollama/models/ (inspect, not nuke) |
partial | yes |
| Hugging Face triple cache | ~/.cache/huggingface/{hub,datasets,transformers}/ |
partial | yes |
| LM Studio storage | ~/.cache/lm-studio/, ~/.lmstudio/ |
no | yes |
| Docker.raw | ~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw |
partial | yes |
| Docker images, volumes, build cache | via Docker socket | no | yes |
| Colima / OrbStack data | ~/.colima/, ~/.orbstack/ |
no | yes |
| npm / pnpm / bun / yarn caches | ~/.npm/_cacache/, ~/.pnpm-store/, ~/.bun/install/cache/, ~/.yarn/ |
partial | yes |
node_modules graveyard |
recursive scan across user folders | no | yes |
| Playwright browsers | ~/Library/Caches/ms-playwright/ |
no | yes |
This is not a knock on Devpurge. The product picks a tight scope and ships it well. If your disk pain is Xcode plus the top three or four AI tools, Devpurge covers the loudest 80% in a calmer UI. If your disk pain is the long tail of "I have used six AI editors in the last 18 months and three still leak cache," CleanMyDev's 110+ targets is the closer match.
How do the safety models compare?
Both lean on the same language: dry run, whitelist, no sudo. Details differ.
Devpurge's safety pitch on the Hacker News launch thread was direct: every path is whitelisted, the app never asks for sudo, every operation has a dry-run preview, and the user explicitly opts in per category. That stance is the right one for a skeptical dev audience.
CleanMyDev runs the same defaults and adds a few:
- Move to Trash is the default. Permanent delete is a separate toggle, not the path you stumble into.
- Every path shows the full string, byte size, and last-used timestamp before you confirm.
- Read-only audit mode is free. You can scan without paying and write a JSON report.
- No daemon, no Login Item, no account, no telemetry SDK.
The rule from the Move to Trash vs rm -rf post is "prefer Trash on a low-disk day." A Trash recovery costs zero. An rm -rf typo on ~/.claude/ has destroyed auth tokens for at least one developer in Issue #24207 on Claude Code. Both tools avoid that by construction. The difference is the default: Devpurge defaults to permanent delete on confirm, CleanMyDev defaults to Trash.
What does the cleanup workflow look like in practice?
Both tools start from a scan. Where they diverge is what the result page looks like and how you confirm.
Here is a typical CleanMyDev session run from a freshly opened MacBook, captured as a sequence of terminal-equivalent commands so you can see exactly what the GUI is wrapping.
# 1. Audit only. Walks every known dev cache path and prints a JSON report.
# CleanMyDev runs this in-process; equivalent on the command line is roughly:
du -sh \
~/Library/Developer/Xcode/DerivedData \
~/Library/Developer/Xcode/Archives \
~/Library/Developer/Xcode/"iOS DeviceSupport" \
~/Library/Developer/CoreSimulator/Caches \
~/.claude/debug \
~/Library/Caches/claude-cli-nodejs \
~/.codex/sessions \
~/Library/Application\ Support/Cursor/User/workspaceStorage \
~/.ollama/models \
~/.cache/huggingface 2>/dev/null
# 2. Move to Trash, not rm. CleanMyDev wraps this via NSFileManager
# trashItem(at:resultingItemURL:) so you can recover from Finder.
osascript -e 'tell application "Finder" to delete POSIX file "/Users/me/Library/Developer/Xcode/DerivedData"'
# 3. Cap future Claude growth. CleanMyDev offers a one-click toggle for this.
echo '{ "cleanupPeriodDays": 4 }' > ~/.claude/settings.json
Devpurge wraps a similar audit and confirm flow. The visible difference is the per-path breakdown. Devpurge collapses categories like "AI editor caches" into a single row with a total. CleanMyDev shows each tool's subpaths separately so you can keep, for example, your ~/.claude/projects/ directory but trash ~/.claude/debug/. Both are valid UX choices. The collapsed view is faster on a clean baseline. The per-subpath view is what you want when the screen says "your home folder contains 47 GB of Claude state and you have no idea which 47" and you need to dig.
Which one should you pick?
Use this decision matrix instead of guessing.
| Your stack | Pick |
|---|---|
| iOS only, modest AI usage | Devpurge (smaller surface area, fine coverage) |
| iOS plus heavy AI tooling | CleanMyDev (long-tail Xcode plus AI coverage) |
| AI tools across multiple editors (Claude, Cursor, Codex, Cline, Windsurf) | CleanMyDev (per-tool subpaths) |
| Local LLM heavy (Ollama, LM Studio, Hugging Face) | CleanMyDev (inspect-not-nuke for model weights) |
| JS toolchain plus Docker | CleanMyDev (Docker socket plus node_modules graveyard) |
| Brand-new Mac, just want a quick sweep | either, Devpurge ships fewer scary screens |
| You want a free read-only audit before paying | CleanMyDev (audit mode is free) |
| You distrust everything and want a single source paste-able JSON report | CleanMyDev (audit mode writes JSON) |
| You want the tightest dev cleaner with no extras | Devpurge |
The honest summary is that Devpurge and CleanMyDev are not really fighting for the same wallet. Devpurge is "CleanMyMac for devs who only need ten paths." CleanMyDev is "an audit tool for devs whose disk problem is the long tail of modern AI tooling." A 256 GB MacBook Air with one Xcode install is well served by Devpurge. A 512 GB MacBook Pro that has cycled through Cursor, Claude Code, Codex, Cline, Ollama, Hugging Face, and Docker is the CleanMyDev audience. The brtkwr writeup of reclaiming 200 GB by hand is exactly that second profile, with "Docker was the biggest culprit" at 108 GB plus another 75 GB found on a second pass.
Can you try both before paying?
Yes. Both tools let you run a scan before you commit. Devpurge's trial gives you the dry-run summary. CleanMyDev's free audit mode is the full per-path inventory with sizes and last-used dates. Pick the one that matches the depth of report you want. Then pay $9.99 or $15 and stop worrying about subscriptions.
If your disk pain is the modern AI-plus-iOS stack and you want the cleaner with the broadest coverage and the cheapest sticker price, the CleanMyDev pricing page is at /#pricing. It is a one-time $9.99 lifetime purchase, Move to Trash by default, no sudo, no account, no telemetry, no renewal, no upsell. The audit mode is free. If after the audit you decide Devpurge is the better fit for your stack, that is also a fine outcome. The category needs more than one good answer.