A native SwiftUI app built for everyday humans who need disk space back immediately, but want byte-for-byte certainty that they aren't trashing their original files.
Requires Apple Silicon · macOS 14 Sonoma or later
Written in Swift, for macOS, and nothing else. The scanning runs off the main thread, so the window keeps answering you while it works through a few hundred thousand files.
Two kinds of weight pile up on a Mac: the build junk you never see, and the media that quietly copies itself. Deadweight goes after both.
The Downloads folder that became a junk drawer. Years of .dmg installers you opened once. The same vacation photos imported three times, an old iPhone backup, that 40 MB PDF saved in five places. Deadweight does the boring detective work, finding exact matches no matter what they’re named or where they’re hiding.
// the classic: a Downloads folder quietly holding 90+ GBXcode DerivedData. Simulator runtimes you forgot you installed. Archives from a version you shipped two years ago. A node_modules in every repo you ever cloned. Deadweight sorts them into categories you can clear without touching your projects or your configs. All of it rebuilds itself the next time you hit build.
// often 20–50 GB hiding in ~/Library/DeveloperYou imported the same card twice. The raw .ARW files live in the shoot folder and the edit folder. There are six bounce-downs of a mix you kept re-exporting. Deadweight puts the identical copies side by side, and moves the spares to the Trash while the one you are working from stays exactly where it is.
// "track_4.wav: 11 identical copies found"Most baseline search apps perform naive checks matching on filename and global size, which is a great way to lose work files that happen to share parameters. Deadweight demands proof first.
Every file is grouped by size. Anything with a unique size cannot possibly have a duplicate, so it’s dropped immediately. The cheapest filter runs first.
Surviving buckets get a fast fingerprint: the first 16 KB, the last 16 KB, and a few interior samples, hashed in parallel across your cores. Catches the obvious mismatches, including files that share a head and tail but differ in the middle, without reading whole files.
Only files that already collided get the expensive treatment: the survivors are streamed side by side in 1 MiB chunks and the actual bytes are compared, bailing at the first chunk that differs. The verdict comes from the bytes themselves, not from a hash of them, so there is no collision to gamble on. A match is a fact, not a statistical bet. (A file small enough that the head and tail reads already covered every byte of it is settled right there, because there is nothing left to read.)
A disk-cleaning app sees everything: your filenames, your folders, your life. Deadweight’s answer isn’t a privacy policy you have to believe. It’s the absence of any way to leak it. There is no backend, no account, no embedded analytics. The app simply makes no network connections at all.
Deadweight is given away directly, not sold through the App Store, so macOS will pause on first launch and ask you to confirm. It’s the same prompt every independent app triggers, and it’s a two-minute, one-time thing. Here’s the exact path for macOS Sequoia and Tahoe.
WHAT YOU’LL SEE ON FIRST LAUNCH
Apple could not verify “Deadweight” is free of malware that may harm your Mac or compromise your privacy.
Open Deadweight.dmg, then drag the Deadweight icon onto the Applications folder shown in the window.
The “could not verify” message appears (shown above). Normal for any indie app, it doesn’t mean anything is wrong. Click Done, never Move to Trash (even though it’s the highlighted one).
Near the bottom: “Deadweight was blocked…”. Click Open Anyway.
A final prompt appears with an Open Anyway button. Click it, then authenticate with Touch ID or your admin password. Deadweight launches, and won’t ask again.
macOS shields your .Trash and parts of ~/Library even from apps you’ve opened. Without access, Space Doctor can’t even see your biggest wins. It only ever reads to measure. Nothing is deleted without your confirmation.
Deadweight shows a short guide with an Open System Settings button that lands on the right pane. Or walk there yourself:
System Settings → Privacy & Security → Full Disk AccessClick +, authenticate, choose Deadweight in Applications. (Already listed? Just switch it on.)
Flip the switch on. macOS asks whether to quit the app now: click Quit & Reopen. Deadweight returns with access granted, and Scan My Mac now reaches the Trash and the system categories.
Note for Tahoe / Sequoia: the old Control-click → Open shortcut no longer bypasses this, approval lives in Privacy & Security now. If the “Open Anyway” button is missing, double-click Deadweight once more to bring it back (it expires about an hour after the block). On rare occasions macOS shows “damaged and can’t be opened” instead, this is the download quarantine flag, not a corrupt file. Open Terminal and run xattr -cr /Applications/Deadweight.app once, then launch normally.
The whole app. No trial, no “pro” tier, no upsell, no catch.
Built it for myself, releasing it for you.
If Deadweight pulled its weight, you can make mine a coffee ☕. Entirely optional, deeply appreciated.
Yes, by design. Removals move files to the Trash, where they stay recoverable. Two actions are permanent, and both sit behind an explicit confirmation that says so: emptying the Trash from inside the app, and deleting a Time Machine local snapshot. Everything else can be restored from the Trash. And a “duplicate” is only ever shown after a full-content byte-for-byte comparison, so it really is byte-for-byte identical, not just same-name-same-size.
Most likely one of two defaults. Deadweight only considers files of 1 MB or larger, so small duplicates are ignored until you lower the minimum size in the app. It also skips dependency folders like node_modules, .git and DerivedData, because copies in there are churn rather than clutter and walking them is slow. Both are adjustable: drop the minimum size from the toolbar, and tick the dependencies box when you scan a single folder.
Usually, with one honest caveat. macOS can store two identical files as a single shared copy on disk (APFS clones, which is what Finder’s Duplicate and cp -c create), so trashing one of them may free less than the figure shown. Hardlinks are detected and never counted as reclaimable at all. The number is an estimate, and it is deliberately conservative about what it promises. macOS can also take up to a day to hand back space held by local snapshots.
Because Deadweight is distributed directly rather than through the App Store, and I’m an independent developer who hasn’t paid for Apple’s notarization service. The warning is macOS being cautious about any outside app, not a sign of trouble. Follow Step A once and it never appears again.
No. It’s free because I built it for myself and it costs me nothing to share. There’s no account, no analytics, and no network code. The app makes zero outbound connections, which you can confirm yourself with a tool like Little Snitch. If you’d like to support it, there’s an optional tip jar.
It’s closed-source freeware, common for indie Mac utilities. You’re welcome to use it free of charge; I’ve simply chosen to keep the source private. The privacy guarantees don’t depend on reading the code: they come from the app having no network behaviour at all, which is observable from the outside.
An Apple Silicon Mac (M1 or later) running macOS 14 (Sonoma) or later, including macOS 26 (Tahoe). It’s a native Apple Silicon build and does not run on Intel Macs. Full Disk Access is optional but lets it read the Trash and system-cache categories.