All notable changes to Storage Visualiser are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Persistent Settings & Configuration System:
- Implemented portable
settings.jsonstorage next to the executable, with seamless%LOCALAPPDATA%\StorageVisualiser\settings.jsonfallback when run from read-only paths. - Built strictly for Native AOT compatibility using
System.Text.Jsonsource generator (SettingsJsonContext). - Added fail-safe fallback to defaults if
settings.jsonis missing or corrupted.
- Implemented portable
- Treemap Color Themes & Accessible Palettes:
- Folder Depth (Rainbow): Depth-based rainbow coloring with peach file fills.
- File Type Category: Category coloring across media, archives, code, documents, binaries, and system files.
- File Age: Multi-tier recency coloring (<1mo, 1-6mo, 6-12mo, 1-2yr, >2yr cold/archived).
- Color-Blind Safe Mode: Full high-contrast Okabe-Ito / Tol palette mapping across all color modes.
- Interactive Color Legend Strip: Visible category and age swatches directly above the Treemap canvas with real-time palette synchronization.
- Size Unit Systems & Metrics:
- Support for Windows Binary (1024 base: KB, MB, GB), IEC Standard (1024 base: KiB, MiB, GiB), and Metric / SI (1000 base: kB, MB, GB).
- Configurable default unit system in
SizeFormatterdynamically updating Treemap labels, Tree view, Top Files, and drive info. - Support for Allocated Size on disk vs Logical File Size in Treemap sizing.
- Treemap Layout Bias:
- Aspect ratio bias options: Balanced (Squarified), Favor Horizontal (Wider Boxes), and Favor Vertical (Taller Boxes), with correct slice orientation.
- Headless CLI (
StorageVisualiser.Cli) for RMM & Automation:- Standalone single-file Native AOT CLI binary for headless scans and remote management tools.
- Full CLI options:
scan <path>,--top <n>,--json [file|-],--csv [file|-],--html [file],--allocated,--unit <windows|iec|si>,--threshold-gb <n>,--threshold-free-percent <n>,--silent. - Machine-readable JSON/CSV output to file or stdout.
- Exit code contract:
0(Success / healthy),1(Threshold alert triggered),2(Scan error or invalid argument).
- CSV & JSON Exports with Formula Neutralisation and Path Redaction (Option 2):
- Added multi-format export dropdown menu on main toolbar: Interactive HTML Report, Top Files to CSV, File Types to CSV, and Full Scan Data to JSON.
- Formula injection mitigation: escapes cells prefixed with
=,+,-,@,\t,\rper security specification (§6.6). - Optional path redaction anonymising user profile paths (
C:\Users\<user>\...) in HTML reports, CSV spreadsheets, and JSON payloads. - Standardized filename pattern:
Storage Report - <HOSTNAME> - <Target> - <ISO 8601>.<ext>.
- Central IT Organisation Policy Support (
policy.json):- Centralized policy loaded from
%ProgramData%\StorageVisualiser\policy.json(admin priority) or next to the executable. - Granular governance controls:
deleteMode(disabled,recycleBinOnly,allowPermanent),protectedPaths&protectedPathsMode(appendorreplace),allowExports,redactPathsInExports,allowElevation, andallowNetworkPaths. - Fail-safe enforcement: if
policy.jsonis malformed or invalid, the app automatically fails safe to maximum restriction with an informative warning banner. - Visual policy indicators: locked options in Settings dialog display "Managed by your organisation", and blocked actions display policy reasons.
- Centralized policy loaded from
- Settings Dialog UI:
- Added ⚙️ Settings button to the main toolbar.
- Accessible modal dialog organized into Appearance & Colors, Units & Size Calculation, Treemap Layout & Tree View, File Actions & Safety, and Reports & Privacy.
- "Reset to Defaults", "Cancel", and "Save & Apply" controls with live re-rendering.
- File Type Filtering Across Map, Tree, and Top Files (GitHub #3):
- Added context menu actions to the File Types tab: "Filter Map & Tree by this Type", "Filter Tree by this Type", and "Show Top Files for this Type". Double-clicking any file type row immediately filters the Map and Tree views.
- Added a responsive Active Filter Indicator Banner across the application displaying the active filter (
*.ext), matching file count, total size, and a one-click "✕ Clear Filter" button. - Tree view shows only folders containing matching files (with matching counts/sizes) and the matching files themselves.
- Treemap dynamically resizes folders and files according to their matching extension sizes.
- Top Files tab displays the largest files matching the active filter.
- HTML Report File Types Interaction (GitHub #3):
- Clicking any row in the HTML report File Types table automatically switches to the Top Files tab and filters the search by that file extension.
- NTFS MFT Scanner Directory Count Zero (GitHub #1):
- Fixed live scan progress reporting during elevated NTFS MFT scans where directory count was hardcoded to 0 while file count incremented. Live counters now track both files and directories simultaneously.
- HTML Report "Up" Navigation (GitHub #2):
- Resolved an issue where pressing "Up" in the HTML report treemap returned all the way to root instead of the immediate parent folder. Pre-linked parent references on load and bound "Up" to
currentNode.parentwhile ensuring breadcrumb ancestry paths remain 100% accurate at every depth.
- Resolved an issue where pressing "Up" in the HTML report treemap returned all the way to root instead of the immediate parent folder. Pre-linked parent references on load and bound "Up" to
- Top Files Date Modified Column Clipping (GitHub #4):
- Expanded the Date Modified column width to 180px with dedicated right-hand cell padding (
Margin="8,0,20,0"), preventing text clipping from the DataGrid border and vertical scrollbar gutter. Added sorting by actual date (LastModified) instead of string text.
- Expanded the Date Modified column width to 180px with dedicated right-hand cell padding (
-
True Single-File Executable Packaging:
- Configured
PublishSingleFile,IncludeNativeLibrariesForSelfExtract, andEnableCompressionInSingleFilein project settings. Release builds now produce a clean, 100% standaloneStorageVisualiser.exewith zero loose DLLs or framework runtime files in the publish output.
- Configured
-
Custom High-Performance PercentageBar Control:
- Replaced Avalonia FluentTheme
ProgressBarcontrols with a bespoke, lightweightPercentageBarcontrol across Tree, Top Files, and File Types tabs. - Resolves FluentTheme minimum-width clipping, rounded line constraints, and proportional squaring issues that caused percentage fills to appear blank or disproportionately tiny when columns were narrow.
- Expanded Tree percentage bar width from 100px to 135px for enhanced readability.
- Replaced Avalonia FluentTheme
-
Drive Utilization & Tree Percentage Scaling:
- Aligned root drive used percentage (
$28.1%$ ) and free space ($71.9%$ ) to sum to exactly$100.0%$ , eliminating discrepancy caused by unscanned locked OS metadata. - Corrected Tree
% of Totalmode to scale subfolders relative to total scanned files, while% of Parentscales relative to immediate parent folder.
- Aligned root drive used percentage (
-
Treemap Edge Snapping & Seamless Boundaries:
- Snapped squarified rows and tiles flush to container edges in
TreemapLayoutEngine, eliminating floating-point rounding gaps and bottom-right container offsets when adjusting detail slider levels. - Grouped all sub-threshold items into
<Other>without dropping remaining capacity.
- Snapped squarified rows and tiles flush to container edges in
-
<Other>Group Drill-Down & Context Menu Permissions:- Double-clicking or right-clicking and selecting "🔍 Drill Down into Group" on any
<Other (N items)>block now opens that batch as its own interactive treemap view, allowing full inspection of all grouped small files. - Preserved original parent node references for all grouped items so drilling down, navigating Up (
▲ Up), or opening containing folders remains completely accurate and seamless. - Fixed context menu permissions for virtual aggregators: disabled "Open in Explorer", "Copy Full Path", "Delete", and "Properties" on
<Other>groups, while keeping them fully enabled for real files and folders inside.
- Double-clicking or right-clicking and selecting "🔍 Drill Down into Group" on any
-
Navigation Shortcuts & Drag-and-Drop Scanning:
- Drag and drop any folder or drive from Windows Explorer straight into the window to trigger a scan.
- Keyboard navigation shortcuts:
F5to Rescan,Backspace/Alt+Upto navigate up, andAlt+Left/Alt+Rightfor Back / Forward history.
-
Assembly Metadata & Release Pipeline:
- Embedded release assembly metadata (Version
0.1.0-alpha, Product, Authors, Copyright). - GitHub Actions automated release pipeline (
.github/workflows/release.yml) producing single-file x64 binaries, release archives, and SHA-256 checksums on tag pushes.
- Embedded release assembly metadata (Version
-
Tabbed Views Interface (v1):
- 🗺️ Map: SpaceMonger nested treemap with dynamic rainbow palette, free space display toggle, and detail density slider.
- 🌲 Tree: RidNacs-style hierarchical directory tree with visual percentage progress bars, formatted sizes, file counts, and descending size sort.
- 📄 Top Files: Sortable table displaying the top 200 largest files with size, percentage of total storage, file extension, full path, and date modified. Right-click or double-click to reveal in Windows Explorer.
- 📊 File Types: Extension and category breakdown table showing total consumed space, percentage of total, and file count per extension.
-
Cross-View Navigation:
- Context menu item "Show on Map" in Tree and Top Files tabs to quickly zoom to and highlight items in the treemap.
- Full Windows Explorer shell integration (Open in Explorer, Open File, Copy Path, File Properties) across all tabs.
-
Safe Delete to Recycle Bin (v1):
- Central
FileActionServiceenforcing policy, protected paths blocklist, confirmation modal, and audit action logging (file_actions.log). - Native Windows Recycle Bin integration (
SHFileOperationwithFOF_ALLOWUNDO) ensuring all deleted files/directories can be restored. - Protected paths blocklist preventing accidental deletion of Windows directories, Program Files, ProgramData, drive roots, pagefile, hiberfil, swapfile, and synthetic items.
- In-app confirmation modal showing file details, size, and warning before deletion.
- Delete key shortcut and context menu items across Map, Tree, and Top Files tabs.
- Central
-
Accessibility & Contrast (WCAG AAA):
- Updated progress bars in Tree, Top Files, and File Types tabs with soft pastel fills and deep navy text (
#0F172A) providing >10:1 contrast ratios.
- Updated progress bars in Tree, Top Files, and File Types tabs with soft pastel fills and deep navy text (
-
UI Refinements:
- Vertically centered text in the address bar TextBox.
- Locked Row 2 navigation bar to exact fixed height to eliminate jitter when scanning starts or stops.
- Balanced Back and Forward button widths with centered text.
-
Interactive Offline HTML Export (v1):
- Single-file, 100% self-contained HTML5 report with zero external CDN scripts, remote fonts, or network requests (strict offline privacy).
- Interactive canvas treemap with breadcrumb navigation, interactive click & drill-down, hover tooltips, and real-time detail slider.
- Built-in search filter across scanned nodes, interactive Top Files table, and File Types breakdown.
- Native AOT compatible JSON serialization via source-generated
ReportJsonContext. - Windows file picker default naming format (
Storage Report - <HOST> - <Target> - <ISO 8601>.html) defaulting to Documents directory.
-
Elevated NTFS MFT Scanner (v1 / S8):
- High-speed direct Master File Table (
$MFT) parser for local NTFS drive volumes when running with Administrator privileges. - Sequential multi-megabyte cluster run streaming via Win32 volume handle reading, parsing 1024-byte MFT records with fixup validation (Update Sequence Array), resident/non-resident
$DATAstreams, and$FILE_NAMEattributes. - Seamless
WindowsAutoScannerorchestrator: automatically selects high-speed MFT direct reading when elevated on local NTFS drives, and seamlessly falls back to standardDirectoryWalkerScannerwhen non-elevated, on network shares, or for subfolder scans. - Real-time active scanner indicator in the status bar (e.g.
Scan complete in 1.4s via NTFS MFT Direct Scanner).
- High-speed direct Master File Table (
-
Elevated NTFS MFT Scanner Fixes & Diagnostics:
- Added
FILE_SHARE_DELETE(0x04) andFILE_FLAG_BACKUP_SEMANTICSto raw volumeCreateFilecalls, preventingERROR_SHARING_VIOLATION(32) when reading live operating system drives (likeC:) with running background services. - Enabled
SeBackupPrivilegeprocess token privilege dynamically to guarantee unrestricted raw volume read access when elevated. - Fixed non-resident
$DATAcluster run parsing inNtfsMftRecordParserfor Record 0 ($MFT), resolving fallback caused by unextracted MFT cluster runs. - Enforced 4096-byte sector-aligned buffer allocations for Record 0 and volume reads, preventing
ERROR_INVALID_PARAMETER(87) on modern Advanced Format (4Kn / 512e) NVMe SSDs. - Added sparse cluster run handling in
DataRunDecoder. - Added comprehensive diagnostic logging from
WindowsAutoScannerandWindowsNtfsMftScannerintostartup.log.
- Added
-
Toolbar & Navigation Sizing & Alignment:
- Standardized all top toolbar buttons (
[Scan Drive],[Browse...],[Rescan],[Export Report...], and[Free Space]) to an exact uniform height of 32px with centered vertical content alignment and consistent 4px corner radius, resolving button height unevenness caused by font weight variations. - Expanded Drive Selector ComboBox width from 230px to 285px and locked its height to 32px to eliminate clipping of volume labels and free space information (
... free of 1.82 TB). - Standardized all navigation bar buttons (
◀ Back,▶ Forward,▲ Up,⌂ Home,[Cancel Scan], and address bar TextBox) to an exact uniform height of 30px with centered vertical content alignment. - Fixed Detail Slider thumb clipping and vertical misalignment by overriding FluentTheme slider dimensions (
SliderPreContentMarginandSliderPostContentMarginset to 0, track height 20px, thumb diameter 14px/16px) to perfectly center withDetail:text and prevent thumb clipping against toolbar borders.
- Standardized all top toolbar buttons (
-
Unit Tests:
- Expanded test suite to 35 unit tests with coverage for MFT sparse run decoding and Record 0 non-resident
$DATAcluster run parsing.
- Expanded test suite to 35 unit tests with coverage for MFT sparse run decoding and Record 0 non-resident