Sweep the rebuildable.Keep the keys.

Sweepkey clears node_modules, DerivedData, build folders and developer caches from your Mac, and keeps your .env files and signing keys safe in a vault before anything is deleted.

Download for Mac

Version 0.1.0, 8 MB, for macOS 26 or later.

Preview build: this DMG is not notarized yet, so macOS will warn when you open it.

brew install --cask thisisprabhat/tap/sweepkey

Free and open source under the MIT licence.

A tour of Sweepkey: the Dashboard's reclaimable space by category, the Caches list, cleanup History, cleaning Rules and Recipes.

Finds rebuildable folders across 20+ ecosystems

JavaScript and TypeScript, Python, Swift and Xcode, Flutter, Android and Gradle, Rust, Go, .NET, C/C++, Elixir, Haskell, Ruby, PHP, Zig, Scala, Bazel, Terraform, Unity, Unreal, and the caches of the tools around them.

  • JavaScript
  • Node.js
  • Python
  • Swift
  • Xcode
  • Flutter
  • Android
  • Kotlin
  • Gradle
  • Rust
  • Go
  • .NET
  • C++
  • Elixir
  • Haskell
  • Ruby
  • PHP
  • Zig
  • Scala
  • Bazel
  • Terraform
  • Unity
  • Unreal Engine
  • Docker
  • npm
  • pnpm
  • Yarn
  • CocoaPods
  • Homebrew
  • JetBrains
  • Hugging Face
  • Ollama

Try it: tick, sweep, keep the keys.

This demo disk works like the app. Click a folder to keep it, then sweep the rest. The secret files go to the vault first.

  1. Point it at your projects

    Add the folders where your code lives. Sweepkey only offers a folder when a marker file proves what it is: target/ next to Cargo.toml, build/ next to pubspec.yaml or build.gradle.

  2. Review the dry run

    Every folder is listed with its size, its risk level and the command that rebuilds it. Folders that git tracks are skipped, and nothing is deleted until you confirm.

  3. Sweep, keys first

    Your .env files, keystores and other files git does not have are copied into a vault, then the rebuildable folders are removed or moved to the Trash.

~/Projects

A demo disk. Click a folder to keep it, then sweep.

11.0 GB to sweep

ledger-rs
storefront-web
FieldNotes
tide_app
ml-notebooks
Freed 0 GB
Vault
  • Nothing yet

One window for every project, cache and secret.

Projects list with framework logos, last activity, reclaimable size and risk badges, and the inspector showing a project's git branch, uncommitted changes and unpushed commits. Projects list with framework logos, last activity, reclaimable size and risk badges, and the inspector showing a project's git branch, uncommitted changes and unpushed commits.

Every project, sized up

Add your project folders once. Sweepkey finds each project's rebuildable folders, shows how big they are, when you last worked on it, and the command that brings them back.

  • Results stream in live with a running total, and rescans only redo changed folders.
  • Git details at a glance: branch, uncommitted changes, unpushed commits, stashes.
  • Projects untouched for 30 days are flagged as stale, so they are safe first picks.

Conservative by design.

Sweepkey deletes files, so it treats every folder as important until it's sure it can be rebuilt.

  • Dry run first

    Nothing is deleted until you've seen the full list and total size and confirmed. The CLI has --dry-run and won't run unattended without --yes.

  • Git-tracked guard

    A folder that contains any git-tracked file is skipped, so a build/ or dist/ you committed on purpose stays put. If git can't answer, the folder is skipped.

  • Never follows symlinks

    Symlinks are never followed, and hard links are counted once.

  • Move to Trash or delete

    Delete permanently or move to the Trash, per run or as your default. Trash runs can be undone with Put Back.

  • Path guards

    Nothing outside your scan roots is removed. Your scan roots, your home folder, / and system folders never are.

  • Pinned and active projects

    Pin a project or exclude a path and it's never offered. You're warned when a project looks open in an editor or terminal.

  • Risk levels

    Every item is Safe, Caution or Danger. Danger needs an extra confirmation.

  • Vault before clean

    Optionally require a vault export before cleaning. If the export fails, nothing is deleted.

The confirmation sheet: each item with its path, risk badge and size, a total, Move to Trash or Delete permanently, and Dry Run or Clean. The confirmation sheet: each item with its path, risk badge and size, a total, Move to Trash or Delete permanently, and Dry Run or Clean.
"Sweepkey never deletes anything without your confirmation." Every clean ends on this sheet.

Sizes are shown as "up to" because APFS clones may share blocks. Unattended cleans (menu bar, schedule, Shortcuts) only touch Safe folders in stale projects, never global caches.

The same engine, scriptable.

The sweepkey command ships inside the app (Homebrew puts it on your PATH) and as a standalone zip in every release. Plan with --dry-run, read --json, and use it in scripts.

Exit codes: 0 ok, 1 error, 2 nothing to do. clean asks before deleting unless you pass --yes.

