fzf
General-purpose command-line fuzzy finder.
External Tool
This open-source tool is maintained externally. View the source on GitHub to learn more or run it yourself.
Browse text & tools tools →What's next with fzf?
Choose how you want to get started.
Use it free
Open the official tool or demo — no account needed.
Self-host it
Run the open-source version on your own infrastructure.
What is fzf?
fzf is a command-line fuzzy finder and interactive terminal toolkit designed to streamline workflow by enabling users to filter and select items from lists efficiently. Its primary purpose is to simplify tasks involving large datasets, such as navigating files, command history, or git commits, by using a novel fuzzy matching algorithm that allows partial character input. Developers, system administrators, and power users who frequently interact with terminal interfaces benefit most from fzf, as it reduces the time spent on repetitive selection tasks. The tool solves the problem of manually sifting through extensive lists by providing real-time, context-aware filtering that adapts to user input, making it a productivity booster for terminal-heavy workflows.
How it works
fzf is a general-purpose fuzzy finder that transforms any list of text into an interactive filter interface. It is distributed as a single binary, making it portable across Unix-like systems, and is optimized for speed, capable of processing millions of items in milliseconds. Its core purpose is to enhance terminal efficiency by allowing users to quickly locate and select items through fuzzy matching. This is particularly useful for tasks like file navigation, command history recall, or filtering logs, where traditional grep or find commands fall short. fzf supports fuzzy matching with a unique algorithm that prioritizes partial matches, enabling users to type incomplete patterns (e.g., 'git' to find 'git commit'). It integrates with shells like Bash, Zsh, Fish, and editors like Vim, offering workflow enhancements. Features include previews of selected items, keyboard-driven navigation, and support for custom scripts to extend functionality.
How to use it
- 1Pipe a list of items to fzf using commands like `ls | fzf` to filter files. 2. Use keyboard shortcuts (e.g., Ctrl+J/Ctrl+K for navigation) to select an item. 3. Press Enter to execute the selected item or pass it to another command via `--with-nth` or `--preview`. 4. Customize behavior with options like `--reverse` for inverted sorting or `--tiebreak` for prioritizing matches. Practical tips include combining fzf with tools like `fd` or `rg` for faster file searches, using `--header` to add prompts, and leveraging `--bind` to create custom key mappings for repetitive tasks.
What it can do
- fuzzy finder
Use cases
Assumptions and limitations
Assumptions
- source: https://github.com/junegunn/fzf
- license: MIT — free to use
- privacy: Self-hosted — you control your data
Limitations
- Limited support for graphical user interfaces (GUI) integration
- Learning curve for mastering keyboard shortcuts and advanced options
- Dependence on shell or editor integration for full functionality
- Performance degradation with extremely large datasets (though rare)
- No built-in search history persistence across sessions
Understanding the result
General-purpose command-line fuzzy finder.
Tool details
- Clearly flagged when a network request is needed.
- No account, no sign-up, and no tracking of your content.
- Powered by (MIT).
- Built with
- (junegunn/fzf)
- License
- MIT
- Runs locally
- No — requires a network request
- Verification
- Not yet verified
- Input
- Query
- Output
- Text
Built with junegunn/fzf. OpenToolVault provides the discovery and browser interface while crediting the original project maintainers.
- Built with
- License
- MIT
Open-source project
OpenToolVault is an independent directory. We are not affiliated with or endorsed by this project.
References
- / — GitHub Repository
Upstream project · GitHub
- MIT License
Upstream project
Frequently asked
What is fzf and how does it differ from traditional command-line tools?
fzf is a fuzzy finder that enhances terminal workflows by allowing partial matches for lists of text. Unlike traditional tools like grep or find, which require exact or pattern-based matches, fzf prioritizes relevance through its fuzzy algorithm, making it faster for ad-hoc selections. It also integrates directly with shells and editors, offering interactive interfaces for tasks like file navigation or command history.
How does fzf's fuzzy matching algorithm work?
fzf's fuzzy matching algorithm ranks candidates based on proximity to the input pattern, prioritizing matches that align with the input's characters in order. For example, typing 'git' will match 'git commit' more closely than 'git rebase' because the former has a direct character sequence. The algorithm also allows for omitted characters, making it intuitive for rapid filtering.
How do I integrate fzf with my shell or editor?
To integrate fzf with Bash, Zsh, or Fish, install the tool and configure shell plugins or scripts that pipe commands to fzf. For Vim, use the built-in fzf plugin to search files or buffers. For example, in Bash, add `alias ls='ls | fzf'` to your .bashrc to enable fuzzy file listing. Custom scripts can also bind fzf to specific commands for automation.
How does fzf compare to alternatives like rg or fd?
fzf is not a replacement for tools like ripgrep (rg) or fd, which are focused on file searching. Instead, fzf complements these tools by providing an interactive interface for filtering results. For example, `fd` can locate files, and fzf can then filter those results for quick selection. Similarly, fzf can enhance git workflows by filtering commit history, whereas rg is better suited for text pattern searches in files.
How do I troubleshoot common fzf errors?
Common errors include missing dependencies (e.g., `fzf` not installed) or incorrect shell configuration. Verify installation by running `fzf --version`. For shell integration issues, check plugin configurations in your shell's config file (.bashrc, .zshrc). If previews fail, ensure `--preview` commands are correctly formatted. For keyboard shortcut conflicts, use `--bind` to override default mappings.