Releases: nesuwu/NTScan
NTScan v0.4.1 - The "Stop Lying About Disk Space" Update
In this release, we fixed the scanner's pathological need to count the same files multiple times and report numbers that would make a mathematician cry. If you've ever scanned C:\ and seen 700GB on a 480GB drive, this one's for you.
Fixes
Hard Link Deduplication: Fixed logical size double-counting for hard-linked files.
- The scanner was already smart enough to deduplicate allocated size (thanks, past me), but completely forgot to do the same for logical size.
- Windows loves putting the same DLL in 47 different places via hard links (looking at you, WinSxS), and we were dutifully adding up all 47 copies like good little accountants.
- Added mark_file_unique_logical() to check file identity before adding to the total. Now we only count each unique file once, revolutionary concept.
- Result: Non-admin scans now report ~352GB instead of ~700GB on a 475GB drive. Math finally works.
Junction Detection: Rust'sis_symlink()is a liar and doesn't detect junctions. - Turns out Rust only considers symbolic links as "symlinks" and completely ignores NTFS junctions/reparse points.
- When running as admin, the scanner happily followed
C:\Documents and Settings→C:\Userslike a regular directory and counted the entire Users folder TWICE. - Admin scans were reporting 744GB on a 475GB drive because apparently we were living in a quantum superposition where C:\Users existed in two places at once.
- Added
is_reparse_point()to actually check theFILE_ATTRIBUTE_REPARSE_POINTflag because we can't trust Rust to know what a junction is. - Result: Admin scans now also report correct sizes. Junctions get the same "nope, not following that" treatment as symlinks.
Technical Details
For the nerds who want to know what actually changed:
- Added
logical_ids: HashSet<FileIdentity>to track unique file content for logical size - Implemented
ScanContext::mark_file_unique_logical()using Windows File ID (volume serial + 128-bit file index) - Added
is_reparse_point()helper that checksFILE_ATTRIBUTE_REPARSE_POINTflag viaMetadataExt - Modified symlink detection to treat junctions as symlinks for cycle prevention
Both fixes are a "explain the same thing twice" because NTFS is a stupid miracle child and likes to make our lives interesting.
TL;DR: The scanner can now count. Properly. Both as admin and non-admin. Your disk usage reports will finally match reality instead of looking like a fever dream.
NTScan v0.4.0 - The "Garbage Day" Update
In this release, we finally gave you the power to clean up the mess you found. We also fixed the scanner lying about disk usage, stopped it from eating all your RAM, and added the ability to see files.
Features
- Native Deletion: Implemented
SHFileOperationWfor Windows.- Move to Trash: Now uses the native Windows API. It's fast, safe, and actually reversible.
- Permanent Delete: Added
--delete-permanentflag (or keybindx/Delete) for when you really mean it. - Safety First: Added a confirmation popup so you don't accidentally delete
System32. - Background Processing: Deletion happens in the background now. The UI won't freeze while you nuke a 50GB folder.
- File View: Added
--fileflag. You can now see individual files mixed in with directories, instead of just folder summaries. - Accuracy Fix: Fixed the "Allocated Size > Disk Capacity" bug. We now use low-level 128-bit File IDs to correctly identify and deduplicate hard links (looking at you,
WinSxS). - Resilience: The deleter now tries to strip "Read-Only" attributes automatically if access is denied.
Performance & Fixes
- Memory Leak Patched: Fixed a massive leak where the application held onto the entire scan context for every folder in your history. Navigation is now memory-safe.
- Render Optimization: Refactored the TUI engine. We no longer format strings for thousands of invisible rows. Memory allocation rate dropped by >99% during scans.
- Scanner: Switched to
CreateFileWwith0access rights to read metadata from locked system files.
NTScan v0.3.0 - Total Recall
In this release, NTScan finally grew a brain and stopped having amnesia every time you close the window. It knows where it is, remembers where it has been, and saves your precious time.
Changes include:
-
Persistent Caching: The scanner now saves expensive file attributes to disk. Restarting the app doesn't mean waiting for
node_modulesfolder to recalculate anymore. -
Directory Hopping: You can now roam. Press Enter to dive into a folder, and Backspace to go back.
-
Instant History: Going back is instant because we keep the previous state in memory. No re-scanning just because you hit the wrong key.
-
Math That Works: Fixed the Allocated Size calculation. It no longer gives up and prints n/a just because a single file threw a permission error. It now sums up whatever it can reach.
-
Windows Case Insensitivity: The cache now understands that Users and users are the same folder, preventing unnecessary recalculations.
-
Scanner Opts: Stopped asking the OS for metadata twice per file. It's faster.
-
Removed Clippy
That's it. It shouldn't calculate things it already knows anymore. Please work.
NTScan v0.2.1 - The UX overhaul
In this release I managed to make the UX a little better.
Changes include (but are not limited to):
- Better error reporting in the TUI
- Modification date in the TUI
- Somewhat faster scan
- Better sorting
- Some minor code makeovers
- Fixed a small memory leak
- Added scrolling for bigger file/folder lists
That's all, thanks for reading this dumpster fire of a changelog, I promise to makethem more confusingin the future.
NTScan v0.1.5 - Scroll, Sort, and Stay Sane
- Renamed the project to NTScan and refreshed docs/examples to match the new identity.
- Added a responsive TUI timer that freezes when scanning completes, so elapsed time doesn’t keep racing after the work is done.
- Introduced sorting toggle (s) between “size desc” and “name asc,” with the active mode displayed in the status header.
- Implemented scoped list scrolling: arrow keys move a line at a time, PgUp/PgDn jump a page, Home/End snap to top or bottom, and the table renders only the visible window for smooth updates.
- Simplified row rendering to avoid duplicate directory entries and keep sort order consistent.
- Cleaned up inputs to react on key presses only (no more accidental double toggles).
- General polish across Cargo metadata, documentation, and build tooling.
That's all folks! Enjoy a calm and more controlled NTScan experience!