Read the CLI reference
sweepkey scan ~/Projects
Project         Ecosystems             Reclaimable  Last activity
--------------  ---------------------  -----------  -------------
web-dashboard   JavaScript/TypeScript      70.0 MB  today
rust-cli        Rust                       64.0 MB  today
flutter_shop    Flutter/Dart               36.0 MB  today
ml-experiments  Python                     30.0 MB  today

4 project(s), 200.0 MB reclaimable.
All commands
sweepkey scan [paths...] [--json] [--stale-only] [--min-size 100MB]
sweepkey clean [paths...] [--dry-run] [--trash] [--stale-only] [--rule <id>]... [--yes] [--skip-vault]
sweepkey caches [--json]
sweepkey caches clean <group-id>... [--dry-run] [--yes]
sweepkey vault collect <paths...> --to <dest> [--format folder|zip|dmg] [--uncommitted] [--scan-contents]
sweepkey vault restore <vault> [--by-remote <searchRoot>...] [--overwrite] [--dry-run]
sweepkey history [--json]

Guided jobs for common situations.

Each recipe combines cleaning and the vault, plans everything first, and shows you the result before anything is deleted.

Free Up Space

Your disk is nearly full and you need a set amount of space back.

  1. Pick how much space you need
  2. Sweepkey plans the safest items first
  3. Review the plan, then clean

Archive a Project

You're done with a project but want to keep it.

  1. Save the project's secrets to a vault
  2. Delete its rebuildable folders
  3. Optionally zip it and trash the original

Move to a New Mac

You're setting up another Mac and want your projects and secrets there.

  1. Collect secrets from all projects
  2. List every git repo and where it lives
  3. Run restore.sh on the new Mac

Questions, answered.

Is it safe?

Sweepkey is conservative by design. Every clean starts as a dry run: you see each folder, its size and its risk level before you confirm. Folders containing git-tracked files are skipped, symlinks are never followed, nothing outside your scan roots is touched, and Danger items need an extra confirmation. You can also send everything to the Trash instead of deleting it.

Why does it need Full Disk Access?

Developer projects often live in places macOS protects, like Desktop, Documents, Downloads and external drives, and some tool caches do too. Without Full Disk Access, scans silently miss those folders and deletions can fail. Sweepkey still works without it, on the folders it can read. Onboarding links straight to the right page in System Settings.

Where does my data go?

Nowhere. Sweepkey has no telemetry, no analytics and no accounts. Scans, history and the vault stay on your Mac, and vault contents leave it only if you export them somewhere yourself. The only network request is the Sparkle update check, which fetches the update feed from GitHub Releases.

Why isn't the app sandboxed?

A sandboxed app can't clean arbitrary project folders, so the App Sandbox is off for the app. The bundled widget is sandboxed. The app is signed with a Developer ID, uses the Hardened Runtime and is notarized by Apple, and the source is public so you can check exactly what it does.

How do I uninstall it?

Quit Sweepkey (turn off "Launch at login" in Settings first if you enabled it), then drag it from Applications to the Trash. To remove its data too, delete ~/Library/Application Support/Sweepkey and ~/Library/Preferences/com.prabhatkumar.Sweepkey.plist. With Homebrew: brew uninstall --zap --cask sweepkey. Vaults you exported stay where you saved them.

Is it open source?

Yes. Sweepkey is free and open source under the MIT licence, and the code is on GitHub. Cleaning rules are plain JSON, so adding support for a new tool is usually a small pull request. Releases are built by a public GitHub Actions workflow.

Which Macs does it run on?

Any Mac running macOS 26 or later. Building from source needs Xcode 27. The download is a single DMG; the sweepkey command-line tool is included in the app and is also available as a separate zip.

Will macOS warn me when I open it?

No. Every release is signed with an Apple Developer ID and notarized by Apple, and the notarization ticket is stapled to both the app and the DMG, so Gatekeeper opens it without a warning, even offline. You can check with spctl -a -vv /Applications/Sweepkey.app, which should report "Notarized Developer ID".

How does it update?

Through Sparkle 2, with EdDSA-signed updates published on GitHub Releases. Choose "Check for Updates…" in the app menu, or let it check automatically. If you installed with Homebrew, the cask is marked auto-updating, so Sparkle handles updates there too.

Get Sweepkey

Download for Mac

Version 0.1.0, 8 MB, for macOS 26 or later.

Preview build: this DMG is not notarized yet, so macOS will warn when you open it.

Open the DMG and drag Sweepkey to Applications. On first launch, Sweepkey walks you through choosing project folders and Full Disk Access.

Homebrew
brew install --cask thisisprabhat/tap/sweepkey

Installs the app and puts sweepkey on your PATH.

SHA-256
387feb9618608ec6a755a5178a4f459dd757a77e1eafc83eb18eef4f109d943e

Verify with shasum -a 256 ~/Downloads/Sweepkey-0.1.0.dmg

Other downloads