Skip to content
All work

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
Mac Cleaner screenshot

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.
Mac Cleaner dev junk scan listing 289 items totaling 86.68 GB across categories
Dev Junk scan — 289 items, 86.68 GB reclaimable across 18 categories
Per-path selection view with Docker data and node_modules folders staged for Trash
Per-path selection — Docker data and node_modules go to Trash, never hard-deleted

Contact

Let's build something great.

Open to Senior, Staff, and Founding Engineer roles — and select freelance engagements. Reply within 24 hours, CET timezone.

[email protected]

© 2026 Nayeemur Rahman. All rights reserved.