Skip to main content

Open-source macOS cleaner — free up disk space safely with a local web UI. Caches, app leftovers, large & duplicate files, dev junk.

Project description

🧹 MacBroom

Open-source macOS cleaner — free up disk space safely
开源 macOS 清理工具 — 安全、可视化地释放磁盘空间

An open-source CleanMyMac alternative: scan reclaimable space → group it by app → tick and clean. Deletions go to the Trash by default and can be restored. Local-only, zero-dependency, no telemetry.

一个 开源的 CleanMyMac 替代品:扫描可释放空间 → 按软件分组 → 勾选一键清理。默认移入废纸篓、可还原;纯本地、零依赖、不联网。完整中文文档见 README.zh.md

简体中文 · English

CI License: MIT Python 3.9+ Platform: macOS PRs Welcome

MacBroom main window


✨ Features

  • Local only · zero dependencies: pure Python 3 standard library, no network calls, no telemetry.
  • Safety first: files go to the macOS Trash (not rm), restorable from Trash; system-critical paths (/System, Keychains, SSH keys, …) are hard-blocked.
  • Risk grading: every item is tagged safe / moderate / risky. Risky items (personal data, irreversible actions) are hidden by default until you tick "Show risky items".
  • Explainable leftovers: each suspected uninstall leftover shows why it was flagged (bundle id with no matching app) and can be expanded to inspect the actual files before you decide.
  • Confirm before delete (dry-run): the dialog lists every selected item with its path and reason, total count and reclaimable size; large totals (>10 GB) or risky selections get an extra warning.
  • Sort & drill-down: sort results by size or name, expand any group or item to see what is inside.
  • Audit log + in-app viewer: every scan and deletion is written to ~/Library/Logs/MacBroom/macbroom.log (override with MACBROOM_LOG_DIR), and you can review recent activity right inside the app (Settings → View activity log).
  • Grouped by app: caches and the like are grouped per app; your selection is preserved across rescans.
  • Customizable: toggle each scan category on/off; a persistent exclusion list for false positives; long scans are cancelable.
  • iCloud-aware: detects iCloud-synced folders to avoid breaking cross-device sync.
  • Respects CACHEDIR.TAG: standard cache markers are recognized so the right directories are treated as cache.
  • Covers popular apps: beyond browser/dev caches, also Slack, Discord, VS Code, Microsoft Teams, Spotify, Steam, Telegram, Minecraft.
  • Login items check: finds orphaned launch-at-login items pointing to deleted programs (the "background items" macOS warns about). User-level entries move to the Trash; system-level ones come with a sudo command for you to run yourself (never auto-elevated).
  • CLI / scripting friendly: macbroom scan --json prints a report right in the terminal for automation and CI.
  • macbroom doctor: pre-flight checks for Python, Full Disk Access, log directory, and port availability before you scan.
  • No forced deletion: items that can't be removed are listed with a copy-paste Terminal command for you to run.
  • Clean web UI: collapsible groups, group-level select-all, live reclaimable-space totals.

🔍 What it detects

Category Description
🧹 App Caches Rebuildable caches grouped by app (incl. npm/pip/Gradle/CocoaPods/Homebrew dev caches and Chrome/Edge/Brave/Arc/Firefox browser caches)
👻 App Leftovers Support files, containers, logs and preferences likely left by uninstalled apps (heuristic; review first)
🐘 Large Files Single files larger than 100 MB — find space-hungry videos / images / archives
🛠️ Dev Clutter Build products, caches, simulators and SDK temp dirs for iOS/Xcode, Android/Android Studio, HarmonyOS/DevEco Studio
🧬 Duplicate Files Byte-for-byte identical files (size → partial hash → full SHA-256), keeping the newest copy per group
🚀 Login / Startup Items Launch-at-login LaunchAgents / LaunchDaemons, focusing on orphaned entries pointing to deleted programs
Other Cleanup Diagnostic reports, iOS device backups, Homebrew leftovers, Docker images, Time Machine local snapshots, scattered node_modules, mail attachment caches, old downloads

📊 How MacBroom compares

A focused comparison on what MacBroom is built for: safe, open-source, scriptable everyday cleanup.

MacBroom CleanMyMac Pearcleaner Mole
Price Free $39.95/yr Free Free
Open source ✅ MIT ✅ Fair-code ✅ MIT
Runtime deps ✅ Python 3 stdlib · zero deps Closed Native Native
Install pip/pipx one-liner DMG DMG / brew brew
Interface Local web UI + CLI Native app Native app Command line
CLI / scriptable (--json)
Trash by default
Risk grading + risky hidden
Dry-run per-item confirm
Audit log
In-app activity log viewer
iCloud-sync aware
Persistent exclusion list
App cache cleanup
Uninstall leftovers (explainable) ✅ exact bundle-id ✅ focused
Large / duplicate files ✅ / ✅ ✅ / ✅
Dev clutter (Xcode/iOS/Android/HarmonyOS) ✅ incl. HarmonyOS ➖ Xcode
Login / orphaned startup items

