Only what your tools can rebuild
54 rules across 15 ecosystems.
- Node
- Python
- Xcode & Swift
- Rust
- Java & Kotlin
- .NET
- Go
- Dart & Flutter
- C & C++
- Ruby
- PHP
- Unity
- Godot
- Elixir
- Terraform
Nothing is deleted. Ever.
A folder called build could be anything. Shavings
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.
- It's the same folder that was scanned, not a symlink or a replacement.
- It's inside one of your scan locations, reached without following links.
- Its rule still matches, marker and proof included.
-
It holds no
.gitfolder, project files,.envfiles or lockfiles.
Trash, not delete
Items go to the Trash, where you can see them. There's no delete command in the app, and a test checks the code for calls that delete files.
Get anything back
Cleanup History ⌘Y lists everything Shavings moved and whether it's still in the Trash. Show in Trash selects it in Finder, and Finder's Put Back returns it to where it was.
Try it without moving anything
Turn on dry run in Settings and every safety check runs, but nothing moves. You see exactly what a cleanup would take.
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.
You're working on it.
Touched in the last few weeks.
Probably safe to clear. You decide.
Your thresholds, your call
Change the 7 and 21 days in Settings. Labels only inform you. Shavings 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.
See where the space went
Go after the biggest wins first, and leave alone what you want to keep.
Breakdown by ecosystem
The overview splits reclaimable space by ecosystem, activity and kind of folder. Click an ecosystem to list only its projects. Check a few items and it adds up just those.
Clean a whole project
Done with a project? Clean Project moves all of its rebuildable
folders to the Trash in one go. Source code, .git,
lockfiles and config stay put, and every item still gets the
same safety checks.
Ignore what you want kept
Right-click a project and choose Ignore Project, or add whole folders in Settings. Ignored places are skipped by every future scan.
Built for the Mac
- 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 your projects private. No account needed. Shavings doesn't upload your file names, paths or scan results.
- Keeps its data readable. Settings, the last scan and the cleanup log are plain files in Application Support.
One price, every Mac you use
- 14-day free trial. No account and no card.
- Every Mac you use. For your own projects and your work. Buying for a team? Email support@shavings.app for volume pricing.
- Free updates. Every Shavings 1 release.
- 14-day refund. Not happy? Ask within 14 days and get your money back, no questions asked.
$9.99 plus VAT or sales tax, paid once
Coming soon
Your total, with the tax for your country, is shown at checkout before you pay. Payments handled by Paddle. Terms