DEV Community

Cover image for 27 Rust-based alternatives to classic CLI apps
David Turnbull for Lingo.dev

Posted on

27 Rust-based alternatives to classic CLI apps

Introduction

A couple of months ago, I started working at Lingo.dev. Since I was starting on a new laptop with a completely fresh slate, I took the opportunity to investigate the best Rust-based CLIs to help make my daily work that little bit more delightful.

Deep down, I know that remaking something in Rust doesn't inherently mean that it's better... but it certainly doesn't seem to hurt.

1. grep → ripgrep (rg) (55.0k ⭐)

ripgrep searches recursively and respects .gitignore by default. It skips binary and hidden files automatically, making searches faster and more relevant. The performance improvements come from parallelization and smart file filtering that avoids searching node_modules and build artifacts.

# grep
grep -r "TODO" src/

# rg
rg "TODO" src/
Enter fullscreen mode Exit fullscreen mode

2. cat → bat (54.2k ⭐)

bat adds syntax highlighting, line numbers, and Git integration to file viewing. It pages long output automatically using your system pager. The syntax highlighting works for hundreds of languages and formats, making code review in the terminal more readable.

# cat
cat main.rs

# bat
bat main.rs
Enter fullscreen mode Exit fullscreen mode

3. find → fd (39.5k ⭐)

fd simplifies file finding with regex support, color output, and parallel execution. It ignores hidden and gitignored files by default, reducing noise in search results. The simplified syntax makes common operations like finding files by extension more intuitive.

# find
find . -name "*.rs"

# fd
fd -e rs
Enter fullscreen mode Exit fullscreen mode

4. cd → zoxide (29.3k ⭐)

zoxide learns your frequent directories. It jumps to them with partial names using frecency (frequency + recency) scoring. The tool eliminates repetitive navigation through deep directory structures.

# cd
cd /home/user/projects/myproject

# z
z myproject
Enter fullscreen mode Exit fullscreen mode

5. make → just (27.5k ⭐)

just runs project commands without build system complexity. It organizes development tasks in a readable format. The syntax is simpler than make, focusing on commands rather than dependencies.

# make
make build

# just
just build
Enter fullscreen mode Exit fullscreen mode

6. diff → delta (27.4k ⭐)

delta adds syntax highlighting to diffs. It supports side-by-side view and integrates with Git as a pager. The highlighting makes it easier to spot changes within lines, not just which lines changed.

# diff
diff -u file1.txt file2.txt

# delta
diff -u file1.txt file2.txt | delta
Enter fullscreen mode Exit fullscreen mode

7. time → hyperfine (26.0k ⭐)

hyperfine benchmarks commands statistically. It runs multiple iterations with warmups to provide reliable measurements. The statistical analysis includes mean, median, and standard deviation.

# time
time ls -la

# hyperfine
hyperfine 'ls -la'
Enter fullscreen mode Exit fullscreen mode

8. ls → lsd (14.8k ⭐)

lsd adds color, icons, Git status, and tree view to directory listings. It respects existing ls flags while providing better visual hierarchy through icons and color coding. The Git integration shows modified files at a glance without running separate commands.

# ls
ls -la

# lsd
lsd -la
Enter fullscreen mode Exit fullscreen mode

9. top/htop → bottom (btm) (11.8k ⭐)

bottom shows system metrics as interactive graphs. It combines process management with resource monitoring in a single interface. The graphs provide historical context that text-based displays lack.

# top
top

# btm
btm
Enter fullscreen mode Exit fullscreen mode

10. tree → broot (11.7k ⭐)

broot filters directory trees interactively. Type to filter, navigate, and execute actions on selections. The fuzzy matching and modal interface speed up file system navigation.

# tree
tree -L 2

# broot
broot --sizes
Enter fullscreen mode Exit fullscreen mode

11. du → dust (10.4k ⭐)

dust visualizes disk usage with bars and smart recursion. It filters results by regex to find specific file types. The bar charts make it immediately obvious which directories consume the most space.

# du
du -sh *

# dust
dust
Enter fullscreen mode Exit fullscreen mode

12. hexdump/xxd → hexyl (9.8k ⭐)

hexyl colors hex output to distinguish offsets, bytes, and ASCII. It makes binary inspection clearer by highlighting different byte values and patterns. The colored output helps identify structures and patterns in binary data.

# xxd
xxd file.bin

# hexyl
hexyl file.bin
Enter fullscreen mode Exit fullscreen mode

13. curl → xh (6.8k ⭐)

xh simplifies HTTP requests with concise syntax. It outputs readable responses by default with automatic formatting. The HTTPie-compatible syntax reduces the complexity of common API interactions.

# curl
curl https://httpbin.org/json

# xh
xh GET https://httpbin.org/json
Enter fullscreen mode Exit fullscreen mode

14. sed → sd (6.5k ⭐)

sd focuses on search and replace with simple syntax. It uses regex by default; use -F for literal matches if you don't want escaping. The straightforward find-and-replace syntax eliminates the cognitive overhead of sed's command language.

