Repository navigation
OpenClean 0.2.0
OpenClean's first release: an open-source, transparent cleaner for macOS. Every cleaning rule is
readable YAML, anything that isn't trivially regenerable goes to a quarantine you can restore from, and
there are no accounts or analytics.
Highlights
- Smart Scan: system junk, user caches and logs, browser caches, Trash, Mail attachments, old iOS
backups, developer caches (Xcode, npm, Yarn, pnpm, pip, Cargo, Gradle, CocoaPods, Homebrew) and AI
model caches (Ollama, LM Studio, Hugging Face). - Uninstaller: removes an app together with its
~/Libraryleftovers as one quarantine session, so
an uninstall can be undone. - Space Lens: an interactive disk map, a large & old files finder and a duplicate finder. Removals go
to the Trash and nothing is pre-selected. - Performance and menu bar: live CPU and memory in the menu bar, heavy apps with Quit/Force Quit,
launch agents and maintenance tasks. - Safe by design: Safe / Review / Caution levels, a hard deny-list, checks just before each removal,
and History and Restore for 1–90 days. - Software Update: a daily check against GitHub (can be turned off); updates are verified against
the release checksums and the developer signature, installed in place, and the previous version stays
in History. - CLI:
openclean scan/cleanwith JSON output, for scripts and CI.
The app is signed with a Developer ID and notarized by Apple.
All changes
First tagged release (baseline 0.1.0 from Info.plist).
Features
- Uninstaller, Space Lens, Performance, onboarding, in-app updates and automated releases (13fd8c9)
- com.openclean bundle id and Developer ID signing groundwork (b5dfbdb)
- app: Needs password tag and admin uninstall flow in the Uninstaller (e1f677a)
- uninstaller: uninstall root-owned apps with an administrator password (4d8f1af)
- privilege: typed AppBundleAdminMove root command (a60478a)
- app: Force Quit from the Uninstaller; hide apps that can't be removed (d0cfe76)
- app: Settings page in the sidebar; update fixes (230aa1f)
- app: Software Update sheet, banner and Check for Updates menu item (35269ff)
- updates: coordinator wiring and UpdateModel state machine (2e49496)
- quarantine: replace the running app with a staged update (aced5d9)
- updater: add Updater module for in-app software updates (be2e048)
- app: animated onboarding with Full Disk Access setup (cdaf197)
- app: force quit from the menu bar with a confirmation alert (604985c)
- app: CPU and memory icons in the menu bar (7943df2)
- app: show CPU and memory together in the menu bar (d3525e8)
- app: animate live numbers with rolling digits (3a37ce6)
- app: build Space Lens screens with sunburst map, lists and Trash flow (86c00c0)
- app: add Performance screens and menu bar monitor (d7039cb)
- app: add SpaceLensModel state for map, large files and duplicates (98ac09e)
- coordinator: expose Space Lens scans and move to Trash (23a862e)
- space: add SpaceKit size map, large/old file and duplicate finders (5bd39bc)
- app: build the Uninstaller screens (0516358)
- app: fill in PerformanceModel with demand-driven sampling (8adab71)
- app: add Uninstaller model state and actions (35f19b7)
- maintenance: add login items, launch agents and maintenance tasks (9a79da3)
- privilege: add typed, allow-listed maintenance admin commands (a41c137)
- quarantine: add TrashPolicy and TrashMover for user-picked items (b76c35b)
- kit: add Uninstaller entry points to the coordinator (10e1efb)
- quarantine: uninstall an app and its leftovers into quarantine (6d82116)
- inventory: list installed apps and find their leftovers (75226b4)
- monitor: add SystemMonitor sampling, delta math and Force Quit policy (c24e81f)
- app: native macOS redesign, new app icon and design system (67fd5ef)
- app: native macOS redesign with new theme and app icon (5f39d37)
- app: add SwiftUI screens and ad-hoc signed app bundle (51bc54f)
- app: add observable app model for scan, clean, restore and settings (4542356)
- cli: add clean, history, restore and purge scheduling commands (429d970)
- cli: add openclean scan and rules commands with versioned JSON output (06a12e3)
- rules: add bundled v1 rule packs (125f2f9)
- kit: add coordinator, settings, rule catalog and cleanup plan (2885ccf)
- permissions: detect full disk access and advise re-grant after rebuilds (bb68e26)
- quarantine: add restore, retention purge and launch agent schedule (ddfadf0)
- quarantine: add remover with admin batching and removal guard test (63c2da6)
- quarantine: add pre-delete checks and lsof open-file detection (befad9e)
- quarantine: add session manifest and store (15df958)
- privilege: add quoted admin removal command and osascript executor (ee5caf1)
- probes: add command runner and xcode, homebrew, docker, time machine probes (73a96bf)
- scan: add probe protocol and concurrent scan engine (cadea06)
- scan: add scan models, sizing and path-rule scanner (101b5ab)
- rulekit: add rule linter and app paths (8d0aad2)
- rulekit: add deny-list, path expansion and glob matcher (3c1214e)
- rulekit: add rule models and YAML rule pack loader (3eff230)
Fixes
- app: read free disk space for the coordinator's home (be9d151)
- monitor: restart the process baseline when process sampling restarts (e4433a4)
- update: detach the image when its mount point can't be used (f897d92)
- update: downloads wait for the launch cleanup of Updates/ (ddfc79b)
- spacelens: allow moving symlinks to the Trash as links (db0b503)
- performance: check a launch agent can be quarantined before stopping it (7185df6)
- performance: use the resolved home for launch item roots (faf18d1)
- uninstall: build OpenClean's paths from the resolved home (e537399)
- privilege: never chown anything the user can reach in the admin app move (c6fa1ce)
- app: square, edge-to-edge selection in the Uninstaller app list (3b12fad)
- app: menu bar switch sits at the right edge of its row (46fa5e0)
- app: align the Performance section picker with the content (c50925d)
- app: sidebar selection uses the app palette instead of system blue (320055e)
- app: keep the sidebar always visible (50cba0e)
- app: drop the logo from the CPU and memory menu bar item (879b8a4)
- app: label CPU and RAM in the menu bar (30c934d)
- app: friendlier subtitle when Smart Scan finds nothing (c242756)
- app: menu bar Smart Scan switches to the Smart Scan section (fda6fd4)
- final pre-merge safety fixes (bca3565)
- app: discard scan/clean results when exclusions or Advanced change mid-flight (9608412)
- app: guard double clean and reset stale results on settings change (2a744e1)
- cli: refuse clean --json without --yes; explain held-back items (d7f4657)
- rules: tighten bundled pack excludes and explanations (579e678)
- quarantine: remove launch agent plist when bootstrap throws (1c0e0fb)
- quarantine: contain manifest-derived paths in purge and restore (54e3500)
- processkit: avoid global-queue starvation in command runner (550ded6)
- quarantine: require root-owned sticky ancestor; verify admin removal by ENOENT (be7ba43)
- quarantine: per-item admin outcomes, sticky-aware parent guard, admin requires immediate (032b988)
- quarantine: fail closed on open-file matching and lsof parsing (acf7c4a)
- paths: fold case and canonical equivalence in path keys; byte suffix checks (d6bcd7d)
- paths: compare path containment on UTF-8 bytes (85fa669)
- privilege,rulekit: byte-based canonical path checks (6f8ac88)
- privilege: harden cancel detection, canonical paths, typed RemovalCommand (2d43f1d)
- processkit: add command timeout (9e13d59)
- scan: harden user excludes, canonical home and cancellation (8acdcc4)
- rulekit: treat newline-only text as empty; tighten linter gate tests (6a0e479)
- rulekit: make deny-list fail closed on non-canonical, case-variant and nested-bundle paths (8ff60e5)
Other
- release: sign, notarize and staple releases; PR release dry run; v0.2.0 notes (476299f)
- monitor: format the process-baseline test (f815539)
- document the Uninstaller's administrator app move (e4992f9)
- app: for-in loop for force quitting in the Uninstaller (d7e5cf1)
- brand: calmer hero banner text column (b2b5bc3)
- readme: one hero banner instead of a screenshot grid (80e44f6)
- describe Software Update, its privacy and safety rules (3ed4ff3)
- readme: list Uninstaller, Space Lens and Performance (aeced16)
- spec: align Space Lens spec with the implementation (d27759c)
- stamp the CLI version from the release version (7d923f4)
- point install at release DMG and document versioning (4755f2c)
- release automatically on merges to main (c74af9e)
- add dmg, cli-zip and release-assets make targets (984cdea)
- spec: add Space Lens, large/old files and duplicates design (79dd03c)
- uninstaller: add sub-project 2 design spec (b966513)
- spec: add Performance and menu bar monitor design (288ef44)
- compute next version and release notes from conventional commits (966c154)
- app: wire Uninstaller, Space Lens and Performance modules (27cee6d)
- shrink screenshots below 1 MB and add social preview image (7891227)
- readme: add screenshots, features and badges (5e536ae)
- add openclean-design skill for UI consistency (b9f138e)
- add AGENTS.md and CLAUDE.md agent guidance (bd1e8a6)
- add CI, release workflow, formatting and contributor docs (700f06d)
- cli: enforce temp-home isolation in CLIBinary and scope fixture lifetime (fdd0c36)
- ignore .superpowers workspace (563830f)
- add implementation plan for core + cleanup (c8ff4b4)
- add core + cleanup design spec (18f92b9)
Install
App: download OpenClean-0.2.0.dmg, open it and drag OpenClean onto Applications.
The DMG is a universal build (Apple silicon and Intel) for macOS 14 or later, signed with a Developer
ID and notarized by Apple. On first launch OpenClean walks you through granting Full Disk Access.
Updating: OpenClean checks for updates once a day (Settings → Updates) and installs them in place,
keeping the previous version in History. An update must be signed by the same developer as the app you
have, and Full Disk Access carries over.
CLI: download openclean-cli-0.2.0.zip, unzip it and run openclean-cli/bin/openclean, or
install it:
unzip openclean-cli-0.2.0.zip
sudo mkdir -p /usr/local/bin /usr/local/share/openclean
sudo cp openclean-cli/bin/openclean /usr/local/bin/
sudo cp -R openclean-cli/share/openclean/rules /usr/local/share/openclean/Verify downloads: shasum -a 256 -c SHA256SUMS.txt in the folder holding the assets.