2026·In development
Mac Cleaner
Native macOS cleanup utility
- Role
- Builder
- Timeline
- 2026 — in development
- Stack
- Swift · SwiftUI · macOS 15 · MVVM + Observables
- Links
- Coming at release

Context
The problem
Mac cleanup utilities are a category of dark patterns: paid apps that invent problems, nag screens, and background daemons that cost more than the disk space they recover. The actual job — finding stale dev caches, duplicate files, orphaned app leftovers — is well-defined and doesn't need a subscription. It needs trustworthy classification: knowing what's safe to remove and saying so honestly.
Ownership
My role
Solo build — and a deliberate excuse to go deep on native Swift development after years of web platforms.
Solution
Approach
The safety model is the product
Every finding is classified into three tiers: green for things that regenerate themselves (node_modules, build caches, DerivedData), orange for slow-to-rebuild or mixed data (simulator runtimes, Docker), red for anything touching user data. Orphaned app leftovers get a confidence score before they're even shown. And nothing is ever hard-deleted — everything goes to the Trash, recoverable.
Seven scanners, one engine
Dev junk across 18 categories of build artifacts and package caches; two-pass duplicate detection (group by size, then hash — no false positives from same-sized files); large-file hunting; app cache analysis; a full app uninstaller that maps installed apps to their preference and support files; orphan detection for apps already gone; and an interactive disk treemap. Twelve services behind the scanners, all async/await with cancellation throughout.
Honest about file age
Cleaners that sort by 'last modified' lie on dev machines — npm pins mtimes. The 'last used' signal here is the max of four filesystem dates (added, accessed, modified, created), so a node_modules folder from yesterday never shows up as a year old.
System
Architecture
Native SwiftUI with MVVM and Observable macros, structured concurrency end to end, and a scan-then-approve flow: every scanner produces categorized, explainable findings, and every removal is explicit, user-selected, and reversible via Trash.
- 12 scanner/services — dev junk, duplicates, large files, caches, uninstaller, orphans, treemap
- Three-tier safety classification with per-finding explanations
- Trash-only removal via FileManager.trashItem — zero hard deletes
- Async/await scanning with progress reporting and cancellation
Results
Outcomes
3 tiers
of safety classification on every finding
18
dev-junk categories recognized
12
scanner services behind the UI
0
hard deletes — everything goes to Trash
- In development — shipping to GitHub as open source.
- This page will get the repository link and benchmarks at release.


Contact
Let's build something great.
Open to Senior, Staff, and Founding Engineer roles — and select freelance engagements. Reply within 24 hours, CET timezone.