mac app for developers
Sweep up the gigabytes your old projects left behind.
node_modules, Pods, .venv, target, Flutter and Gradle builds. Grouped by project, dated by your last commit, with the one command that brings each back.
Free to scan · one-time purchase · macOS 14+ · Apple silicon & Intel
Launching soon. The download and checkout open at launch.
Real numbers: Sweep on our own ~/Workspace. 449 folders in 142 projects, 185.8 GB. Project names changed.
node_modulesnpm · pnpm · yarn · bun.nextNext.jsios/PodsCocoaPods.venvPythontargetRust · MavenbuildFlutter.dart_toolDartandroid/app/buildGradle.cxxAndroid NDKvendor/bundleRubyvendorComposer.buildSwiftPMios/buildXcode.nuxtNuxt.svelte-kitSvelteKit.gradleGradle
by project, not by folder
find gives you a list.
Sweep gives you an answer.
Hundreds of identical node_modules lines tell you nothing. Sweep puts every folder under the project it belongs to, with the size, the last time you worked on it, and whether it's safe to let go.
$ find ~/Workspace -name node_modules -prune
./ReactNative/payroll-app/node_modules
./ReactNative/sales-manager/node_modules
./ReactNative/event-booking/node_modules
./NextJS/client-portal/node_modules
./NextJS/blog/node_modules
./Flutter/world_clock/node_modules
./ReactNative/crm-mobile-old/node_modules
./NextJS/saas-kit/node_modules
./Experiments/todo-2023/node_modules
./NextJS/landing-v2/node_modules
./ReactNative/health-tracker/node_modules
./Clients/acme/web/node_modules
… 74 more✕ no sizes · no dates · no idea which ones matter
Sweep · ~/Workspace
node_modules2.4 GBnpm ciios/Pods2.0 GBbundle exec pod installandroid/app/build841 MBnpx react-native run-android
✓ sized · dated · grouped · each with its way back
Measured with Sweep on one developer's Mac, October 2026.
how it decides
It knows when you last cared.
Not when a folder was modified, but when you last worked on the project it belongs to.
Pre-selected for one-click sweeping.
Listed, never pre-selected. Tick them yourself.
Hidden by default. You're using these.
Your last commit, checkout or pull
Read straight from .git/logs/HEAD, the reflog. No git process, no network, and it knows the difference between a fetch and actual work.
The last file you edited yourself
The newest file in the project, ignoring lockfiles, generated code and the junk folders. An npm install doesn't make a dead project look busy.
Clones you never touched
A repository whose only history is "clone" is something you looked at once. After 2 months it counts as Safe on its own.
Projects you pin
The side project you open twice a year never shows up as stale, however long it has been.
restore before remove
Get any of it back in one line.
Deleting feels safe when you know the way back. Sweep reads the lockfile and project files next to every folder and shows the exact command, before you confirm anything.
Workspaces resolve to the root that owns the lockfile. React Native Pods go through Bundler when there's a Gemfile.
↺ restore commands Sweep detects
- npm
npm ci - pnpm
pnpm install - yarn
yarn install - bun
bun install - Next.js
npm run dev - CocoaPods
bundle exec pod install - React Native
npx react-native run-android - Expo
npx expo run:ios - Flutter
flutter pub get - uv
uv sync - Poetry
poetry install - pip
pip install -r requirements.txt - Rust
cargo build - Maven
./mvnw package - Composer
composer install - SwiftPM
swift build
safety
Bold with junk. Careful with everything else.
Name plus proof
A folder counts only when its name and a project file next to it agree: Pods with a Podfile, target with Cargo.toml. A website template's assets/vendor is left alone.
Never what git tracks
If git tracks even one file inside a folder, Sweep doesn't list it. On our Mac that kept 19 committed folders out, from android/build to a library's dist.
Skips folders in use
A running next dev, Metro bundler or Gradle daemon holding files in a folder? It's skipped and Sweep tells you which process.
Restore before remove
Every folder shows the command that rebuilds it, picked from your lockfile, before you confirm. In the app, in the confirm sheet, in the export.
Measured, not guessed
Sizes count hard links once, pnpm stores are handled honestly, and after each clean Sweep shows what your disk actually got back.
Trash or delete, your call
Delete for instant space, or Move to Trash if you want a second chance. Bulk selection only ever includes the Safe bucket.
and the caches behind them
Another 58.8 GB in your home folder.
Package managers keep a copy of everything they ever downloaded. Sweep lists those caches separately, never bulk-selects them, and shows each tool's own clean command (like pnpm store prune) as the gentler option.
pricing
Scan free. Sweep once you're sure.
Pay once, no subscription. Updates for version 1 included.
Free scan
$0
- Scan every project folder you have
- Sizes, buckets and last activity
- Restore command for every folder
- Global caches overview
Sweep
$7.99one time
- Everything in the free scan
- One-click Clean All Safe, or project by project
- Ignore list, pins, weekly scan and menu bar total
- CSV report of what was found and cleaned
- 3 Macs per license · 14-day refund
Then $9.99 as launch seats sell out. Secure checkout by Polar.
Launching soon. The download and checkout open at launch.
Is it safe to delete node_modules?
Yes. node_modules, Pods, .venv, target and build folders are all recreated from your lockfile or project files. Sweep shows the exact command for each one (npm ci, pnpm install, pod install, uv sync, cargo build...) before you delete anything. The cost is time: a big React Native project takes a few minutes to install again.
What does the free version do?
Everything except deleting. Scan as many folders as you like, as often as you like, and see every project with its size, last activity and restore command. Cleaning needs a license.
How does Sweep know a project is stale?
From your git history (the last commit, checkout or pull on this Mac, read straight from .git without running anything) and the newest file you edited yourself. Lockfiles and generated files don't count, so an npm install doesn't make an old project look busy. Untouched for 6 months is Safe, 1 to 6 months is Caution, anything newer is hidden.
Can it delete something I need?
Sweep only lists a folder when both its name and a project file next to it match (node_modules, or Pods next to a Podfile, or target next to Cargo.toml). Anything git tracks is never listed, folders a running process is using are skipped, and you can pin projects so they never count as stale.
Why not npx npkill or find . -name node_modules?
Both are great for one Node project at a time. Sweep covers every ecosystem at once (Node, Flutter, CocoaPods, Python, Rust, Gradle, Ruby, PHP, Swift), groups folders by project instead of listing hundreds of identical names, tells you when you last worked on each, and remembers how to bring them back.
Does it need Full Disk Access?
No. You choose the folders to scan. If one is in Desktop or Documents, macOS asks once, as it does for any app.
Does it work with pnpm?
Yes, and honestly. pnpm hard-links node_modules into a shared store, and a project you duplicated in Finder shares its files with the original, so deleting either frees less than its size suggests. Sweep measures what each folder would really free, and after a clean shows what your disk actually got back.
Does anything leave my Mac?
Scans never leave your Mac. The only network requests are the license check (your key and your Mac's model name, never its computer name) and update checks.
How many Macs can I use it on?
Three. Move a license any time with Deactivate This Mac in Settings, or from your purchase page.
Is it a subscription?
No. Pay once, keep it, and get every version 1 update. There's a 14-day refund if it isn't for you.
Which Macs does it run on?
macOS 14 Sonoma or later, on Apple silicon and Intel.
Sweep your projects.
See what's there for free. It takes about a second to find it all.