The terminal is where developers spend significant time. Modern CLI tools improve on Unix classics with better defaults, performance, and usability. Here are the ones worth adopting.

File Operations

fd (find replacement)

# Find all TypeScript files
fd -e ts

# Find files matching a pattern, excluding node_modules
fd "component" --type f --exclude node_modules

# Find and delete all .DS_Store files
fd -H .DS_Store -x rm

fd is faster than find, respects .gitignore by default, and has sane syntax.

ripgrep (grep replacement)

# Search for a pattern
rg "useState" --type ts

# Search with context
rg "TODO" -C 2

# Count matches per file
rg "import" --count

Ripgrep is significantly faster than grep on large codebases and respects .gitignore out of the box.

eza (ls replacement)

# Tree view with git status
eza --tree --git-ignore -L 3

# Long format with icons
eza -la --icons

Better formatting, git integration, and tree view built in.

Shell and Navigation

zoxide (cd replacement)

# Jump to a frequently used directory
z projects

# Interactive selection
zi

Zoxide learns your habits and lets you jump to directories with partial names. After a week of use, you’ll never type full paths again.

fzf (fuzzy finder)

# Find and open a file
vim $(fzf)

# Search command history
Ctrl+R  # (with fzf integration)

# Kill a process interactively
kill -9 $(ps aux | fzf | awk '{print $2}')

fzf turns any list into an interactive fuzzy search. The shell history integration alone is worth the install.

starship (prompt)

A fast, customizable prompt that shows relevant context:

~/projects/my-app on main [!+] via v20.11.0 took 3s

Git branch, language versions, command duration, error indicators — all automatic and fast.

Development Tools

jq (JSON processing)

# Pretty-print JSON
curl -s api.example.com/data | jq .

# Extract fields
cat data.json | jq '.users[] | {name, email}'

# Filter and transform
jq '.items | map(select(.price > 100)) | length' catalog.json

bat (cat replacement)

Syntax highlighting, git integration, and line numbers by default:

bat src/main.ts

delta (diff viewer)

Side-by-side diffs with syntax highlighting. Use it as your git pager:

git config --global core.pager delta

The Meta-Advice

Don’t try to adopt everything at once. Pick one tool, use it for a week, and see if it sticks. The best tool is the one you actually use.