✅ yes · ➖ partial/limited · ❌ no. MacBroom is for people who want an open-source, zero-dependency cleaner that installs with one pip line, is safe by default, and can be scripted into CI.

💡 Why MacBroom? — built from real cleaner failures

We collected a large amount of user feedback on pain points with rival cleaners and designed MacBroom to not repeat their most painful, real, reported accidents:

Real-world failure reported in other cleaners How MacBroom avoids it by design
A cleaner deleted a user's entire Chrome profile — logins and bookmarks gone We only target precise Default/Cache & Code Cache dirs — never the profile directory
Apple Notes / Claude Code CLI deleted as "leftovers" (matched by name, not identity) Leftover detection matches bundle id exactly; each flagged item shows why, with an expandable file list to review before deleting
Shell history wiped (~/.zsh_history) as "junk" We never scan or touch shell history
Cleanup broke iCloud sync (Desktop/Documents) We detect iCloud-synced paths, mark them risky and hide them by default
Uninstall misidentified unrelated files (~/Public, printer configs, another app's data) Bundle-id matching + risk grading + a persistent exclusion list to permanently skip false positives
Wrong / negative free-space numbers (sparse images counted by logical size) Real on-disk usage via st_blocks, so sparse VM/disk images are not over-counted
Untranslated or mistranslated UI Native-quality English and Chinese from day one, not machine-translated strings
Simulator cleanup throwing errors iOS/Xcode simulators are cleaned through the official xcrun simctl interface, not by blindly deleting paths
Long scans froze the app with no way to stop Every scan is cancelable mid-run
Orphaned login items left erroring in System Settings after uninstalls Dedicated Login Items scanner flags startup entries pointing to deleted programs

In short: other cleaners delete first and apologize later. MacBroom is designed to be un-dangerous — Trash-by-default, risky items hidden, dry-run confirmation that lists exactly what goes, and an audit log of everything it does.

🚀 Usage

Option A: pipx / pip (recommended)

pipx install macbroom      # or: pip install macbroom
macbroom                   # starts and opens the browser

Option B: run from source (no install)

git clone https://github.com/mythkiven/MacBroom.git
cd MacBroom
./run.sh                   # or: python -m macbroom

The browser opens at http://127.0.0.1:37700. Click "Start Scan", then "Clean Selected".

macbroom --port 40000      # custom port
macbroom --no-open         # don't open the browser

Option C: command-line report (headless / scripting)

macbroom doctor                                # pre-flight: Python, FDA, port, log dir
macbroom scan                                  # print per-category summary and total
macbroom scan --json                           # JSON output for scripts / CI
macbroom scan --lang en                        # force English output
macbroom scan --category caches,login_items    # scan specific categories only

🛡️ Security

See SECURITY.md for the full security model and how to report vulnerabilities. In short: local-only, Trash-by-default, protected-path hard blocks, risk grading, audit log, loopback-only with Host validation + per-session CSRF token on the delete endpoint.

🖥️ Compatibility

  • Python 3.9+ (standard library only).
  • macOS 12 (Monterey) through 15 (Sequoia) / 26 (Tahoe). On older systems, any missing path or command (e.g. simctl runtime, tmutil thinlocalsnapshots) is skipped automatically without affecting other categories.

🤝 Contributing

See CONTRIBUTING.md. MacBroom needs no third-party packages; run tests with:

MACBROOM_LOG_DIR=/tmp/macbroom-test python -m unittest discover -s tests -v

📄 License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

macbroom-1.1.3.tar.gz (76.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

macbroom-1.1.3-py3-none-any.whl (76.5 kB view details)

Uploaded Python 3

File details

Details for the file macbroom-1.1.3.tar.gz.

File metadata

  • Download URL: macbroom-1.1.3.tar.gz
  • Upload date:
  • Size: 76.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macbroom-1.1.3.tar.gz
Algorithm Hash digest
SHA256 c8649161295fb93923d301b3cc2f730ce3d59c9b9a4198f5520c66912aac9fef
MD5 0bdb5cea3f4059c4a69d298dfc4cda28
BLAKE2b-256 2f836b77100c432ccdf6a9128077081570232f2016f62a91498a290126d73423

See more details on using hashes here.

Provenance

The following attestation bundles were made for macbroom-1.1.3.tar.gz:

Publisher: release.yml on mythkiven/MacBroom

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file macbroom-1.1.3-py3-none-any.whl.

File metadata

  • Download URL: macbroom-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 76.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macbroom-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 75892b57c1aea2c97a9c0465b1492256416055715dd8ced3848927446741c464
MD5 a9a351a50e2004313aebec133b06430d
BLAKE2b-256 dc8b2d8c308cb0eed84bb48e53cf3f17779947fdb079e8b745129eb20bcfde51

See more details on using hashes here.

Provenance

The following attestation bundles were made for macbroom-1.1.3-py3-none-any.whl:

Publisher: release.yml on mythkiven/MacBroom

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page