
# MacSift
**A transparent disk cleaner for macOS — Sequoia and Tahoe.**
See exactly what's taking up space, group it by the app that owns it,
and move everything to the Trash — never permanent deletion.
**[Website](https://lcharvol.github.io/MacSift/) · [Download latest](https://github.com/Lcharvol/MacSift/releases/latest/download/MacSift.zip) · [Release notes](https://github.com/Lcharvol/MacSift/releases/latest)**
---
## Why another disk cleaner?
Commercial Mac cleaners all have the same problem: you press a big button
and they "clean" a few gigabytes you never see. You trust them by default.
If anything important disappears, it's already gone.
MacSift is the opposite:
- Everything you're about to delete is listed, grouped, and labeled.
- Selected items go to the **Trash**, not `rm -rf`. Finder restores anything
until you empty it.
- **Dry run is on by default** for first-time users.
- Destructive actions require an explicit confirmation; deletions above 10 GB
show an extra warning.
- Zero network calls. Zero telemetry. 100 tests, all green.
- Every scan completion and cleanup run is written to
`~/Library/Logs/MacSift/macsift.log` so you can audit what the app did
without a debugger.
## Install
### Option A — Homebrew (one command)
```bash
brew tap Lcharvol/macsift
brew install --cask macsift
```
The tap lives at [Lcharvol/homebrew-macsift](https://github.com/Lcharvol/homebrew-macsift).
Since MacSift isn't notarized yet, the cask's `postflight` strips the
`com.apple.quarantine` attribute automatically — you can double-click
the installed `MacSift.app` without the right-click → Open dance.
Upgrade later with `brew upgrade --cask macsift`. Uninstall with
`brew uninstall --cask --zap macsift` to also remove settings and logs.
### Option B — Download the release
1. Download [**MacSift.zip**](https://github.com/Lcharvol/MacSift/releases/latest/download/MacSift.zip) (1.5 MB, Apple Silicon).
2. Unzip and **drag `MacSift.app` into `/Applications`** before opening it.
Gatekeeper treats apps inside `~/Downloads` more strictly, so moving it
first avoids an extra warning.
3. **First launch:** right-click (or Control-click) `MacSift.app` in
`/Applications` → **Open** → confirm the second dialog.
On macOS Sequoia (15) and later, the right-click trick no longer
bypasses Gatekeeper on its own. If you see *"Apple could not verify
'MacSift.app' is free of malware"*, open **System Settings → Privacy
& Security**, scroll to the bottom, and click **Open Anyway**
next to the MacSift entry. Relaunch the app — you'll be prompted
once more, then every subsequent launch is silent.
Gatekeeper asks because the app is ad-hoc signed, not notarized
(no paid Apple Developer account). Building from source (Option B)
is the workaround if you'd rather not go through this.
4. Grant **Full Disk Access** in System Settings → Privacy & Security →
Full Disk Access.
### Option C — Build from source
Same binary, verified from the source tree.
```bash
git clone https://github.com/Lcharvol/MacSift.git
cd MacSift
./build-app.sh && open MacSift.app
```
The build script produces a signed `.app` bundle in one step. macOS 15
(Sequoia) or later and Apple Silicon are required to run; Xcode 26
command-line tools are required to build (the project uses Swift 6.0 and
opts into macOS 26 Liquid Glass APIs at runtime, but degrades gracefully
on Sequoia).
## What it does
- **Scans** `~/Library/Caches`, `~/Library/Logs`, `~/Library/Application Support`,
`/tmp`, `/private/var/log`, and your entire home directory for large files.
- **Detects** Time Machine local snapshots and iOS device backups (device
name + date read from `Info.plist`).
- **Classifies** every file into one of eleven categories:
Caches · Logs · Temporary Files · Unused App Data · Large Files ·
Time Machine Snapshots · iOS Backups · **Xcode Junk** · **Dev Caches** ·
**Old Downloads** · **Mail Attachments**.
- **Groups** by owning app. `~/Library/Caches/com.apple.Safari/*` — 15,000
files — shows up as a single **Safari** row. One decision, not fifteen thousand.
- **Orphan detection** — `Application Support` folders are only flagged as
`.appData` if their owning app is no longer installed in `/Applications`.
- **Inspector panel** with Reveal in Finder, Quick Look, Copy Path, and
a live preview of the top 5 largest files in any selected group.
- **Moves to Trash** via `FileManager.trashItem`. Never a permanent delete.
## Keyboard shortcuts
| Shortcut | Action |
|----------|--------|
| `⌘R` | Start / restart scan |
| `⌘.` | Cancel scan |
| `⌘A` | Select all safe items |
| `⌘⇧A` | Deselect all |
| `Esc` | Dismiss cleaning preview |
Drop any folder on the window to scan just that folder.
## Safety at the engine level
- `/System`, `/usr`, `/bin`, `/sbin` are **hard-blocked** in `CleaningEngine`
before any delete call — not just hidden in the UI.
- Application Support folders that belong to still-installed apps are
never surfaced.
- Dry run is **on** by default for new installs (`AppState.init` seeds it
to `true`).
- The cleaning flow can't be triggered without passing through
`CleaningPreviewView` and an explicit confirmation alert.
- Selection is stored as a `Set