Swipe to clean your files.
One file at a time, with a real preview and the metadata that actually decides its fate. Keep it, trash it, or file it — with a gesture or a keystroke.
A Downloads folder tends to fill up with files we're undecided about. Measuring a real 771-item one, I found that every duplicate in it combined wasted 27 MB — half a percent. That led me to believe that for this one, space wasn't the problem, but the 771 unmade decisions were.
So DClutter is a decluttering tool, not a disk-space tool. It shows you one file at a time and asks for a single decision. Progress is measured in files resolved, never in bytes reclaimed.
It opens on ~/Downloads and needs no setup to do it. You can point it at
any other folder from the path shown in the top bar — macOS will ask you to
pick that one explicitly, because an app in the sandbox can only reach a
folder you handed it yourself.
Files are ranked rather than listed alphabetically. The score is additive — size, staleness, whether it was ever opened, whether it's a redundant copy, whether it's an archive you already extracted — so no single signal can drown out the others. Duplicates are found by filename and size, no hashing.
| Signal | Points |
|---|---|
| Size | +1 per doubling above 1 KB — 1 MB ≈ 10, 1 GB ≈ 20, uncapped |
| Time since last opened (or last modified, if never) | up to +10, ramping to a 90-day cap |
| Never opened, and it came from a download | +2 |
| Same name and size as another file | +8 |
| An archive whose extracted folder sits next to it | +4 |
| A generic name with no download source | −5 |
Size is the loudest term past about 1 MB, so the other signals mostly decide the order among files of similar size. The one negative weight exists because a generically named file you made yourself is usually not a file you want to be asked about first.
Then you decide:
- Keep — does nothing. The file stays exactly where it is.
- Trash — staged, not deleted. Nothing is touched until you review the list
and confirm. Files go to the Trash, never
unlink. - File it — moves immediately into one of three folders you choose, and is undoable.
Reversibility is matched to risk: keep is free, a move is instant but undoable, and a deletion requires an explicit confirmation of a list you can see.
Keyboard is the primary interface; every action has a pointer equivalent.
| Key | Action |
|---|---|
→ |
Keep, next card |
← |
Stage for trash, next card |
Space |
Skip — comes back at the end |
1 – 3 |
File into a destination folder |
↑ |
Open the destination shelf |
← → then ⏎ |
Choose a folder and file it |
⌫ |
Remove the highlighted folder |
Esc / ↓ |
Close the shelf |
⏎ |
Open this file |
↓ |
Rename this file |
⌘Z / ⇧⌘Z |
Undo / redo |
⌘⏎ |
Review and trash staged files |
⌘N |
Add a destination folder |
? |
Show the controls |
| Gesture | Action |
|---|---|
| Swipe right / left | Keep / stage for trash |
| Two fingers up | Open the shelf, slide across, let go to file |
| Drag back down | Close the shelf without filing |
| Double-click | Open the file |
| Right-click | Reveal in Finder, rename, copy name |
| Click the folder path | Switch folders, or add a new one |
⬇ Download DClutter 1.0.0 · all releases
Then, because this app isn't signed by Apple, macOS needs you to approve it once:
- Unzip it and drag DClutter.app into your Applications folder.
- Double-click it. macOS will refuse to open it — this is expected.
- Open System Settings → Privacy & Security, scroll to the bottom, and click Open Anyway next to DClutter.
- Click Open to confirm.
That's it. It opens normally from then on.
Why does macOS block it?
The warning says macOS "could not verify" the app. That's accurate, and it isn't a claim that something is wrong with it: verifying an app requires an Apple Developer certificate at $99/year, which this project doesn't have yet. Every unsigned app shows the same message.
What you can do instead of taking that on trust: the entire source is in this repository, and you can build it yourself in a couple of minutes (below), which skips the warning entirely because locally-built apps are never quarantined.
Build it yourself instead
An app you compile locally is never quarantined, so it just opens — no warning, no approval step. Requires Xcode 16+.
git clone https://github.com/RokiTheWise/DClutter.git
cd DClutter && open DClutter.xcodeprojThen press ⌘R.
Copied from a USB stick or your local network?
Files that never touch the internet aren't quarantined, so the app opens with no prompt at all. Nothing extra to do.
Requires Xcode 16+ and macOS 14+.
open DClutter.xcodeprojThe core logic is a standalone SwiftPM package and its tests run without Xcode:
swift test --package-path DClutterKitThree modules, with a hard boundary between metadata acquisition and everything else — so a future port reimplements one protocol rather than the whole app, and so the logic is testable without a UI.
| Module | Contains | Depends on |
|---|---|---|
DClutterCore |
Scoring, the session state machine, file metadata | Foundation only |
DClutterPlatform |
Trash, move, rename, destination bookmarks | Core |
DClutterUI |
SwiftUI views | Core + Platform |
DClutterCore never touches AppKit and never performs a destructive file
operation. It records what should happen and reports back the disk work its
caller must carry out.
These hold on every commit and are covered by tests:
- No code path calls
removeItemon a user file — onlytrashItem. - Nothing outside
~/Downloadsor a folder you explicitly chose is touched. - Staged files are untouched on disk until you confirm.
- A move registers its undo before the file is touched, never after.
- Session state is written after every decision, so quitting loses nothing.
1.0. Keep, trash, file, rename, undo/redo, gestures and folder switching all work, and I use it on my own machine.
The app is meant for use at the end of a semester or a project, when the folder has gotten out of hand. Clear it once, then you won't need it again for a while. That's the whole shape of it — there's no roadmap of features it's waiting on.
I'm not notarizing it for now, so the one-time approval step above stays. That needs a paid Apple Developer account, and if this picks up enough support to justify one, I'll get it. In the meantime the source is all here, and building it yourself skips the warning entirely.
Apache-2.0. See LICENSE.