
fzf
A fast command-line tool for picking items from any list by typing a few letters.
- Stars
- 83.9k
- Forks
- 4.2k
- Licence
- MIT
- Language
- Go
- Last update
- 8 days ago
- Type
- Dev tool
What it is
fzf is a fuzzy finder that runs in the terminal. You pipe a list into it, such as files, command history, or processes, type a few characters, and it narrows the list to matches so you can pick one. It also ships shell integrations for key bindings and fuzzy completion, and can be used as a building block in scripts.
- Press a key to fuzzy-search your shell command history and run a past command
- Pick a file from a project with a fuzzy search and open it in your editor
- Interactively choose git branches, processes, or host names from a list
- Build a custom menu in a shell script that lets a user choose among options
Great for
- Command-line users who often search file names or command history
- People who write shell scripts and want interactive menus
- Vim or Neovim users who want fuzzy selection inside the editor
- Developers who want a single portable binary with no runtime dependencies
Not ideal for
- People who prefer graphical point-and-click file managers, since fzf is terminal-only
- Users on systems where they cannot install a binary or use a package manager, since setup relies on those routes
- Anyone wanting a full-featured search engine for large indexed corpora; fzf filters lists in memory
How to get it
- 1
Install with a package manager
Install with Homebrew (macOS or Linux)
brew install fzfInstall with Mise
mise use -g fzf@latest - 2
Run it
- Install fzf with a package manager from the README, such as brew install fzf.
- Set up shell integration by following the README's 'Setting up shell integration' section for your shell.
- Press the documented key binding in your shell to open the fuzzy finder, such as for history or files.
- Type a few characters to narrow the list, then press Enter to select.
- 3
Get the most out of it
- Use the --height and --popup display modes to change how fzf appears on screen
- Use the preview window to inspect files or data before selecting
- Use fuzzy completion for files, process IDs, and host names via shell integration
- Set environment variables to customize default behavior, as described in the README's Environment variables section
Downloads
Strengths
- Distributed as a single binary for easy installation
- Designed to process large lists quickly, per the README
- Integrates with Bash, Zsh, Fish, Nushell, Vim, and Neovim
Trade-offs
- Terminal-only, so it has no graphical interface
- Full value comes from shell integration, which requires editing your shell configuration
How it compares
| Project | Stars | Type | Level | Updated | Best for |
|---|---|---|---|---|---|
| fzf (this) | 83.9k | Dev tool | beginner | 8 days ago | Command-line users who often search file names or command history |
| gum | 24.6k | CLI | beginner | 5 days ago | Developers who write bash scripts or dotfile aliases and want simple interactive prompts |
| zoxide | 40.4k | Dev tool | beginner | 4 days ago | Developers who move between many project folders in a terminal |
| atuin | 32.2k | Dev tool | beginner | 4 days ago | Developers who work in a terminal and often need to find past commands |
| inshellisense | 10.8k | Dev tool | beginner | 7 days ago | Developers who spend a lot of time in the terminal and want suggestions for unfamiliar command options |
| autocomplete | 25.2k | Other | intermediate | 1.5 years ago | macOS developers who use zsh, bash or fish and want suggestions for common CLIs |
Stats synced from GitHub. The assessment above was drafted with AI from the project's README on 2026-10-29 and may miss recent changes — check the README before relying on a command. MIT licence: free to use, modify and distribute, including commercially, as long as you keep the copyright notice.