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 (3)

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!

Collapse
 
maxprilutskiy profile image
Max Prilutskiy Lingo.dev

Procs 🤩