A fast, cross-platform terminal user interface (TUI) directory comparison tool written in Rust — align, diff, filter, and sync directories in real-time.

install.sh
$ curl -fsSL https://raw.githubusercontent.com/akunzai/duodiff/main/install.sh | bash

Detects your platform, verifies its SHA-256 checksum, and installs to ~/.local/bin — Linux, macOS & Windows (Git Bash).
More paths (Homebrew, Scoop, PowerShell, crates.io, source, duodiff --upgrade): docs/INSTALL.md

duodiff demo: pane focus, filtered file diff, and per-hunk merge
Compare directories side-by-side, filter to a file, and merge individual change blocks in the built-in diff view.

Why duodiff?

Clean, robust, and lightning-fast directory comparisons.

Side-by-Side Double-Pane Tree

Balanced view showing matching, differing, and missing folders/files side-by-side. Focus highlights and synchronized mouse scrolling keep context clear.

Asynchronous Background Scanner

All directory alignment calculations and file content MD5 streaming checksum computations run in non-blocking background tasks, keeping the UI fully interactive.

Built-in Color Diff & Sync

Compare file differences instantly in-app, or launch your preferred external diff tool. Sync files with confirmation gates protecting against overwrite.

Features

A complete set of tools to explore, diff, and resolve directory differences.

Flexible Comparison

Toggle between Fast mode (compares file size and modification time) and Precise mode (compares content via streaming MD5 hashes) at the press of a key (c).

Integrated Editor Diff

View visual line-level diffs inside the app, or launch external diff tools (vim, nvim, code, meld, difft, etc.) and editors using your $EDITOR environment variable.

Fast Search & Filter

Search files in the tree view instantly using the slash key (/). Commit search queries or toggle showing only differing items (f).

Vim Bindings & Mouse

Navigable via standard arrow keys or hjkl keys. Wheel scrolls, clicks select, and double-clicks enter diff views or toggle directory trees.

Config UI

Built-in configuration screen (C) that automatically detects system-installed diff tools and edits ~/.config/duodiff/config.toml.

Self-Upgrading

Supports self-checking and direct in-app upgrading from release binaries using duodiff --upgrade. Background updates check once a day politely.

Requirements

Zero external runtime dependencies. Runs standalone on macOS, Linux, and Windows.

Any terminal

Requires a terminal supporting truecolor or 256 colors. Unicode and emoji font support makes icons cleaner.

Rust Toolchain

Required only if building from source. Pin versions using mise or build with cargo build.

Optional: Diff Tools

For launching external diff editors from the UI, standard tools like code, nvim, or meld are supported.