# sed
sed -i 's/foo/bar/g' file.txt

# sd
sd 'foo' 'bar' file.txt
Enter fullscreen mode Exit fullscreen mode

15. dig → dog (6.5k ⭐)

dog queries DNS with colored output. It supports DNS over TLS, HTTPS, and JSON export for modern DNS workflows. The colored output groups related records and highlights important fields.

# dig
dig example.com

# dog
dog example.com
Enter fullscreen mode Exit fullscreen mode

16. ps → procs (5.7k ⭐)

procs displays processes in colored tables. It includes search, tree view, and live updates without additional flags. The default output shows the most relevant information in a scannable format.

# ps
ps aux

# procs
procs
Enter fullscreen mode Exit fullscreen mode

17. man → tealdeer (tldr) (5.4k ⭐)

tealdeer provides example-driven command summaries. Pages cache locally for instant access without network delays. The examples focus on common use cases rather than exhaustive documentation.

# man
man tar

# tldr
tldr tar
Enter fullscreen mode Exit fullscreen mode

18. sudo → sudo-rs (3.9k ⭐)

sudo-rs reimplements sudo in memory-safe Rust. Ubuntu 25.10 ships it by default as a security improvement. The implementation eliminates entire classes of vulnerabilities through Rust's memory safety guarantees.

# sudo
sudo apt update

# sudo-rs
sudo-rs apt update
Enter fullscreen mode Exit fullscreen mode

19. cut → choose (2.0k ⭐)

choose uses zero-based indexing and Python-style ranges. It supports regex separators for complex delimiters. The Python-style slicing syntax makes it easier to select ranges and work from the end of lines.

# cut
cut -d, -f1,3 data.csv

# choose
choose -f, 0 2 data.csv
Enter fullscreen mode Exit fullscreen mode

20. rm → rip (1.6k ⭐)

rip moves files to a graveyard instead of deleting them. Deletions are reversible, providing a safety net against accidental removal. The graveyard is automatically cleaned based on age or size limits.

# rm
rm file.txt

# rip
rip file.txt
Enter fullscreen mode Exit fullscreen mode

21. awk → frawk (1.3k ⭐)

frawk accelerates awk scripts with JIT compilation. It includes native CSV and TSV support, eliminating the need for field separator configuration. The performance gains are most noticeable on large files where the JIT compiler can optimize hot paths.

# awk
awk -F, '{print $1}' data.csv

# frawk
frawk -d, '{print $1}' data.csv
Enter fullscreen mode Exit fullscreen mode

22. bc → eva (894 ⭐)

eva calculates expressions with syntax highlighting. It includes a REPL with history for interactive calculations. The tool supports common mathematical functions and constants without configuration.

# bc
echo "2 + 2" | bc

# eva
eva "2 + 2"
Enter fullscreen mode Exit fullscreen mode

23. cp → xcp (840 ⭐)

xcp adds progress bars to file copying. It optimizes large transfers automatically using platform-specific techniques. The progress indication is especially valuable for network copies and large directory trees.

# cp
cp -r source/ dest/

# xcp
xcp -r source/ dest/
Enter fullscreen mode Exit fullscreen mode

24. xargs → rargs (549 ⭐)

rargs adds regex capture groups to command templates. It supports batch operations and parallel execution for better performance. The regex patterns let you transform filenames and arguments as part of the command execution.

# xargs
ls *.txt | xargs -I {} mv {} {}.bak

# rargs
ls *.txt | rargs -p '(.*)' mv {0} {0}.bak
Enter fullscreen mode Exit fullscreen mode

25. rename → rnr (548 ⭐)

rnr batch renames files using regex. It prevents collisions and supports undo through dry-run mode. The tool shows what will change before committing, reducing rename accidents.

# rename
rename 's/\.bak$//' *.bak

# rnr
rnr -f '(.*)\.bak' '$1' *.bak
Enter fullscreen mode Exit fullscreen mode

26. sort | uniq → huniq (251 ⭐)

huniq removes duplicates without sorting. It preserves input order, which is useful for maintaining chronological sequences or priority ordering.

# sort | uniq
sort file.txt | uniq

# huniq
huniq < file.txt
Enter fullscreen mode Exit fullscreen mode

27. strings → stringsext (125 ⭐)

stringsext finds text in binaries across multiple encodings. GNU strings supports encoding options via -e, but stringsext detects and handles Unicode and other encodings out of the box. This tool is essential for analyzing modern binaries that contain UTF-16 strings or non-Western character sets.

# strings
strings binary.exe

# stringsext
stringsext binary.exe
Enter fullscreen mode Exit fullscreen mode

Top comments (2)

Collapse
 
vrcprl profile image
Veronica Prilutskaya 🌱 Lingo.dev

19 and 21 are my favorite!!

Collapse
 
sumitsaurabh927 profile image
Sumit Saurabh Lingo.dev

I see people talk about Rust all the time and now I know where I can begin my exploration!