eDirStat 2.2.0 brings interactive treemap zoom with breadcrumb navigation, ten new languages (now 18 total) with automatic system locale detection, native file manager revealing, visual badges for cloud placeholders and special files, full Mac App Store / Apple App Sandbox packaging, a privacy policy with in-app legal notices, and hardened filesystem deletion and deduplication.
✨ Highlights
- 🔍 Treemap zoom & breadcrumbs — Double-click any folder to zoom into its subtree and navigate back via interactive breadcrumbs
- 🌍 Now in 18 languages — Available in 18 languages (English, Arabic, Bengali, Chinese (Simplified), Chinese (Traditional), Dutch, French, German, Hindi, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Turkish, and Vietnamese) with automatic system language detection
- 🗁 Native file manager reveal — Reveal and highlight selected files directly in macOS Finder, Windows File Explorer, and Linux file managers
- ☁️ Cloud & special file badges — Visual indicators and tooltips for dataless cloud placeholders (iCloud, OneDrive), symlinks, and Unix special devices
- 🍏 Mac App Store ready — Full Apple App Sandbox compliance,
.pkgpackaging with notarization & validation, and in-app permission dialogs- 📜 Privacy policy & in-app disclosures — Embedded offline open source license viewer and privacy policy covering no-network builds
- 🗑️ Hardened deletion pipeline — Safely delete broken symlinks and directory symlinks without risking target directory contents
- ⌨️ Refreshed keyboard shortcuts — Streamlined shortcuts with official glyphs (
⌥,⌫,⏎,⇧,⌘) backed by dedicated font subsets
🔧 Under the hood: automated font subsetting pipeline for Google Noto fonts (scripts/fetch_fonts.sh, scripts/subset_fonts.py) · bit-packed dataless/special flags into v3 columnar snapshots with zero format overhead · centralized pre-commit and CI/CD dispatcher (./scripts/check.sh all) · deterministic cargo-about license generation with max-depth = 1 · deduplicator hardened against dataless, special, and altered files · subvolume traversal fixes on Linux and macOS.
Added
Treemap & Visualization
- 🔍 Treemap Subtree Zoom: Added interactive subtree zooming to the treemap visualization. Double-clicking a directory or selecting the Zoom Treemap operation zooms into that folder's contents.
- 🧭 Interactive Breadcrumb Trail: Added a breadcrumb trail bar above the treemap showing the hierarchical path from root to the focused subtree, with clickable path segments to navigate back to any ancestor.
- ⏶ Up One Level Navigation: Added an "Up One Level" table operation and
Alt+Upkeyboard shortcut to step up one directory tier in the treemap and explorer.
Localization & Internationalization
- 🌍 Ten New Languages (18 Total): Expanded language support from 8 to 18 languages worldwide (English, Arabic, Bengali, Chinese (Simplified), Chinese (Traditional), Dutch, French, German, Hindi, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Turkish, and Vietnamese), adding ten new localizations:
- Arabic (
ar-SA) — with full CLDR plural-category coverage (zero/one/two/few/many/other). - Bengali (
bn-BD). - Chinese (Simplified) (
zh-CN). - Chinese (Traditional) (
zh-HK). - Hindi (
hi-IN). - Japanese (
ja-JP). - Korean (
ko-KR). - Russian (
ru-RU). - Turkish (
tr-TR) — contributed by @hollmmes (#17). - Vietnamese (
vi-VN).
- Arabic (
- 🌐 Automatic System Locale Detection: Automatically detects the operating system language on first launch via
sys-locale, defaulting to the user's preferred language. - 🇨🇳 Chinese Script & Regional Fallbacks: Added intelligent BCP-47 fallback routing for Chinese locales, routing
zh-Hans,zh-CN, andzh-SGto Simplified Chinese, andzh-Hant,zh-TW, andzh-MOto Traditional Chinese. - 💾 Locale Selection Persistence: User-selected language overrides are now persisted across application restarts in
UserPreferences. - 🔤 Automated Font Subsetting Pipeline: Integrated Google Noto CJK (SC, TC, JP, KR), Bengali, Devanagari, Arabic, and Symbols fonts into an automated download and subsetting pipeline (
scripts/fetch_fonts.sh,scripts/subset_fonts.py), shrinking font assets by >90% while guaranteeing 100% glyph coverage.
File Classification & Badges
- ☁️ Cloud Placeholder Badges: Added a
☁badge and localized tooltip for dataless cloud files evicted to remote storage, detecting APFSUF_DATALESSon macOS (iCloud Drive, OneDrive, Dropbox) andFILE_ATTRIBUTE_RECALL_ON_OPEN/FILE_ATTRIBUTE_OFFLINEon Windows. - 🔗 Symlink Badges: Added a
🔗badge and tooltip for symbolic links pointing to external file or directory targets. - ⚙️ Unix Special File Badges: Added a
⚙badge and detailed permission string indicators ('p','s','b','c') for FIFOs / named pipes, UNIX domain sockets, block devices, and character devices. - 🔒 Permission-Denied Badges: Added a
🔒badge for restricted or inaccessible directory entries. - 💾 Snapshot Control Byte Bit-Packing: Extended the columnar v3 snapshot format to store
FLAG_DATALESS(bit 5) andFLAG_SPECIAL(bit 6) in the control byte with zero storage overhead and full backward compatibility.
Native System Integration & Open Operations
- 🗁 Reveal in Native File Manager: Added
reveal_in_file_managerto highlight and select files directly in macOS Finder (/usr/bin/open -R), Windows File Explorer (explorer.exe /select), and Linux file managers via FreeDesktopFileManager1D-Bus, Dolphin--select, and Nautilus--select. - 📂 Native File Opening: Replaced basic open calls with a unified cross-platform
open_filehelper. - 💻 Open Terminal at File Location: Updated the "Open Terminal Here" operation to resolve the enclosing parent directory when a file is selected instead of doing nothing.
macOS App Store & Sandbox Support
- 🍏 App Sandbox Architecture: Added full support for macOS App Sandbox security constraints, detecting sandbox containers at runtime and compile-time (
is_macos_sandbox()). - 📦 Comprehensive macOS Packaging Script: Added
scripts/package_macos.shsupporting Developer ID (itch.io direct distribution) and Mac App Store (--appstore) channels with codesigning, hardened runtime, provisioning profile embedding,.pkggeneration, and pre-flight validation. - 🔒 Sandbox File Access & Drag-and-Drop: Native Cocoa
NSOpenPanelfolder dialogs automatically trigger when selecting drives or Quick Access shortcuts under the sandbox, and dragging-and-dropping directories onto the window automatically grants security-scoped scan permissions. - 🛡️ Sandbox Terminal Lockdown: Automatically omitted terminal operations from context menus and disabled terminal execution in sandboxed distributions to satisfy App Store Review guidelines.
- 🌐 Bundle Localization Metadata: Declared
CFBundleDevelopmentRegionand supported languages inCFBundleLocalizationsinInfo.plist.
Legal & Transparency
- 📜 Privacy Policy: Added
PRIVACY.mdspecifying zero data collection, zero telemetry, and 100% local processing for distributions compiled with--no-default-features(including the Mac App Store edition). - ℹ️ In-App Legal Notices Access: Added direct in-app links in the About modal (
F1) to open the latest online Privacy Policy and view offline embedded third-party open source licenses (cargo about).
Keyboard Shortcuts & UI
- ⌨️ Standardized Keyboard Shortcuts: Modernized the application shortcut catalog (
F1About,⌘ONew Scan,⌘R/F5Rescan,⌘SSave Snapshot,⌘FFilter,⌘WClose,⌘QQuit,F9Toggle Left Panel,F11Toggle Right Panel,⇧⌘CCollapse All,DelTrash,⇧DelDelete,Alt+UpUp Level,EnterZoom). - 🔣 Official Modifier Glyphs: Embedded
NotoSansSymbols2fallback font to render official platform symbols (⌥,⌫,⏎,⇧,⌘) without missing-glyph tofu boxes. - 🔌 Top Panel UI Prefix Closure: Added
top_panel_prefixclosure hook enabling host applications to inject custom UI elements into the top navigation bar.
Developer Tooling & Verification
- 🧪 Unified Quality Dispatcher: Created
scripts/check.shunifyingcargo fmt,typos,cargo shear,cargo clippy,cargo nextest,cargo test --doc, font subset diff checks, and third-party license verification into a single dispatcher shared between pre-commit hooks and CI/CD. - 🚀 macOS itch.io Release Pipeline: Added automated CI/CD workflow to notarize, package, and publish macOS release builds to itch.io.
- ✅ Packaging Pre-Flight Validation: Added automated signature and structure validation for built
.appbundles and.pkginstallers.
Changed
Traversal Engine & Filesystem Handling
- 🗃️ Subvolume & Mount Traversal: Traversal engine now properly crosses and traverses btrfs subvolumes and APFS volume groups when
same_filesystemis disabled (false). - 🛡️ Root Skip Protection: Improved root path skipping logic to prevent skipping legitimate nested mount points and root directories on macOS and Linux.
Build Configuration & Dependencies
- 📦 No-Default-Features Gating: Supported building with
--no-default-featuresto cleanly strip HTTP client libraries (reqwest) and online update checking for sandbox and air-gapped distributions. - 📦 Dependency Updates: Upgraded workspace dependencies across core and GUI crates.
Fixed
Filesystem Deletion & Operations
- 🗑️ Broken Symlink Deletion: Fixed an issue where broken symlinks (pointing to deleted targets) could not be deleted from the UI and were skipped during deletion because
path.exists()followed symlinks and returnedfalse. - 📁 Directory Symlink Safety: Switched deletion checks to
path.symlink_metadata(), ensuring directory symlinks are safely unlinked viaremove_filewithout attemptingremove_dir_allor putting target directory contents at risk. - 🛡️ Deletion Error Visibility: Resolved an issue where I/O errors (e.g. permission denied) during existence checks were masked as successful deletions.
Deduplicator Engine
- 🧮 Special & Cloud File Deduplication Filtering: Deduplication Phase 1 grouping now strictly ignores dataless/cloud placeholders, Unix special files (FIFOs, sockets, device nodes), and permission-denied files to avoid attempting invalid read operations.
- 🛡️ Hash Calculation TOCTOU Defense: Verified
metadata.is_file()across all range-based and full-hash calculation functions to defend against files changing type post-scan.
Licensing & Verification
- 📋 Deterministic License Generation: Fixed non-deterministic
cargo-aboutlicense output between local filesystems and Docker CI runners by configuringmax-depth = 1inabout.toml. - 🧪 Shortcut Glyphs Test Runner Fonts: Initialized egui font definitions in test contexts, resolving headless runner test panics on macOS CI.
💖 Contributors & Thanks
- @hollmmes — for contributing Turkish (
tr-TR) localization support (#17).