Vacuon 0.4.0 — a quarantine, duplicate files, and the treemap
Disk space analyzer for Windows. Reads the NTFS MFT straight off the volume, shows the real content of what you are about to delete, and never claims a number it did not measure.
Three milestones since 0.3.2: a reversible quarantine, an exact duplicate finder, and the treemap.
Download
| File | What it is | Size |
|---|---|---|
Vacuon.exe |
The app. Download this one. | 62 MB |
vacuon-cli.exe |
Command line, for scripting | 36 MB |
Vacuon-0.4.0-win-x64.exe |
Identical to Vacuon.exe, named for winget, which pins a hash |
62 MB |
vacuon-cli-0.4.0-win-x64.exe |
Identical to vacuon-cli.exe, same reason |
36 MB |
Portable and self-contained: nothing to install, no .NET runtime needed, runs from a USB stick.
Vacuon-0.4.0-win-x64.exe 6E5FD4BED729BED8C459D8746ECC1FD0E132D5E083CF655C169D408D1B4AA486
vacuon-cli-0.4.0-win-x64.exe 5D01D66597B0756D9A94DCC8811381FC11EFAF09979AB65E665C093665D50954
Verify with Get-FileHash .\Vacuon.exe — the two names are the same bytes.
Windows will warn you — that is expected
The file is not code-signed, so Windows shows a blue "Windows protected your PC" screen the first time. Click More info → Run anyway.
If you would rather not trust an unsigned binary from a stranger, that is the correct instinct. Clone the repository and build it yourself: dotnet build -c Release.
New: the quarantine, so deleting is no longer the only way out
Vacuon can now set files aside instead of deleting them. Quarantine moves them into a folder on the same volume, records where each one came from, and puts them back on demand.
- It is a rename, so it does not depend on size. Measured on a 2 GiB file: writing it took 22 s, quarantining it 155 ms, restoring it 2.9 ms, with the SHA-256 identical on both sides. The 22 s is the number to compare against — that is what touching the bytes costs, and the quarantine does not touch them.
- It frees nothing, and the app says so. The report says held, never freed, and there is no "freed" figure to reach for by accident. Purging a batch is what returns the space, and that is the only step in the quarantine with no undo.
- Restore never overwrites. If something has taken the original path back, the item stays where it is and says so. An undo that destroys a file you never asked to lose is worse than no undo.
- The manifest is written before anything moves. The failure that loses data is not a half-finished batch — it is a file sitting in the store under a numbered name with nothing recording where it came from. A crash at any point leaves a manifest describing the whole intent.
- The quarantine folder is on the protected list. It holds exactly what you already decided to remove, which makes it the most attractive folder on the disk to a cleanup tool, including this one.
vacuon quarantine list | restore <batch> | purge <batch> does the same from the command line. Purge refuses to run without --yes.
New: duplicate files, in four stages
Groups by size straight from the index, then hashes the first 8 KiB, then the last 8 KiB, then the whole file.
The verdict is always the full-file hash. The sampled stages exist to avoid reading terabytes, never to decide anything — two renders out of the same encoder share a size, a header and a trailer, and calling them identical on that evidence is exactly the false positive a duplicate finder must not produce.
- A hardlinked copy is identical and frees nothing. NTFS charges the content once and releases it only when the last name goes, so those copies are excluded from the recoverable figure, counted separately, and preferred as the one to keep — keeping them is free.
- "Delete every copy" is not something the screen can express. The copy that stays has no checkbox at all, not a disabled one.
- The cost is quoted before anything is read. Grouping by size is free, so the tab opens by telling you what the rest would cost — on the machine this was built on, 793,590 candidates in 76,125 size groups, up to 105 GiB to read. It says that is the worst case, and that the real fraction is not knowable in advance. There is a progress count and a stop button.
Ticked copies go to the quarantine, not to deletion.
A measurement worth repeating: grouping by size filters far less than it looks like it should. On a real 2.49 M file volume, 1.63 M files fall under the 4 KiB minimum, and of the 857 k left, 769 k still share a size with something else. Sizes cluster, because the things that fill a disk come out of the same encoders, compilers and installers.
vacuon duplicates <drive|folder>, with --min-size, --keep=oldest|newest|shallow and --verify.
New: the treemap
Every box is sized by what it takes on disk, so the biggest thing on screen is the biggest thing on the volume. Click a folder to go in.
- Squarified, not the naive slice-and-dice, which gives every item the full height of the canvas and turns a small folder into a one-pixel line nobody can click. On the same data the worst aspect ratio is under 12 instead of over 200.
- Area is exactly proportional to size, and boxes never overlap — both are covered by tests, because a treemap that is slightly wrong looks exactly like one that is right.
- Folders are coloured by whatever fills them. The first version came out almost entirely grey: the top level of a volume is nearly all folders, and a folder has no extension. Now a branch that is mostly video looks like video. Virtual disks got their own colour for a concrete reason — nine
.vhdxfiles hold 106 GiB on the development machine, and grey was hiding the biggest thing on the disk. - One
DrawingVisualrather than an element per box: 100,000 rectangles lay out in under half a second, and a real volume's top level draws in 1–3 ms.
Also in this release
- The version now reads the same in the assembly metadata and in the app, with a test comparing them. They had drifted — the window footer said 0.3.2 while the file properties said 0.3.1.0.
- The footer stops describing the app as it was three milestones ago.
winget install vacuonis documented, and the README stops implying the package lands in the Start menu —InstallerType: portableputsvacuonon yourPATHand creates no Start entry, for every portable package.- The
duplicate-findertag was removed from the winget manifest in 0.3.2: at the time the app did not find duplicates. It does now.
Verified in this release
- 318 tests, run on every commit.
- Both binaries run standalone, copied on their own into an empty folder outside the build tree.
- The quarantine, the duplicate finder and the treemap were each exercised against a real volume, not only against fixtures.