FZF vs Ripgrep: The Ultimate CLI Search War

Old rusty typewriter.

The Search Revolution

If you are still typing grep -r "my_function" . and waiting 10 seconds for a result, you are working in slow motion. The modern terminal has moved on to a faster, “Rust-ified” ecosystem. Today, two tools stand above the rest: FZF and Ripgrep (rg).

While beginners often ask which one they should install, the pros know the truth: they are not competitors. They solve two fundamentally different problems.

1. Ripgrep: The Raw Speed King

Ripgrep is a line-oriented search tool. It is designed to look inside files for patterns.

Built in Rust, it is consistently the fastest search tool on the planet, beating the legendary GNU grep, The Silver Searcher (ag), and ack. It achieves this by using a Finite Automata-based regex engine and intelligently respecting your .gitignore files by default.

Key Features:

  • Zero Latency: On a typical project with 100,000 files, Ripgrep can find a string in milliseconds.
  • Smart Filtering: It automatically skips binary files, hidden files, and everything in your .gitignore.
  • Unicode Support: It handles UTF-8 correctly without a performance penalty.

Power Snippet:

# Search for 'config' only in Rust/Python files, ignoring 'tests' folders
rg "config" -t rust -t py -g "!tests/*"

2. FZF: The Interactive Fuzzy Finder

FZF is a general-purpose command-line fuzzy finder. It doesn’t “search” your hard drive itself; instead, it takes a list of items (filenames, history, processes) and lets you interactively filter them as you type.

If Ripgrep is a sniper rifle, FZF is a high-speed sorting machine.

Key Features:

  • Fuzzy Matching: You don’t need to type the full word. Typing fbr will find foo/bar/readme.md.
  • Infinite Input: You can pipe almost anything into it: ps -ef | fzf lets you find and kill a process instantly.
  • Vim/Tmux Integration: It’s almost a mandatory plugin for modern Vim users.

3. The Performance Showdown

Feature Ripgrep (rg) FZF
Language Rust Go
Primary Goal Search Content Filter Lists
Speed 10/10 (Global Search) 10/10 (Interactive)
Respects .gitignore Yes (Native) Only if piped from rg or fd
Interface CLI (Standard Out) TUI (Interactive)

4. The “Holy Grail” Workflow: Combining Titans

The real magic happens when you use them together. By default, FZF is a bit slow because it uses the old find command as a backend. You should replace the FZF backend with Ripgrep to get instant “fuzzy finding” across even the largest projects.

Step 1: Set Ripgrep as the Default Command

Add this to your .zshrc or .bashrc:

export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"'

Step 2: The “Interactive Grep” Script

Combine them so you can search inside files with the FZF TUI. This script opens FZF, lets you type a regex, and shows a live preview of the matching code via Ripgrep.

# The 'Interactive Grep'
rg --line-number --column --no-heading --color=always --smart-case "" | \
  fzf --ansi \
      --delimiter : \
      --preview 'bat --style=numbers --color=always --highlight-line {2} {1}' \
      --bind 'enter:become(vim {1} +{2})'

Conclusion

Stop choosing and start integrating. Use Ripgrep for its raw, index-free speed when you know what you’re looking for. Use FZF to turn every list in your terminal into a searchable, interactive interface. Together, they turn a 30-second navigation task into a sub-second muscle memory.


References & Further Reading

Last updated on