Skip to content

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
Step-by-step guide: how to use fzfInstall, first run, examples, tips and FAQs

How to get it

  1. 1

    Install with a package manager

    Install with Homebrew (macOS or Linux)

    brew install fzf

    Install with Mise

    mise use -g fzf@latest
  2. 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. 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

ProjectStarsTypeLevelUpdatedBest for
fzf (this)83.9kDev toolbeginner8 days agoCommand-line users who often search file names or command history
gum24.6kCLIbeginner5 days agoDevelopers who write bash scripts or dotfile aliases and want simple interactive prompts
zoxide40.4kDev toolbeginner4 days agoDevelopers who move between many project folders in a terminal
atuin32.2kDev toolbeginner4 days agoDevelopers who work in a terminal and often need to find past commands
inshellisense10.8kDev toolbeginner7 days agoDevelopers who spend a lot of time in the terminal and want suggestions for unfamiliar command options
autocomplete25.2kOtherintermediate1.5 years agomacOS 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.