20 CLI Tools You're Not Using Yet
April 3, 2026

This is the complete cross-platform CLI toolkit for 2026, in two parts. First the essentials every developer should already have — fzf, ripgrep, bat, lazygit, and the rest of the modern standard toolkit. Then twenty command line tools with thousands of GitHub stars that rarely make the usual "best CLI tools" lists but quietly solve problems you've been working around for years. Every tool here runs natively on Mac, Linux, and Windows. Install the essentials first, then add the lesser-known ones one at a time.
Start Here: The Essentials#
Before the deep cuts, the foundation. These are the modern replacements that top every list for a reason: mostly Rust rewrites of Unix classics, all cross-platform, all fast. If you install nothing else from this guide, install these.
Search and navigate#
- ripgrep (
rg, 49.5k stars) replacesgrep -r: 2-5x faster, respects.gitignoreby default, and it's what VS Code and Claude Code use internally for workspace search. - fd (34.7k stars) replaces
findwith memorable syntax and colorized output, roughly 23x faster thanfind -iregexin its own benchmark.fd "\.json$"beatsfind . -name "*.json". - zoxide (23.9k stars) is a
cdthat learns your most-visited directories. Typez projectsand it jumps there. Works with bash, zsh, fish, and PowerShell. - fzf (67k stars) is the single most impactful install here: a general-purpose fuzzy finder. Pipe anything into it, press
Ctrl+Rto make history searchable, or runvim $(fzf).
See files differently#
- bat (50.4k stars) is
catwith syntax highlighting, line numbers, and git-diff markers. It integrates with fzf, fd, and ripgrep, so file previews inside fuzzy search just work. - eza (13.3k stars) is a modern
lswith icons, git-status columns, and tree view; the actively maintained successor to exa.eza --tree --level=2 --gitis the daily driver. - delta (24k stars) is a syntax-aware diff pager for git with word-level highlighting. Set it as your git pager and every
git diffbecomes readable.
Shell and history#
- Starship (46k stars) is a fast, minimal prompt showing git branch, language versions, and Docker context, working identically across bash, zsh, fish, PowerShell, and cmd. One config across every machine.
- Atuin (22k stars) stores shell history in a searchable SQLite database with optional encrypted sync. Search by directory, exit code, or time range — a real upgrade over
Ctrl+R. - lazygit (54.7k stars) is a full terminal UI for git: spacebar to stage,
Ato amend,rto reword. It cuts commit ceremony to seconds. (On huge monorepos, see gitui below for a lighter alternative.)
The utility belt#
- jq (30.9k stars) is the standard for JSON on the command line. Pipe any API response through
jq .for formatted, colorized output. Universal across every platform and package manager. - btop (22k stars) replaces
top/htopwith a full TUI: CPU graphs, memory bars, process trees, and network stats in one view. - tldr (52.5k stars) is community-driven simplified man pages.
tldr targives you the five commands you actually need instead of a 3,000-line manual. - HTTPie (34k stars) is a human-friendly
curl.http GET api.github.com/users/octocatreturns colorized, auto-formatted JSON with no header flags or jq piping.
Install the whole essential set in one line. On macOS with Homebrew:
brew install fzf ripgrep fd bat eza zoxide starship atuin lazygit jq btop tldr httpie deltaOn Windows, Scoop is the best fit because it installs to user space with no admin prompts (winget or choco work too):
scoop install fzf ripgrep fd bat eza zoxide starship atuin lazygit jq btop tldr httpie deltaOn Linux, apt covers the basics and cargo fills in the Rust tools your distro may not package yet:
sudo apt install fzf ripgrep fd-find bat jq
# Rust tools not in your distro repos:
cargo install eza zoxide starship atuin deltaMake them your defaults with aliases#
Installing these is half the job; the other half is aliasing them over the slow originals so you never fall back. Add to your .bashrc, .zshrc, or PowerShell $PROFILE:
alias cat="bat"for syntax highlighting on every file viewalias ls="eza"for icons and git statusalias grep="rg"because life is too short for slow searchalias find="fd"for readable file discovery- Swap
cdfor zoxide:alias cd="z" alias top="btop"for actually readable monitoring- For diffs, set delta as your git pager instead of aliasing
Tip: Run which cat after sourcing your config to verify the alias took effect. On some systems, shell built-ins take precedence over aliases.One warning: keep the standard Unix tools in CI/CD scripts and Dockerfiles. These aliases are for interactive use; your build pipeline should never depend on bat being installed. With the foundation in place, here are the twenty tools most developers are still missing.
Workflow and Automation#
These tools eliminate repetitive typing and make your dev loop tighter. Most developers live in Makefile or shell scripts for task running. These are better options.
just#
just is a command runner like make, but designed for running project-specific commands rather than building software. No .PHONY declarations, no tab-indentation traps, no implicit rules surprising you at the wrong time.
You define recipes in a Justfile and run them with just <recipe>. Cross-platform, no dependencies beyond the binary itself. At 32.6k stars it's well past the experimental stage.
brew install justdirenv#
direnv automatically loads and unloads environment variables from a .envrc file when you cd into a directory. Walk into a project folder and $DATABASE_URL is set. Walk out and it's gone.
If you've ever sourced a .env file by hand, forgotten to undo it, and then spent 20 minutes debugging why your staging credentials are being used in production, direnv is the fix. Works with any shell, no runtime overhead.
brew install direnvAfter installing, add the hook to your shell config: eval "$(direnv hook bash)" (or zsh/fish equivalent).
entr#
entr watches a set of files and re-runs a command when any of them change. Uses inotify, not polling. The latency is real.
The cult following around entr comes from how simple it is. No config file, no daemon, no setup. Pipe filenames into it and give it a command.
ls *.go | entr go test ./...That's the whole API. apt install entr on Debian/Ubuntu, brew install entr on Mac.
mcfly#
mcfly replaces Ctrl+R shell history search with a neural network that understands context. It tracks which directory you're in, what exit codes your commands returned, and how recently each command ran.
After a week of use, mcfly's suggestions are measurably better than reverse-i-search. The model runs locally, no data leaves your machine. 7.7k stars.
brew install mcflyviddy#
viddy is a modern replacement for watch with one killer feature: time-machine mode. You can pause and rewind through past command outputs instead of watching them scroll by.
Useful for anything where you're watching a metric or log line and want to go back to what you saw 45 seconds ago. 5.3k stars.
cargo install viddyFiles, Text, and Data#
Modern terminal tools for navigating, viewing, and transforming files. These cover the gap between ls/cat/sed and reaching for a full GUI.
Here's how these lesser-known tools stack up by GitHub stars. They're more popular than most developers expect:
yazi#
yazi is a terminal file manager written in Rust with async I/O, image previews, Lua plugins, and vim-style navigation. 35.9k stars and the fastest-rising file manager in the terminal space right now.
People who've used ranger or lf consistently say yazi is faster. The async design means large directories load without blocking. Image previews work in supported terminals (Kitty, iTerm2, Ghostty).
brew install yaziglow#
glow renders markdown in your terminal with syntax highlighting, word wrap, and a pager interface. From the Charm team, the same people behind Bubble Tea.
The use case is simple: you're in a repo and want to read the README without leaving the terminal. Or you've got a local markdown file and want to preview it quickly. 24.1k stars.
brew install glow
# then: glow README.mdcsvlens#
csvlens is less for CSV files. Open a CSV and get interactive scrolling, column-aware search, and filter support. No more squinting at raw comma-separated text.
brew install csvlens
csvlens data.csvSmall project (3.7k stars) but it fills a specific gap that no other tool I've found handles cleanly in the terminal.
sd#
sd is a find-and-replace tool that does what you actually want sed to do. Capture groups use $1 instead of \1. Regex syntax matches what you already know from JavaScript or Python.
7k stars and 12x faster than sed on large inputs.
cargo install sd
# Replace all instances across a file:
sd 'old_function_name' 'new_function_name' src/main.rsgrex#
grex generates regular expressions from example strings. Give it a list of strings that should match and it produces a regex that covers all of them.
brew install grex
grex abc123 def456 ghi789
# outputs: ^[a-i][b-h][c-i]\d{3}$At 8.1k stars, it's one of those tools where you'll forget it exists until the one moment you need it, then wonder how you managed without it.
System and Network Visibility#
These hidden gem CLI tools answer the questions you keep asking:
- Which process is eating my bandwidth?
- Where did all my disk space go?
- Is my network latency spiking or steady?
lazydocker#
lazydocker is a full terminal UI for Docker and Docker Compose from Jesse Duffield (who also built lazygit). View logs, restart containers, exec into shells, check stats, all without typing docker commands.
At 50.5k stars, it's the most popular tool on this entire list and still somehow absent from most "underrated cli tools" roundups.
brew install lazydockerduf#
duf replaces df with a color-coded disk usage display that includes bar graphs and separates local drives from network mounts. 14.9k stars.
brew install dufThe output is readable at a glance in a way that df -h never quite managed. Good candidate for adding to your login scripts.
dust#
dust replaces du with a visual tree that shows disk usage by directory, sorted and indented so you can actually see where space is going. 11.5k stars, written in Rust.
brew install dust
dust ~/DocumentsThe tree layout means you don't have to pipe du through sort and head to find the big directories. It just shows you.
gping#
gping runs ping but plots latency in a real-time ASCII graph in your terminal. You can ping multiple hosts simultaneously and watch the lines diverge. 12.4k stars.
brew install gping
gping google.com cloudflare.com 1.1.1.1Diagnosing intermittent connectivity issues is much faster when you can see the pattern instead of reading numbers.
bandwhich#
bandwhich shows current bandwidth usage broken down by process and by connection. Every connection your machine has open, with live transfer rates. 11.7k stars.
cargo install bandwhich
# Requires elevated permissions:
sudo bandwhichIf you've ever wondered which process is saturating your network, bandwhich answers it in about three seconds.
Git and Code#
Lesser known command line tools for version control, benchmarking, and pipelines. If you use the terminal for your git workflow, these are the cli tools you're not using that will make the biggest difference.
gitui#
gitui is a terminal UI for git written in Rust. Benchmarks show it uses 2x less CPU and 15x less RAM than lazygit on large repositories. 21.7k stars.
If you're on a large monorepo and lazygit feels sluggish, gitui is worth trying. Same concept, tighter resource usage.
cargo install gitui --lockeddifftastic#
difftastic is a structural diff tool that understands syntax instead of just comparing lines. It knows that moving a function's closing brace doesn't mean the function changed. 24.9k stars.
Terminal code reviews become tolerable when the diff tool stops flagging formatting changes as meaningful. difftastic integrates with git via GIT_EXTERNAL_DIFF.
cargo install difftastic
# Wire it into git:
git config --global diff.external diffthyperfine#
hyperfine is a statistical CLI benchmarking tool. It runs warmup iterations, measures variance, and exports results to CSV or JSON. 27.8k stars.
Useful any time you want to compare two commands and get a real answer instead of timing them by hand.
brew install hyperfine
hyperfine 'grep -r pattern .' 'rg pattern'nushell#
nushell is a shell where pipelines carry structured data instead of raw text. ls | where size > 10mb | sort-by modified works because ls returns a table, not a string. 38.9k stars.
You don't have to switch to it full-time. Running it occasionally for data wrangling tasks where you'd normally reach for awk or Python is already useful. See more on prompt-style workflows for how structured shells fit into modern dev flows.
brew install nushellpv#
pv (Pipe Viewer) adds a progress bar and transfer rate to any pipeline. It's been around for years, has almost no GitHub stars, and was still the number-one "how did I not know this" tool in a recent Lobsters thread.
apt install pv
# Progress bar on a large file copy through gzip:
pv large-file.tar | gzip > large-file.tar.gzThat's the whole pitch. Pipe something through it and you get bytes transferred, current rate, and an ETA.
Install All 20 Tools
brew install just direnv entr mcfly yazi glow csvlens grex lazydocker duf dust gping gitui difftastic hyperfine nushell pv
# sd, viddy, and bandwhich via cargo:
cargo install sd viddy bandwhich
# Cargo requires the Rust toolchain:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsudo apt install entr pv
# Rust tools via cargo:
cargo install yazi-fm sd grex bandwhich gitui difftastic hyperfine viddy dustFor just, duf, glow, lazydocker, mcfly, nushell, csvlens, gping, and direnv, check each project's GitHub releases page or use Homebrew on Linux (Linuxbrew works on most distros).
pacman -S just direnv entr pv duf dust gping nushell hyperfine difftastic
# AUR packages via yay or paru:
yay -S mcfly viddy yazi glow csvlens lazydocker gitui sd grex bandwhichMost of these are in the official repos or AUR.
If you want the cli tools you're not using to actually stick, install one category at a time. Workflow tools this week, files and data tools next week. The muscle memory needs to build before you add more.
The ones with the fastest payoff in my experience:
direnvremoves an entire class of environment variable bugsentrtransforms your edit-compile-test loopdifftasticmakes git reviews feel less like archaeology
Start there.