English · 简体中文 · 日本語 · Deutsch · עברית
A review-first Mac cleaner and storage analyzer, built especially for developer machines.
SparkClean is a native macOS disk cleaner that combines a cache cleaner, storage
analyzer, duplicate file finder, and app uninstaller in one SwiftUI app. It finds
rebuildable caches, stale files, Xcode and node_modules artifacts, unused apps, Docker
resources, duplicate files, and other space you may want back. Every result is grouped
by risk, visible before cleanup, and moved to Trash by default.
There are no accounts, subscriptions, analytics, or telemetry. Scanning and cleanup happen locally on your Mac. SparkClean is source-available and free for personal, educational, academic, and other non-commercial use under the included license.
▶ Watch SparkClean in action on YouTube
- Download the latest DMG from GitHub Releases.
- Drag SparkClean to Applications, then open it.
- Grant Full Disk Access if you want complete coverage of protected locations.
- Click Scan, review the selected categories and paths, then click Clean.
- Empty Trash when you are satisfied, or use Restore Last Cleanup first.
You can also open one category in the sidebar and click Scan Category Name. This refreshes only that tab instead of running the full scan.
| Area | What it does |
|---|---|
| Cleanup scan | Finds caches, logs, old downloads and installers, stale temporary files, browser data, app leftovers, large files, unused apps, broken links, and more. |
| Developer cleanup | Covers Xcode, simulators, node_modules, Rust targets, Python environments, JetBrains tools, Homebrew, CocoaPods, Composer, pip, npm, Yarn, pnpm, Deno, Bazel, and other common toolchains. |
| Docker and Ollama | Measures reclaimable Docker resources and installed Ollama models, then uses their official CLIs for approved cleanup. |
| App Uninstaller | Finds installed apps and related preferences, caches, containers, logs, crash reports, and support data. Each related location can be reviewed separately. |
| Duplicate Finder | Detects byte-identical files with size, header, and SHA-256 checks. Similar-image suggestions are clearly separated and require individual review. |
| Disk Map | Builds a read-only view of top-level files, user data, protected space, APFS volumes, shared blocks, and container usage. |
| Storage Insights | Tracks the size and change of high-value stores such as chat apps, Photos, Mail, iOS backups, simulators, Docker, and virtual machines. This view is read-only. |
| Time Machine | Lists local APFS snapshots and can remove selected older snapshots through tmutil; the newest snapshot is kept as a restore point. |
| Startup Items | Shows user agents, system agents, and daemons. User launch agents can be enabled or disabled explicitly; system agents and daemons remain read-only. |
| Maintenance | Runs selected macOS maintenance actions such as flushing DNS, resetting Quick Look, compacting Launch Services, clearing font caches, rebuilding Spotlight, and enabling APFS defragmentation. |
| Reports and audit records | Exports summary or detailed reports and keeps local scan, storage-map, cleanup, and recovery records. |
For the detailed coverage and deliberate safety exclusions, see SUPPORTED.md.
| Disk Map | App Uninstaller |
![]() |
![]() |
| Duplicate Finder | System Maintenance |
![]() |
![]() |
| Startup Items | Time Machine snapshots |
![]() |
![]() |
SparkClean labels every cleanup category before you act:
| Level | Meaning | Selection behavior |
|---|---|---|
| Safe | Low-risk caches, logs, and generated files that are expected to rebuild. | Included by Select Safe Only. |
| Review | User-owned or context-sensitive files such as old downloads, archives, models, and stale project data. | Review the category or individual paths before cleaning. |
| Caution | App data or managed stores where removal can affect content or app state. | Never included by Select All; requires explicit selection and always goes to Trash. |
Deletion is also restricted at the path level. SparkClean refuses broad home-directory targets, mounted volumes, cloud-provider storage, protected credential stores, signed application internals, and paths reached through unsafe symbolic links.
By default, selected files are moved to Trash. SparkClean records successful moves so the most recent Trash-backed cleanup can be restored with Shift+Cmd+Z. Restore it before emptying Trash; once an item is no longer there, SparkClean cannot recover it.
SparkClean reports Trash failures instead of silently switching to permanent deletion. If permanent-delete mode is explicitly enabled in Settings, it applies only where the selected Safe or Review category permits it. Caution categories still go to Trash.
The following operations are not recoverable through Trash:
- Docker resources removed with Docker CLI prune commands.
- Ollama models removed with
ollama rm. - Items that were already inside Trash.
- Items removed while explicit permanent-delete mode was enabled.
The final confirmation sheet identifies command-based and permanent exceptions before cleanup starts.
- Open Developer Tools in the sidebar.
- Click Scan Developer Tools.
- Expand categories such as Xcode DerivedData,
node_modules, Rust targets, or virtual environments. - Deselect any active project data, then clean the remaining selection.
- Open Disk Map and click Analyze Disk for a read-only APFS overview.
- Compare user files with protected and APFS-managed space.
- Use Reveal in Finder for a folder you want to inspect.
- Open Storage Insights to check large app-managed stores and their change since the previous measurement.
The cleanup total and the disk's used-space total answer different questions. Cleanup shows known, reviewable candidates; Disk Map accounts for the wider storage picture.
- Open Uninstaller and click Scan Apps, or drag an
.appinto the window. - Select the app and inspect every related location.
- Deselect preferences or support data you want to keep.
- Confirm Move to Trash. The app and only the selected related locations are removed.
- Open Duplicate Finder and click Scan.
- Expand a group and choose which copy to keep.
- Review similar-image groups one by one; they are suggestions, not exact matches.
- Click Clean Selected to move the approved copies to Trash.
| Permission | Why SparkClean may request it |
|---|---|
| Full Disk Access | Required for complete measurement of protected Mail, Messages, Safari, app containers, and similar locations. Without it, SparkClean still works but some results are partial or unavailable. |
| Files and Folders | macOS may ask before SparkClean reads locations such as Desktop, Documents, or Downloads. |
| Automation / administrator approval | Requested only for an operation that needs Finder or a privileged macOS command, including some maintenance actions and local Time Machine snapshot removal. |
| Network access | Used only for optional GitHub release checks and a download you explicitly start. Normal scanning and cleanup work offline. |
Grant Full Disk Access at System Settings → Privacy & Security → Full Disk Access, then quit and reopen SparkClean.
SparkClean does not upload file names, paths, scan results, or cleanup history. Local records can contain paths, so treat them as private when attaching diagnostics to an issue.
| Location | Contents |
|---|---|
~/Library/Logs/SparkClean/latest-scan.json |
The latest cleanup scan, including scope, settings, category sizes, and paths. Replaced by the next scan. |
~/Library/Logs/SparkClean/latest-storage-map.json |
The latest read-only Disk Map audit. |
~/Library/Logs/SparkClean/cleanup-*.log |
Bounded cleanup audit logs describing what was moved, deleted, or removed through a command. |
~/Library/Application Support/SparkClean/manifests/ |
Restore Last Cleanup manifests for Trash-backed operations. |
~/Library/Application Support/SparkClean/insights-history.json |
Daily Storage Insights measurements used to calculate changes over time. |
These records can be removed by deleting the two SparkClean folders above. Do that only after you no longer need Restore Last Cleanup.
Open Settings with Cmd+,. You can configure scan categories, unused-app age, old-file age, large-file size and locations, cleanup behavior, automatic update checks, the menu bar item, Trash monitoring, and the app language.
| App language | Scan thresholds |
![]() |
![]() |
SparkClean includes English, Simplified Chinese, Japanese, German, and Hebrew. Choose Settings → General → App Language, then restart SparkClean when prompted. Hebrew uses right-to-left text while keeping the sidebar on the familiar left side. File paths, bundle identifiers, commands, and URLs remain left-to-right for readability.
Most non-English strings were initially produced with AI-assisted translation. They are a useful starting point, but they may contain wording that feels too literal, misses the technical context, or is not how a native speaker would describe something in a Mac app.
If you speak one of the included languages, your corrections are welcome. You do not
need to review the entire app: improving a single button, sentence, or technical term is
still a valuable contribution. You can edit SparkClean/Localizable.xcstrings and open
a pull request, or open an issue
with the language, current text, and suggested replacement if you do not use Xcode.
The complete workflow is documented in the
Translation Contribution Guide.
| Simplified Chinese | Japanese |
![]() |
![]() |
| German | Hebrew with right-to-left text |
![]() |
![]() |
Translations live in SparkClean/Localizable.xcstrings. See the
Translation Contribution Guide to add or improve a language.
| Shortcut | Action |
|---|---|
| Cmd+R | Scan |
| Cmd+E | Export report |
| Shift+Cmd+A | Select all except Caution categories |
| Shift+Cmd+D | Deselect all |
| Shift+Cmd+S | Select Safe only |
| Shift+Cmd+Z | Restore Last Cleanup |
| Cmd+? | Open SparkClean Help |
| Cmd+, | Open Settings |
Files moved to Trash still occupy disk space. Empty Trash when you are sure you do not need to restore them.
The related app or tool may not be installed, nothing matched the configured threshold, the scan may have been canceled, or macOS may have blocked a protected location. Check the partial-scan notice and Full Disk Access status, then rescan that category.
No. SparkClean deliberately excludes ~/Library/CloudStorage, iCloud's
~/Library/Mobile Documents, mounted volumes, and file-provider items from cleanup.
User launch agents can be enabled or disabled with their individual switch. System agents and daemons are shown for inspection but remain read-only.
No. It measures selected app-managed stores and records daily size history. Cleanup is available only through an explicit cleanup category or tool with its own confirmation.
- macOS 14.0 Sonoma or later.
- Apple Silicon or Intel Mac.
- Xcode 26 with Swift 6.2 or later when building from source.
See SUPPORTED.md for tested hardware and compatibility details.
SparkClean has no CocoaPods or Swift Package Manager dependencies.
git clone https://github.com/georgekhananaev/spark-clean.git
cd spark-clean
open SparkClean.xcodeprojRun the SparkClean scheme from Xcode, or build from Terminal:
xcodebuild \
-project SparkClean.xcodeproj \
-scheme SparkClean \
-configuration Debug \
-destination 'platform=macOS' \
buildRun the unit tests with:
xcodebuild test \
-project SparkClean.xcodeproj \
-scheme SparkClean \
-destination 'platform=macOS' \
-only-testing:SparkCleanTests- Read CONTRIBUTING.md before opening a pull request.
- Report bugs or request features in GitHub Issues.
- Review release history in CHANGELOG.md.
- Web and multilingual product overview
- Supported cleanup coverage and safety exclusions
- Translation contribution guide
- Release, signing, notarization, and Homebrew notes
SparkClean is available under the SparkClean Non-Commercial Open Source License. Commercial use, redistribution through an app store or marketplace, and other uses outside the license require permission from George Khananaev.
George Khananaev











