duex - Disk Usage Explorer
duex is a fast, interactive terminal-based disk usage utility written in Go. It helps you understand what is consuming space on your drives by providing a navigable, visual breakdown of folders and files.
Features
- Interactive TUI: Built with the Charm ecosystem (Bubble Tea, Bubbles, Lip Gloss) for a modern, responsive terminal experience.
- Accurate Sizing: Calculates actual physical disk usage, properly handling hard links (no double-counting) and sparse files.
- Fast & Concurrent: Uses Go routines for rapid, non-blocking directory traversal.
- Real-time Progress: Visual feedback with an animated spinner and scrolling file list during heavy scans.
- Instant Breakdowns: Automatically computes and displays a file extension breakdown for directories.
- Filter & Search: Quickly find specific files in large directories.
- Safe Navigation: Cancel long-running scans instantly with
esc.
Installation
Using Homebrew
brew install evilmarty/duex/duex
Pre-built Binaries
You can download the latest release from GitHub Releases.
Building from Source
Make sure you have Go installed.
Clone the repository and build the executable:
git clone https://github.com/evilmarty/duex cd duex go build -ldflags="-X main.Version=v1.0.0" -o duex
You can then move the duex binary to a location in your $PATH.
Run duex in your current directory:
./duex
Or provide a specific path to scan:
./duex /path/to/scan
CLI Flags
| Flag | Description |
|---|---|
-h, --help |
Show usage instructions |
-v, --version |
Show application version |
Keyboard Shortcuts
| Key | Action |
|---|---|
↑ / k |
Move cursor up |
↓ / j |
Move cursor down |
enter |
Open selected directory |
backspace |
Go up to parent directory |
esc |
Cancel active scan / Go back |
r |
Refresh (rescan current directory) |
/ |
Filter files in current directory |
q / ctrl+c |
Quit application |
Testing and Coverage
The project maintains a high standard of test coverage (95%+ for core packages).
To run the test suite:
go test ./...To generate and view the detailed code coverage profile:
go test -coverprofile=coverage.out ./...
go tool cover -func=coverage.out























