The standard Unix tools — grep, find, cat, ls, cd — were designed in the 1970s. They work, but they were built for a world where codebases had hundreds of files, not hundreds of thousands. Modern CLI tools written in Rust and Go are faster, smarter, and more developer-friendly. Once you switch, you will never go back.
These five tools are the ones we install on every new development machine before anything else. They are all free, open-source, and install in seconds. Combined, they transform your terminal from a text interface into a productivity engine — especially when you run them inside one of the modern terminal emulators we recommend.
Quick Answer: Install all five: fzf (fuzzy find everything), ripgrep (search code 10x faster than grep), bat (cat with syntax highlighting), eza (ls with Git status and tree view), and zoxide (cd that learns your habits). Total install time: 2 minutes via brew install fzf ripgrep bat eza zoxide.
Why Modern CLI Tools Matter
Developers spend 30-50% of their time in a terminal. Every second saved on a search, every unnecessary keypress eliminated, compounds over months and years. The tools in this guide are not incremental improvements — they are order-of-magnitude speedups for common operations:
- ripgrep searches code 10-15x faster than grep
- fzf reduces "I know the file exists but cannot remember where" from minutes to seconds
- zoxide eliminates typing long directory paths entirely
- bat adds syntax highlighting and line numbers to every file preview
- eza shows Git status inline so you know what has changed at a glance
All five tools are written in Rust (except fzf, which is Go), giving them near-instant startup times and minimal resource usage. They respect your existing workflows — you can alias them over the original commands or use them alongside, and they pair naturally with the terminal multiplexers that keep your sessions organized.
Quick Overview
| Tool | Replaces | Language | Key Feature | GitHub Stars |
|---|---|---|---|---|
| fzf | find, Ctrl+R | Go | Fuzzy match anything | 67k+ |
| ripgrep | grep, ag | Rust | 10x faster code search | 50k+ |
| bat | cat, less | Rust | Syntax highlighting | 51k+ |
| eza | ls, tree | Rust | Git-aware file listing | 14k+ |
| zoxide | cd, autojump, z | Rust | Learns your directories | 24k+ |
1. fzf — Fuzzy Finder for Everything
fzf is a general-purpose fuzzy finder that turns any list into an interactive, searchable menu. Files, command history, Git branches, processes, environment variables — pipe anything into fzf and fuzzy-search through it in real time. It is the single most useful CLI tool you can install.
What makes it essential: fzf's shell integration transforms three key operations. Ctrl+R becomes a fuzzy search through your entire command history — type a few characters from any part of a previous command and fzf finds it instantly. Ctrl+T opens a fuzzy file finder in the current directory. Alt+C fuzzy-navigates to any subdirectory. These three bindings alone save minutes per day.
Power use cases: fzf integrates with virtually everything. Use git branch | fzf to switch branches interactively. Use docker ps | fzf to select a container. Pipe rg (ripgrep) results into fzf to interactively narrow code search results. In Vim or Neovim, the fzf plugin provides fuzzy file opening, buffer switching, and grep integration. The preview window (--preview flag) shows file contents while you search, using bat for syntax highlighting.
Performance: fzf searches through 100,000 entries in under 50ms. The fuzzy matching algorithm scores results by match quality, recency, and frequency, surfacing the most relevant result first. It is fast enough that you never wait for it.
Install: brew install fzf (macOS), sudo apt install fzf (Ubuntu), or clone from GitHub. Run the install script to enable shell key bindings.
2. ripgrep — grep, But 10x Faster
ripgrep (command: rg) is a line-oriented search tool that recursively searches directories for a regex pattern. It does what grep -r does, but 10-15x faster, with smarter defaults and better output formatting.
What makes it essential: ripgrep's speed changes how you search code. Instead of navigating to a file and searching within it, you search the entire codebase and navigate to results. Searching a 10GB codebase with 500,000 files takes under a second. ripgrep achieves this through SIMD-accelerated regex matching, parallel directory traversal, memory-mapped I/O, and automatic binary file skipping.
Smart defaults: ripgrep respects .gitignore by default, so it skips node_modules, target/, .git/, and other ignored directories without being told. It searches recursively from the current directory. It uses colors for match highlighting. It shows line numbers. These defaults mean the basic command rg "pattern" does the right thing without flags.
Advanced features: ripgrep supports --type to restrict search to specific languages (rg --type py "import pandas"), --glob for file pattern filtering, --replace for find-and-replace across files, and -C for context lines around matches. The --json output mode integrates with other tools for structured processing.
Install: brew install ripgrep (macOS), sudo apt install ripgrep (Ubuntu), or cargo install ripgrep (from source).
3. bat — cat with Syntax Highlighting
bat is a cat replacement that adds syntax highlighting, line numbers, Git diff markers, and automatic paging. It supports over 200 programming languages and integrates with your terminal theme.
What makes it essential: Every time you run cat file.py to quickly check a file, bat gives you the same output with syntax highlighting and line numbers. This sounds minor, but when you are reading through configuration files, reviewing scripts, or checking log formats, colored syntax makes the content dramatically easier to parse. Git integration shows which lines have been modified, added, or removed since the last commit.
Integration: bat is most powerful as a preview engine for other tools. Set FZF_DEFAULT_OPTS="--preview 'bat --color=always --style=numbers --line-range=:500 {}' and every fzf file search shows a syntax-highlighted preview. Use bat as a pager for git diff with git config --global core.pager "bat --paging=always". The man command output can be piped through bat for colored man pages.
Customization: bat supports custom themes (including all VS Code themes via .tmTheme files), configurable styles (line numbers, grid, header, Git markers), and language-specific syntax definitions. The --plain flag disables all decorations for scripting use cases where you want colored output without headers.
Install: brew install bat (macOS), sudo apt install bat (Ubuntu — the command may be batcat), or cargo install bat.
4. eza — ls with Git Status and Tree View
eza (formerly exa) is a modern replacement for ls that adds Git integration, color-coded file types, tree view, and extended metadata display. It is the actively maintained fork of the original exa project.
What makes it essential: eza's Git integration shows file status directly in directory listings. Modified files show [M], new files show [N], and ignored files are dimmed. This means a single eza -la tells you both the file structure and what has changed — information that normally requires switching between ls and git status.
Tree view: eza --tree replaces the tree command with a colorized, Git-aware tree view. Add --level=2 to limit depth and --git-ignore to respect your .gitignore. The tree view is invaluable for understanding project structure without opening an editor.
Extended details: eza -la --git --icons shows file permissions, sizes (human-readable by default), modification dates, Git status, and file type icons in a single clean listing. The column alignment and color scheme make large directory listings easier to scan than the default ls -la output.
Common aliases: Most developers alias eza over ls: alias ls="eza", alias ll="eza -la --git --icons", alias lt="eza --tree --level=2 --git-ignore". These aliases are drop-in compatible since eza supports all common ls flags.
Install: brew install eza (macOS), sudo apt install eza (Ubuntu 24.04+), or cargo install eza.
5. zoxide — cd That Learns Your Habits
zoxide is a smarter cd command that tracks which directories you visit most frequently and lets you jump to them with partial names. Type z proj and zoxide takes you to ~/projects/myapp because that is the directory matching "proj" that you visit most often.
What makes it essential: zoxide eliminates the most tedious part of terminal navigation: typing long directory paths. After a few days of normal use, zoxide learns your directory patterns. z col jumps to ~/projects/maniginam/colony. z doc jumps to ~/Documents. z api test jumps to ~/projects/myapp/src/api/tests. The more specific your query, the more accurate the match. When multiple directories match, the one you visit most frequently wins.
Interactive mode: zi (zoxide interactive) opens an fzf-powered directory picker showing all your tracked directories ranked by frequency. This is the "I know I was working on something last week but cannot remember the path" escape hatch. It works especially well on machines with deeply nested project structures.
How it works: zoxide maintains a database of directory visits, ranked by frequency and recency (using a "frecency" algorithm). Each time you cd into a directory, zoxide increments its score. Directories you visit daily score higher than ones you visited once a month ago. The algorithm is the same one Firefox uses for the URL bar.
Shell integration: zoxide hooks into your shell's cd command. You can either use the z command alongside cd, or replace cd entirely with eval "$(zoxide init zsh --cmd cd)". It works with bash, zsh, fish, PowerShell, and Nushell.
Install: brew install zoxide (macOS), sudo apt install zoxide (Ubuntu), or cargo install zoxide. Add the init line to your .zshrc: eval "$(zoxide init zsh)".
Quick Setup Guide
Install all five tools in one command:
brew install fzf ripgrep bat eza zoxide
Add these lines to your ~/.zshrc (or ~/.bashrc):
# fzf key bindings and completion
source <(fzf --zsh)
# fzf with bat preview
export FZF_DEFAULT_OPTS="--preview 'bat --color=always --style=numbers --line-range=:500 {}' --preview-window=right:50%"
export FZF_DEFAULT_COMMAND="rg --files --hidden --glob '!.git'"
# eza aliases
alias ls="eza"
alias ll="eza -la --git --icons"
alias lt="eza --tree --level=2 --git-ignore"
# zoxide init
eval "$(zoxide init zsh)"
# bat as default pager
export BAT_THEME="Dracula"
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
Reload your shell (source ~/.zshrc) and these tools are ready. The entire setup takes under 2 minutes and transforms your terminal experience immediately. If you want to go further and swap even more of your daily GUI habits for the keyboard, our guide to CLI tools that replace GUI apps picks up where this one leaves off.
Frequently Asked Questions
What are the best CLI tools for developers in 2026?
The five essential CLI tools for developers in 2026 are: fzf (fuzzy finder for files, commands, and anything piped to it), ripgrep (fast code search that replaces grep), bat (cat replacement with syntax highlighting and line numbers), eza (modern ls replacement with Git integration and tree view), and zoxide (smart cd replacement that learns your most-used directories). All are free, open-source, and install in seconds via Homebrew or your system package manager.
Is ripgrep faster than grep?
Yes, ripgrep is significantly faster than grep for code search. In benchmarks searching a 10GB codebase, ripgrep completed in 0.8 seconds versus 12.3 seconds for GNU grep. Ripgrep achieves this through SIMD-accelerated regex matching, automatic .gitignore respect, parallel directory traversal, and memory-mapped file I/O. It also defaults to recursive search and skips binary files, making it more convenient for developer workflows.
What is the difference between exa and eza?
Eza is the actively maintained fork of exa. The original exa project was abandoned by its maintainer in 2023. Eza picked up development, added new features (hyperlinks, mount point detection, improved Git status), fixed bugs, and continues to receive regular updates. If you currently use exa, switch to eza as a drop-in replacement. The command-line interface is identical.
How do I install fzf?
Install fzf with Homebrew (brew install fzf), apt (sudo apt install fzf), or from GitHub releases. After installation, run the install script ($(brew --prefix)/opt/fzf/install on macOS) to enable shell key bindings: Ctrl+R for fuzzy command history search, Ctrl+T for fuzzy file search, and Alt+C for fuzzy directory navigation. Add fzf configuration to your .zshrc or .bashrc to customize default options.
Can I use these CLI tools on Windows?
Yes, all five tools work on Windows. Ripgrep, bat, eza, and zoxide have native Windows builds available via winget, scoop, or chocolatey. Fzf works on Windows via PowerShell or Windows Terminal. For the best experience on Windows, use Windows Terminal with PowerShell 7 or WSL2 (Windows Subsystem for Linux), which provides a full Linux environment where these tools run identically to macOS and Linux.
We update this guide as tools release new features. Last major update: June 2026. All tools are free and open-source — no vendor sponsored this article.