Skip to content

Repository files navigation

DClutter

DClutter

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.

CI Platform Swift Stars License

Release Downloads


What this is

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.

How it works

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.

Controls

Keyboard is the primary interface; every action has a pointer equivalent.

Keyboard

Key Action
Keep, next card
Stage for trash, next card
Space Skip — comes back at the end
13 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

Trackpad and mouse

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

Install

⬇ Download DClutter 1.0.0  ·  all releases

Then, because this app isn't signed by Apple, macOS needs you to approve it once:

  1. Unzip it and drag DClutter.app into your Applications folder.
  2. Double-click it. macOS will refuse to open it — this is expected.
  3. Open System Settings → Privacy & Security, scroll to the bottom, and click Open Anyway next to DClutter.
  4. 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.xcodeproj

Then 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.

Building

Requires Xcode 16+ and macOS 14+.

open DClutter.xcodeproj

The core logic is a standalone SwiftPM package and its tests run without Xcode:

swift test --package-path DClutterKit

Architecture

Three 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.

Safety rules

These hold on every commit and are covered by tests:

  1. No code path calls removeItem on a user file — only trashItem.
  2. Nothing outside ~/Downloads or a folder you explicitly chose is touched.
  3. Staged files are untouched on disk until you confirm.
  4. A move registers its undo before the file is touched, never after.
  5. Session state is written after every decision, so quitting loses nothing.

Status

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.

License

Apache-2.0. See LICENSE.

About

Swipe-based file triage for macOS. One file at a time: keep it, trash it, or file it with a key or a gesture.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages