Native SwiftUI utility for macOS 14+ that finds reclaimable disk space, uninstalls apps with leftovers, explores disk use, cleans developer/AI toolchains, finds duplicates and similar photos, monitors system resources, and can schedule Smart Care — all on-device.
| Download | MacCleaner 0.3.0 (DMG) · ZIP · Releases |
| Homebrew | brew tap mponzo/maccleaner https://github.com/mponzo/MacCleaner && brew trust mponzo/maccleaner && brew install --cask maccleaner |
| Site | mponzo.github.io/MacCleaner |
| License | MIT |
Universal binary (Apple silicon + Intel). UI in English, Italian, German, French, Spanish, Portuguese (Brazil), Japanese, Simplified Chinese, Greek, and Russian.
DMG
- Download MacCleaner 0.3.0
- Open the disk image and drag the app into Applications
- Launch MacCleaner
Builds from v0.2.5+ are Developer ID signed + notarized. Gatekeeper should open the DMG/app without the “Apple cannot verify” dialog.
Homebrew
brew tap mponzo/maccleaner https://github.com/mponzo/MacCleaner
brew trust mponzo/maccleaner
brew install --cask maccleanerbrew upgrade --cask maccleaner # later
brew uninstall --cask maccleaner # removeSame scan/clean engines as the app — interactive TUI on a real terminal, or scriptable flags. No telemetry.
Install on PATH (after the GUI app is in Applications):
# Prefer Homebrew’s bin if you use brew:
ln -sf "/Applications/MacCleaner.app/Contents/MacOS/OpenCleanMyMac" "$(brew --prefix)/bin/maccleaner"
# Or any directory already on your PATH, e.g.:
# sudo ln -sf "/Applications/MacCleaner.app/Contents/MacOS/OpenCleanMyMac" /usr/local/bin/maccleanerWithout a symlink you can still call the binary directly:
"/Applications/MacCleaner.app/Contents/MacOS/OpenCleanMyMac" doctor
"/Applications/MacCleaner.app/Contents/MacOS/OpenCleanMyMac" clean --dry-runBuild from source (release CLI product):
cd OpenCleanMyMac
swift build -c release --product maccleaner
ln -sf "$(pwd)/.build/release/maccleaner" "$(brew --prefix)/bin/maccleaner"
# or run in place: .build/release/maccleanerUsage
maccleaner # interactive workspace (TTY)
maccleaner clean # scan → select paths → review → type yes → Trash
maccleaner orphans # interactive orphan selection (TTY)
maccleaner --plain # numbered prompts instead of full-screen TUI
maccleaner doctor # FDA, Homebrew, privileged bridge
maccleaner scan --json # read-only summary
maccleaner clean --dry-run # preview default Smart Care selection
maccleaner clean --confirm # Trash default selection (no TUI)| Key | Action (TUI) |
|---|---|
| ↑ / ↓ | Move |
| Space | Toggle item |
| A / N | Select matching / clear |
| / | Search |
| Enter | Review / continue |
| Esc / Q | Cancel |
Interactive cleanup asks you to type yes before anything goes to the Trash. System-privileged categories need --include-privileged. A dedicated Homebrew formula for the CLI (separate from the cask) is still on the roadmap.
Runs a multi-category scan and lets you pick what to free. Progress is per category; you can Stop mid-scan or mid-clean. Selected user items go to the Trash. Paths can be excluded from future cleans (Settings or from category detail).
| Category | Location / notes |
|---|---|
| User caches & logs | ~/Library/Caches, ~/Library/Logs |
| Trash | ~/.Trash |
| Xcode | DerivedData, Archives |
| Dev tool caches | npm, Homebrew, pip, Gradle, Yarn, pnpm, Cargo… |
| AI app data | Ollama, LM Studio, Hugging Face caches (never auto-selected) |
| Downloads | Files older than 30 days; *.dmg / *.iso |
| Browsers | Safari, Chrome, Firefox, Edge caches |
Mail Downloads; MailData under ~/Library/Mail |
|
| Large & old files | Downloads / Documents / Desktop — >100 MB or older than 1 year (never auto-selected) |
| Leftovers / agents | Orphan prefs & containers; broken user Launch Agents |
| Large folders | Top folders under Home (measure only) |
| System (optional) | /Library/Caches, logs, system agents — password + path allowlist |
Lists user apps, estimates bundle + leftover size, and finds related files under Preferences, Caches, Application Support, Logs, Saved State, Cookies, Containers, Group Containers, Launch Agents, Crash Reporter, HTTPStorages, WebKit, and Application Scripts. Matching sensitivity is Strict / Enhanced / Deep (Team ID, vendor prefixes, Spotlight under ~/Library on Deep). System apps cannot be uninstalled from here. Bundles under /Applications use Finder recycle with an admin fallback when needed.
Drag a .app onto the Applications view, or use Finder → Services → Uninstall with MacCleaner, to open the same review flow.
Scans Library leftovers whose bundle ID no longer matches an installed app, then lets you select and Trash them — dedicated hub for post-uninstall debris.
Pick a folder; MacCleaner groups exact copies by size + SHA-256. Hard links collapse to one entry. Each group keeps one protected copy; you choose which extras go to the Trash. Packages, symlinks, and hidden items are skipped.
Visual estimate from local thumbnails only (up to 500 photos / 10,000 directory entries). Groups likely matches for side-by-side review and Reveal in Finder. Photos are never deleted or uploaded — similarity is an estimate, not proof of identity.
User Launch Agents (flag broken ones, remove selected from the user domain) plus local Time Machine / APFS snapshots you can thin selectively.
Focused reclaim of toolchain caches (Xcode DerivedData/Archives, Core Simulator, npm, Homebrew, pip, Gradle, and similar) plus:
- Simulator runtimes via
simctl(permanent delete, never auto-selected) - Docker data folders and optional
docker builder prunewhen Docker is installed - AI tools — Ollama / LM Studio folders (also listed in Smart Care as AI App Data)
Folder targets go to the Trash; simctl / Docker prune actions are permanent and labeled as such.
Interactive folder browser: pick Home, Applications, or any directory, drill into children with sizes, and open paths in Finder. Replaces the old chart-only Space Lens view.
Read-only overview of APFS purgeable space (optional thin-snapshots helper), a TCC permission inventory for your user domain, Full Disk Access status, and deep links into System Settings / browser privacy panes. No silent permission changes.
Local-only log of successful cleanups (Smart Care, Schedule, uninstall, orphans, duplicates, developer, startup, System Monitor). Shows lifetime / 30-day totals, a 14-day freed-space chart, and a share card you can export or copy as text — nothing is uploaded.
Optional background Smart Care while the app stays in the menu bar. Choose an interval (hourly → monthly), optionally auto-clean when reclaimable space meets a MB threshold, and run a cycle immediately from Settings.
Live System Monitor aligned with common cleaner apps:
- Host CPU / memory / disk / uptime with correct CPU delta sampling
- Apps & processes with icons, live CPU%, memory, search, sort (CPU / memory / name), and helper grouping
- Option to show all user apps/processes (system processes stay in Activity Monitor)
- Maintenance helpers (DNS flush, Mail VACUUM, APFS snapshot thinning, Launch Services) and a link to Startup
The menu bar glass panel continues to show live meters while MacCleaner stays resident.
Dedicated sidebar for outdated Homebrew casks (when brew is installed): review versions, select which apps to upgrade, stop mid-batch, and open Mac App Store updates for apps Homebrew does not manage.
Compares this MacCleaner build to releases/version.json / GitHub Releases. Includes a compact Homebrew cask summary with a link to the full App Updates screen.
Glass status panel (disk, RAM, battery, CPU, network, activity). Closing the main window keeps the app in the menu bar.
First launch walks through Full Disk Access (open System Settings, recheck, continue). Settings also show FDA status, FileVault / Gatekeeper read-only status, language (System / EN / IT / DE / FR / ES / pt-BR / JA / zh-Hans / EL / RU), cleanup exclusions, menu bar / Dock, launch at login, and install/remove from ~/Applications. Full quit is Settings → Quit only. Category detail (and Startup when opened from Performance) include a Back control.
Shortcuts: ⌘R Smart Care · ⌘K clean selected · ⇧⌘U refresh apps · ⇧⌘P refresh performance
MacCleaner is built so you can see the path before anything moves:
- Scans and cleanup work offline (updates only contact GitHub when you ask; Homebrew cask checks use local
brew) - No accounts, subscriptions, or product analytics
- User cleanup uses
trashItem(macOS Trash), not a silent wipe - Elevated system paths go through an admin prompt and an allowlist
- Not positioned as antivirus or a “RAM / purgeable space booster”
Privileged-helper notes: docs/PRIVILEGED_HELPER.md.
Needs Xcode / Swift toolchain.
pip3 install --user dmgbuild # branded DMG window (background + icon layout)
./Scripts/package-app.sh # → dist/MacCleaner.app + releases/MacCleaner-<version>.{dmg,zip}
./Scripts/install.sh # copy into ~/ApplicationsRegenerate the DMG artwork (optional): python3 Scripts/render-dmg-background.py
Or run the SPM target directly:
cd OpenCleanMyMac
swift build
swift runSPM products: OpenCleanMyMac (GUI) and maccleaner (same target). End-user install/usage: see Install → Command line.
cd OpenCleanMyMac
swift build
.build/debug/maccleaner --help
.build/debug/maccleaner doctorLegacy headless flags still work (--scan-once, --apps-once, --perf-once, --priv-once).
OpenCleanMyMac/Sources/OpenCleanMyMac/
App/ Core/ Features/ Localization/ Resources/ UI/
Scripts/ Casks/ docs/ releases/
Bundle id: com.maccleaner.app · SPM product: OpenCleanMyMac.
Landing site (Nuxt → GitHub Pages): npm install && npm run generate — see .github/workflows/nuxtjs.yml.
Planned in roughly this order (CLI first, then the high-value list we are tracking):
- Privileged helper via signed
SMAppService(replace interactive password prompts for allowlisted system paths) - Homebrew formula for CLI —
maccleaneralready ships in-tree; PATH via app symlink is documented - Smart Care result filters — path search, size/age filters, select-visible, exclude from context menu
- Protection hub — Firewall / SIP / XProtect / Gatekeeper as a config audit (not antivirus)
- FDA retry after grant — re-run the batch that failed without Full Disk Access
- Orphan ignore list — persistent skip for false-positive leftovers
- Empty Trash on external volumes (opt-in)
Later / niche:
- Modern Login Items (System Settings)
- In-app DMG auto-update
- Hidden-files browser
Explicitly out of scope: RAM boosters, reclaiming purgeable space as “junk”, and fake malware / FUD claims.
MIT. Contributions welcome via PR.