Your old projects are hoarding gigabytes.

RepoSweep finds the node_modules, build folders and virtual environments your tools can rebuild in minutes, and moves them to the Trash. Your source code is never touched.

Soon For macOS 15 Sequoia and later
RepoSweep
Project Ecosystems Last activity Status Reclaimable
8 projects scanned · — reclaimable
Scanned just now

Try it: pick some projects, move them to the Trash, then put one back.

Only what your tools can rebuild

RepoSweep works from a fixed list of 33 rules across eight ecosystems. If a folder isn't on the list, it isn't offered.

Node
node_modules.next.nuxt.svelte-kit.turbo.angular/cachecoverage
Python
.venvvenv__pycache__.pytest_cache.mypy_cache.ruff_cache
Xcode & Swift
DerivedData.buildbuildPods
Rust
target
.NET
binobj.vsTestResults
Dart & Flutter
.dart_toolbuild
Go
vendor
C & C++
buildcmake-build-debugcmake-build-release

See every rule and how to rebuild each folder

Nothing is deleted. Ever.

A folder called build could be anything. RepoSweep needs proof before it offers one, and checks again right before it moves it.

photo-tagger/
├── pyproject.toml     the project marker
├── src/
└── .venv/
    ├── bin/
    ├── lib/
    └── pyvenv.cfg     proof it was generated

A .venv is only offered when it sits next to a Python project file and contains pyvenv.cfg. A Rust target needs Cargo.toml beside it and CACHEDIR.TAG inside.

Right before each move, it checks again

If anything changed since the scan, the item is skipped and you're told why.

  1. It's the same folder that was scanned, not a symlink or a replacement.
  2. It's inside one of your scan locations, reached without following links.
  3. Its rule still matches, marker and proof included.
  4. It holds no .git folder, project files, .env files or lockfiles.

Trash, not delete

Items go to the Trash, where you can see them. There's no delete command in the app at all, and a test fails if one is ever added.

Put anything back

Cleanup History ⌘Y lists everything RepoSweep moved. Put Back returns an item to where it was, and never overwrites anything already there.

Dry run comes first

Out of the box, every safety check runs but nothing moves. Turn dry run off in Settings once you trust what you see.

See which projects you've moved on from

Each project is labelled by your last commit, checkout, merge or pull. Projects outside Git use their newest file change.

Active

You're working on it.

Older

Touched in the last few weeks.

Inactive

Probably safe to clear. You decide.

Your thresholds, your call

Change the 7 and 21 days in Settings. Labels only inform you. RepoSweep never selects anything for you.

Warned about committed files

If a folder contains files committed to Git, it's tagged Tracked by Git so clearing it won't surprise you in git status.

Built for the Mac, and only the Mac

A native SwiftUI app that stays out of your way.

  • Lives in the menu bar. See how much you could reclaim and start a scan without opening a window.
  • Rescans on its own. If the last scan is more than a day old, it refreshes in the background.
  • Runs nothing. It reads Git's files directly instead of calling git, and never crosses into other volumes.
  • Keeps its data readable. Settings, the last scan and the cleanup log are plain files in Application Support.
RepoSweep app icon

Soon.

RepoSweep is almost ready. It'll run on macOS 15 Sequoia and later.