eDirStat 2.1.0 is our biggest quality-of-life release yet — eight languages, four themes, a browser-based snapshot viewer, NTFS MFT scanning on Linux, and a faster v3 snapshot format, all backed by 100+ new tests.
✨ Highlights
- 🌍 Speak your language — Full GUI localization in 8 languages with a built-in selector
- 🎨 Your theme, your way — System (auto), Dark, Light, and High Contrast themes
- 🌐 Snapshots in the browser — Explore saved
.edstscans online, no install required- 🐧 MFT scanning on Linux — NTFS Master File Table parsing joins Windows, extension records included
- 💾 v3 snapshots — Compact columnar encoding: smaller files, faster loads (v2 files still open)
- ⏹️ Total scan control — Cancel any scan mid-flight, or restrict it to a single filesystem
- 🖥️ New Scan dialog — Pick from detected drives and mount points, no typing required
- 🏁 Termination race fixed — A rare work-stealing early-exit bug is gone, with stress tests to prove it
🔧 Under the hood: the project is now three crates (edirstat-core, edirstat, edirstat-gui) for cleaner crates.io publishing · view preferences persist between sessions · Del / Shift+Del trash & delete shortcuts · configurable timestamp formats · UI stack upgraded to egui v0.36 · 100+ new tests now guard the arena, snapshot format, scan engine, and every statistics chart.
Added
GUI Enhancements & Features
- 🌍 Full GUI Localization: Migrated the entire interface to Fluent translations and added a language selector to the View menu, shipping with translations for Spanish, German (community-reviewed), Dutch, French, Portuguese, Italian, and Polish.
- 🎨 Theme System Overhaul: Added a System theme with automatic runtime detection, plus brand-new High Contrast and Light themes.
- 🖌️ Treemap Styling Options: Added a View option to draw borders around treemap rectangles, new treemap styles for improved visual clarity and contrast, and dedicated fallback coloring for directory leaf blocks.
- 🗂️ "New Scan" Modal: Added a new scan dialog, redesigned to list detected drives and mount points for quick scanning, and defaulted the scan path input to the current working directory.
- ⏹️ Scan Cancellation: Added the ability to cancel an in-progress directory scan.
- 🖇️ Same-Filesystem Scan Option: Added a toggle to restrict traversal to the root filesystem and avoid crossing mount points.
- 📂 File Open Operation: Added a
FileOpentable operation to the directory explorer. - ↕️ Sort Scrolling: The directory explorer now scrolls to the relevant row after sorting by a column.
- ⌨️ Delete Shortcuts: Added
DelandShift + Delkeyboard shortcuts for trash and delete operations, along with an option to bypass their confirmation dialogs. - 🕐 "Time Format" View Option: Added a configurable timestamp display format for the directory explorer.
- 💾 View Preferences Persistence: View options are now persisted to disk via a new preferences model and restored on launch.
- 🌳 Refresh State Restoration: Open/expanded tree states are now restored after refreshing a directory.
- 🧮 Deduplicator Interaction Gating: Deduplicator row interactions are now disabled until the deduplication run has fully completed.
- 📏 Layout Sizing: Improved the table/statistics panel split sizing and the default name column width.
Web App & Browser Viewer
- 🌐 Browser Snapshot Viewer: Split the project into three crates (
edirstat-core,edirstat,edirstat-gui) and launchededirstat-web, a wasm32 browser build of the GUI acting as a pure snapshot viewer. - 🌐 Wasm Demo Snapshot: Added a wasm-ready MGS3 demo snapshot to the website.
- 🌐 Graceful Web Degradation: Non-viable UI elements on the web build are now shown disabled with explanatory tooltips instead of being hidden.
- 🌐 Demo & Welcome Improvements: Improved the demo and welcome screens across the GUI and website, plus website metadata improvements.
- 🎥 Comparison Videos: Added WinDirStat and WizTree comparison videos to the website.
CLI & Headless Tooling
- 💾 Snapshot Extension Handling: The
--toheadless snapshot mode now automatically appends the.edstextension when not specified, with a clearer help message.
Platform & Filesystem
- 🐧 Linux NTFS MFT Scanning: NTFS drives can now be scanned via the Master File Table on Linux when permissions allow (#14), including information folded in from MFT extension records (#15).
Developer Tooling & Testing
- 🧪 Expanded Test Suite: Added 100+ new unit and integration tests covering the arena, snapshot format, varint codecs, scan engine, coordinator, MFT parser, CLI, and all statistics charts.
- 🚀 itch.io Deploy Job: Initialized a CI/CD job to deploy multivers binaries and installers to itch.io on release.
- 🛠️ Multi-Target Multivers Script: Extended the local multivers builder to support multiple compilation targets.
Changed
Performance & Allocations
- ⚡ V3 Snapshot Format: Introduced a new columnar v3 snapshot persistence format for significant memory and CPU speedups.
- ⚡ Transparent Zstd Layer: Made the snapshot zstd compression layer transparent to loaders and added an optional uncompressed mode (
--no-compression). - ⚡ Frozen String Pool: Added a frozen variant of the arena
StringPool, reducing indexing memory. - ⚡ Compact Timestamps: Removed access-time support and packed timestamps as
u32epoch seconds. - ⚡ BitSet Explorer Cache: Switched cached explorer matches from
Vec<bool>to aBitSet. - ⚡ MFT Metadata Records: Avoided collecting the first 16 (metadata) NTFS records during MFT scans.
Platform Compatibility & Hardening
- 🛡️ Snapshot Bounds Checking: Significantly strengthened bounds checking in the snapshot persistence loader.
Project Maintenance & Build Configuration
- 📦 egui v0.36: Upgraded the UI stack to egui v0.36 and
egui-table-kitv0.6, vendoringegui-notifyin-tree (upstream no longer updated). - 📦 Dependency Updates: Bumped project dependencies throughout, including
compact_strv0.10 and the web/npm packages. - ⚙️ Toolchain Update: Updated the Rust nightly compiler toolchain to
nightly-2026-07-15. - ⚙️ GitHub Actions Updates: Unified all CI/CD workflow actions to their latest major versions (
checkout@v7,upload-artifact@v7,download-artifact@v8). - 🧹 Engine Cleanup: Refactored the traversal engine's worker context handle and renamed the deduplicator tab module.
- 🧹 Git Ignore Rules:
target/directories are now ignored at any repository depth. - 📦 crates.io README: The
edirstatcrate now renders the repository's rootREADME.mdon crates.io via thereadmemanifest field, retiring the separate crate-local blurb. - 📄 Documentation: Linked the project website from the README.
Fixed
Directory Scanner & Deduplicator
- 🏁 Traversal Termination Race: Fixed a work-stealing termination race in the parallel scanner that could truncate scans early on deep directory trees — an idle worker could declare completion while tasks sat unpicked in local worker queues. Termination is now driven by an in-flight task counter, backed by multithreaded stress regression tests.
GUI & Interactive Elements
- 🖱️ Hover Occlusion: Fixed the table row hover effect being occluded (via
egui-table-kitbump). - 🔺 Expand/Collapse Triangle: Fixed the click hitbox for the expand/collapse triangle in the classic view.
- 🎨 System Theme Detection: Fixed System theme reading on modern egui.
- 🖼️ Modal Icons: Migrated modal icons to PNG, avoiding SVG text rendering issues.
- 📐 View Dropdown Icons: Fixed an icon alignment inconsistency in the View dropdown.
- 🔄 Refresh Timing Cache: Fixed directory refresh incorrectly re-using cached timing results.
- ♻️ Cache Invalidation: Made GUI cache invalidation robust across data changes.
- 🌳 Tree Header Render: Fixed the explorer tree header rendering on error, and a header padding clip issue.
- 🌐 wasm Gating: Improved feature gates for wasm no-op paths, and fixed feature gating of the
egui-asyncimage loader call.
Cross-Platform & Windows
- 🪟 Windows Cancel Token: Corrected the cancel token arguments for the Windows traversal path.
Localization & Web
- 🌍 Translation Fixes: Corrected the Dutch
selection-itemsstring, and resolved German translation conflicts and typos. - 🌐 Favicon Packaging: Corrected asset packaging for the website favicon.
Project Maintenance
- 📦 crates.io Packaging: Moved compile-time-embedded assets (licenses, locales, and images) into the
edirstat-guicrate so every published crate builds standalone on crates.io, backed by a new regression test. - 🍏 macOS Bundle Versioning: Fixed stale hardcoded version strings in macOS app bundles;
CFBundleShortVersionStringis now generated fromCargo.tomlin both CI/CD workflows. - 🧪 Case-Sensitivity Test Portability: Fixed the
$MFTprobing tests to detect filesystem case sensitivity at runtime instead of assuming case-sensitive semantics, resolving macOS CI failures. - 🔢 Version Sync: Synchronized version numbers across all manifests.
💖 Contributors & Thanks
- @Lej77 — for the NTFS
$MFTfixes and improvements, including Master File Table scanning of NTFS drives on Linux (#14) and support for folding in MFT extension records (#15). - @AlexanderSchuetz97 — for the many feature requests, German translation review, and extensive bug testing that helped shape this release.