Dupe finds byte-identical duplicate files on your Mac and helps you reclaim disk space — safely. This guide covers every option, what's compared, what's never deleted, and how the safety nets work.
When Dupe opens, a settings panel sits on the right with everything that
goes into a scan: where to look, what kind
of files to surface, and a couple of advanced toggles. Sensible defaults
mean you can usually just hit Return and let it run — but
every knob is there if you want it.
Selected scan roots show as removable chips along the top; the body of the window is one big drop target.
Out of the box Dupe scans your whole home folder — Documents, Desktop,
Downloads, Pictures, Movies, Music, and anything else you've created
under ~/. The scan button reads
Scan Everywhere, and the right panel shows a friendly
"Your home folder" callout so you know what's being swept.
This is the right starting point for almost everyone. The deny-lists and exclusion rules described later mean Everywhere mode won't show you system files, IDE artefacts, or anything else you didn't put there yourself — even though the scanner technically walked past them.
Flip the toggle to Select Location and the panel grows a list. Click Add folder… and the standard macOS picker opens — pick one or many folders, and they show up as removable chips in the list. The scan button updates to reflect what you've chosen: "Scan Pictures", "Scan 3 Folders", and so on.
Multiple roots are supported. If you've got duplicates spread across,
say, ~/Pictures, an external drive, and a folder on the
Desktop, add all three — Dupe enumerates each in turn and treats the
combined set as one pool when looking for matches.
You can also drop folders into Dupe from Finder to add them in this mode. If you leave the list empty Dupe falls back to your home folder rather than running a no-op scan.
The first section of the settings panel is a five-way picker that narrows what kinds of files get considered at all:
When you pick a specific kind, Dupe uses a strict allow-list of extensions — only those file types are even hashed. Choosing Photos on a 200,000-file Pictures library is dramatically faster than Everything, because the scanner skips past anything that isn't an image as soon as it sees the extension.
Note that .ts is deliberately not in the Videos list. For most Mac users it's a TypeScript source file, not an MPEG transport stream — and in Everything mode it's filtered out as source code anyway.
Dupe only ever calls two files duplicates if they are byte-for-byte identical. Same name, same modification date, same EXIF, even same visual content — none of that matters. The contents have to match to the bit, every bit, every time.
Reading every byte of every file on disk would be glacial, so Dupe uses a three-pass strategy. Each pass throws out files that can't possibly have a twin, so by the time the slow check runs, it's only looking at the small fraction that survived the cheap ones.
Each pass throws out files that can't have a twin, so the expensive full-file hash only runs on the survivors.
The scanner walks every chosen folder, stats each file, and groups them by size in bytes. This is essentially free — no file is opened, let alone read. Two files of different sizes cannot be byte-identical, so any size group that ends up with a single file is discarded right here.
Files smaller than the minimum file size (default 4 KB) are skipped before they even reach this pass — duplicates of tiny files rarely amount to anything worth surfacing. You can change the floor in Scan settings (Any size, 4 KB, 100 KB, 1 MB, or 10 MB).
For each size bucket with more than one file, Dupe reads the first 4 KB of each and SHA-256 hashes that head. Files whose 4 KB head hash is unique within their bucket can't possibly be duplicates — the first 4 KB already differ. They're discarded and never read further.
This pass kills off almost every false collision. Two files of the same size that aren't actually the same will, in practice, differ in their first few kilobytes — and we don't have to touch the rest of the file to find out.
Whatever's left — files of identical size with identical first 4 KB — gets a full SHA-256 hash, streamed 1 MB at a time so even multi-gigabyte video files don't blow up memory. Two files with the same full-file hash are byte-identical with overwhelming, cryptographic certainty.
The matching files are bundled into a group, sorted by creation date (oldest first), and surfaced in the results. Anything that didn't match anyone is discarded for good.
Why SHA-256, not just a byte compare? Hashing lets the scanner compare every file in a bucket in one pass — read each once, key by hash, done. A pairwise byte-compare would be quadratic in bucket size and would need every file open at once. SHA-256 collisions on real files don't happen; the chance is smaller than your Mac being hit by a meteorite mid-scan.
The whole point of a duplicate finder is to remove files — so it matters a great deal that the only things you're ever asked to make decisions about are your own content. Dupe filters out anything that could conceivably belong to macOS, an app, or the tooling on your machine.
The scanner refuses to enumerate any of the following, full stop — they're not in the exclusion list because the user added them, they're baked in and can't be removed:
~/Library — every Mac app's preferences, caches, and saved state.~/.Trash — files already on their way out.~/.cache — local caches./System, /Library, /private — macOS itself./Applications — every installed app./usr, /bin, /sbin, /var, /cores, /dev — Unix system trees.Trashing a file in any of these places could plausibly brick an app or the OS itself, so it's a hard line. They appear in the Skip these folders section of the settings panel with a lock icon — visible, so you know they're there, but greyed out and non-removable.
When you scan in Everything mode (the default), Dupe runs a five-layer filter on every file it sees before it'll consider it a candidate:
LICENSE, COPYING, and friends. If macOS can't tell us what it is, we don't ask you to make decisions about it.NSPageController.h-3ERL2UTBZJF9C and similar generated names..swift, .swiftmodule, .swiftdoc, .swiftinterface, .swiftdeps, and so on. Swift build output is voluminous, duplicated by design, and not your content..ts, .py, .go, .rs…), config files (.json, .yml, .toml…), build artefacts (.o, .dylib, .xcodeproj…), databases (.sqlite, .db…), and OS metadata (.plist, .DS_Store, .icns…).Anything that survives all five is presumed to be content you'd recognise as your own — photos, documents, archives, downloads, whatever you actually put there.
macOS app bundles, .framework folders, document packages
(.pages, .numbers, .key) are all
really folders pretending to be files. Dupe respects that — the
enumerator uses .skipsPackageDescendants, so it never
descends inside them. A .pages file gets compared as a
single document, not as the dozens of XML and image parts that live
inside.
Symbolic links are skipped by default. Following them can produce loops, double-counting, or accidental escapes outside the tree you asked to scan. You can flip Follow symlinks on in Scan settings if you have a specific reason to.
Hidden files and dotfiles are also skipped by default,
via .skipsHiddenFiles. Flip Include hidden
files on if you need to clean up something like an old
.Trashes on an external drive.
When the scan finishes, the window switches into the results view. Either you'll see an "All clean" hero (nothing was duplicated — your Mac is tidy) or a list of duplicate groups.
Groups sorted by reclaimable bytes — one suggested keeper per group, the rest queued for the Trash.
A group is a set of files with identical contents. Each group row shows the file kind icon, a representative filename, the number of copies, the per-file size, and the wasted bytes — how much you'd reclaim by trashing all but one copy.
Inside a group, individual copies are listed by their full path
(with ~ abbreviated for your home folder), creation date,
and modification date. Photos, videos, documents, audio, archives,
and fonts each get a kind-appropriate icon so you can scan the list
visually.
The brand bar at the top of the window updates live with two numbers: how many duplicate groups were found, and how many bytes you could reclaim if you trashed every duplicate copy (keeping one of each). The byte total updates as you action groups, so you can watch your reclaimable headroom shrink in real time.
Groups arrive sorted by biggest reclaim first — wasted bytes, which is the per-file size times the number of extra copies. A group of three 2 GB videos (4 GB of waste) ranks above twenty duplicated 200 KB images (3.8 MB of waste). Working top-down means each click reclaims the most space possible.
A duplicate group is only useful if you decide which copy stays. Dupe gives you three ways to do that: a single-click suggestion, bulk auto-pick strategies, and a full review screen.
Every group has a built-in suggestion: the file with the earliest creation date, with ties broken by the shortest path. The intuition is that the oldest copy closest to the root is usually the original — the later, more deeply nested ones are usually the duplicates.
The suggestion is highlighted in the results row with a small indicator so you can see what Dupe would pick. You're never forced to go with it — every copy in the group is selectable on its own.
For bulk actions, Dupe offers four strategies — each is a simple, pure rule applied to every group at once:
foo (2).jpg and keep foo.jpg. macOS's auto-rename collision behaviour generates a lot of these.Strategies decide which file stays in every group; everything else goes to the Trash. You can always preview the picks before actioning them.
Click into any group and the review sheet opens — a side-by-side of
every copy with a thumbnail, full path, size, and creation date.
Click the keeper, hit Keep this, trash the rest, and
the group disappears with a tidy animation. Or press S to
skip the group entirely and come back to it later.
Files keep their identity throughout — once a copy is trashed, whatever's left in the group continues to be matched. If only one file remains after an action, the group is automatically removed (it isn't a duplicate any more).
Dupe only moves files to the macOS Trash. It never
uses unlink, never bypasses the recycle bin, never
offers a "delete permanently" option. Even after a 500-file bulk
action you've still got the OS Trash as a safety net.
Under the hood, every action is routed through
NSWorkspace.recycle — the same system call Finder uses
when you press ⌘⌫ on a file. The result is identical:
the file moves to ~/.Trash (or the
.Trashes folder of the volume it lives on, for external
drives), and from there it stays around until you empty it.
If you change your mind about a file you trashed, just open Finder's Trash, right-click the file, and choose Put Back. macOS restores it to its original location. Dupe doesn't track this — the file simply reappears where it was, and the next scan will pick it up again if it's still a duplicate.
If a file has moved or been deleted between the scan and the action — say you cleaned up in Finder while reviewing in Dupe — the action is silently skipped. The lifetime counter only ticks up for files that were actually trashed.
The Skip these folders section of the scan settings panel has two layers: a non-removable system layer and an editable user layer.
The system layer is the lock-icon row labelled System Resources. Expanding it reveals the eleven always-on system paths described in What Dupe never touches. You can collapse the row to keep the panel tidy, but you can't remove the paths — they're computed at runtime and always re-applied.
Below the system row you can add any number of your own paths to skip. Click Add folder to skip…, pick one or more folders, and they appear as removable chips. Common reasons to use this:
node_modules).
Excluded paths skip both the folder itself and everything inside it.
If you exclude ~/Projects, no file anywhere under that
tree is even enumerated, let alone hashed.
You can also reset all your scan paths — both the scan roots and the exclusions — back to defaults from the Scan settings tab. That sets you back to "Everywhere" with no user excludes (the system excludes are always there).
⌘, opens Settings. There are five tabs.
Where you enter your license key, see remaining free actions, and deactivate this Mac if you're moving Dupe to another machine. Hosts the activation card when unlicensed, and the deactivate button when licensed. See the next section for what the free tier looks like.
Dupe updates itself in place — no App Store involved.
Version & build number, a link to re-show the welcome window for the current version, and a "Find and reclaim duplicate files" tagline so you remember what app you opened.
Dupe is free to scan and review forever — every feature in this guide that finds duplicates is unlocked from day one. What's gated by the free tier is actioning them.
You get 25 lifetime free actions on this Mac — that is, 25 individual files you can trash through Dupe before you need a licence. The brand bar starts showing a small "X free actions left" pill once you're down to ten or fewer. Once you hit zero, the activation window appears the next time you action a duplicate, and it stays until you either buy a licence or activate one you already have.
Buy a licence once for $14.99 and it's yours forever on this Mac — no subscription. Or pick up Unlimited and you get Dupe plus every other General Software app for one monthly fee.
The 25-action counter is lifetime, on this Mac. Reinstalling Dupe doesn't reset it — that's by design. Buying a licence wipes the counter and unlocks unlimited cleanup forever.
Activated Macs can be moved between machines: hit Deactivate license on this Mac in Settings → License, then activate the key on the new Mac. The slot is released server-side immediately.
Dupe revalidates licences against our server every six hours while it's running, and once on launch. If you've been offline for more than seven days it'll prompt you to reconnect — but a brief outage never locks you out.
Dupe gets dramatically faster when it has less to look at. Three
easy wins: switch Looking for from Everything to a specific
kind (Photos, Videos, etc.); raise the Min file size from
4 KB to 1 MB or 10 MB; or narrow the Search in
list to a specific folder rather than your whole home directory.
You can also cancel any scan with ⌘. and tweak the
settings without losing anything.
They aren't byte-identical. The most common reason for two "obviously the same" files to differ is metadata — a JPEG re-exported from Photos gets a fresh thumbnail, EXIF, and colour profile, so the bytes differ even if the pixels don't. Dupe is intentionally strict here; lossy "visually similar" matching gets things wrong in ways you can't recover from.
Yes — open Finder's Trash, right-click the file, and choose Put Back. macOS restores it to its original location. Dupe never empties the Trash, and never deletes permanently.
Yes — switch to Select Location and add the drive as a scan
root. The first scan will be slower than internal storage because of
drive throughput, but every later pass benefits from the OS's file
cache. Trashed files go to the drive's own
.Trashes folder, not your home Trash.
No. File names, paths, hashes — none of it is transmitted. The only network calls Dupe makes are licence validation (the key, not the filenames) and update checks. The scan itself is 100% local.
SHA-256 produces a 256-bit fingerprint. For two files to share one, they have to be byte-identical or you'd have to win an astronomical lottery — the kind cryptography depends on never happening. Every commercial duplicate-file finder worth its salt uses the same approach.
That's everything Dupe does.