Skip to content

Release v1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 May 06:46

πŸ“¦ Installation

From Binary

Download the appropriate binary for your platform below:

  • Linux x86_64: dtree-linux-x86_64.tar.gz (glibc)
  • Linux x86_64 (musl): dtree-linux-x86_64-musl.tar.gz (static, no dependencies)
  • Linux ARM64: dtree-linux-aarch64.tar.gz
  • macOS x86_64 (Intel): dtree-macos-x86_64.tar.gz
  • macOS ARM64 (Apple Silicon): dtree-macos-aarch64.tar.gz
  • Windows x86_64: dtree-windows-x86_64.exe.zip

After Download

# Linux/macOS
tar xzf dtree-*.tar.gz
chmod +x dtree
sudo mv dtree /usr/local/bin/

# Windows
# Extract the zip and add to PATH

πŸ“ What's Changed

Added

  • Search in compact mode: / search now works inline within the 8-row compact viewport β€”
    no fullscreen switch. Results replace the tree body with a header showing count and
    navigation hints. Enter jumps to the selected result and returns focus to the tree;
    Esc closes results. The old s (file viewer) toggle still transitions to fullscreen.
  • Disk/Drive Selection Panel: Press d in tree mode to open a scrollable panel listing all
    available drives and mount points
    • Shows mount point path (e.g., C:\, /, /home)
    • Filesystem type (NTFS, ext4, btrfs, ...)
    • Free space and total space in human-readable format
    • Volume label (if different from mount/drive path)
    • Pre-selects the disk matching the current root path
    • Press Enter to navigate to the selected disk/mount root
    • Press Esc to close without navigating
    • Uses sysinfo crate for cross-platform disk enumeration

Fixed

  • z badge: ESC now cancels size calculation immediately on large directories.
    Previously cancel() called join() on the worker thread, blocking the UI until the
    recursive traversal finished (could take several seconds on large trees). Fixed:
    • Added Arc<AtomicBool> cancel flag checked at the entry of every recursive call and
      every 100 entries within a directory β€” the worker exits within milliseconds of ESC.
    • cancel() now drops the worker JoinHandle without joining; the thread terminates
      on its own once it notices the flag or finds the task channel closed.
    • Permissions and mtime are cached immediately (fast stat) when calculate_async is
      called, so the badge shows [ calc., rw, 01.01.2025 12:00 ] while the size is
      computing and [ rw, 01.01.2025 12:00 ] after cancellation β€” metadata is never lost.
  • Search hang on broad queries: Single-character or very common queries (e.g., r, e)
    matched thousands of entries, causing the UI to freeze. Root cause: O(nΒ²) deduplication
    (Vec::iter().any() called for every incoming result from the background thread). Fixed:
    • O(1) deduplication via HashSet<PathBuf> β€” constant-time duplicate check regardless of result count
    • 500-result cap β€” background thread cancelled once 500 results accumulate, preventing unbounded growth
    • 200-message batch limit per poll_results call β€” keeps the main thread responsive during active scanning
    • SkimMatcherV2 created once per search thread (not once per file) in fuzzy mode

πŸ“š Documentation

πŸ™ Thank You!

Thank you for using dtree-tui! If you encounter any issues, please open an issue.