Repolode
junegunn

junegunn/fzf

A general-purpose command-line fuzzy finder that filters any list of input and turns shell scripts into interactive terminal selectors.

Stars
83,703
Forks
5,336
Open issues
336
Last commit
8 hours ago

What is it?

fzf reads a list from standard input, lets you type a fuzzy query to narrow it down interactively, and writes the selected item to standard output. Because it works on any text stream, it can be used for files, command history, process lists, git branches, or any other output that can be piped in.

Beyond simple selection, fzf offers a preview window that runs a command on the focused item, multi-select mode, configurable key bindings, and display modes such as fullscreen, a height-limited area below the cursor, or a tmux/Zellij popup. It ships as a single binary and provides shell integration for Bash, Zsh, Fish, and Nushell, adding key bindings like CTRL-T and CTRL-R and fuzzy tab completion.

It also has an event-driven action system for reloading lists, executing external programs, and replacing itself with another process, which makes it possible to build custom terminal interfaces. Vim and Neovim integration is available through a separate plugin.

Key features

  • 01Reads any line-based input from stdin and filters it with fuzzy matching.
  • 02Supports extended search syntax with exact, prefix, suffix, and inverse matches.
  • 03Provides a preview window that runs a command on the focused item.
  • 04Offers fullscreen, height-limited, and tmux/Zellij popup display modes.
  • 05Integrates with Bash, Zsh, Fish, and Nushell for history search and path completion.
  • 06Distributed as a single binary across Linux, macOS, and Windows package managers.

Use cases

  • Quickly finding and opening files in a terminal session with a fuzzy picker.
  • Searching shell command history with CTRL-R instead of scrolling through it.
  • Building interactive selection menus inside shell scripts.
  • Browsing git branches, processes, or log output with live previews.

Quick start

  1. 1

    Install fzf with Homebrew

    brew install fzf
  2. 2

    Set up shell integration for bash (key bindings and fuzzy completion) by adding this to your shell config

    eval "$(fzf --bash)"
  3. 3

    Run fzf to start the interactive finder

    fzf

Topics

FAQ

What is fzf?
A general-purpose command-line fuzzy finder that filters any list of input and turns shell scripts into interactive terminal selectors. fzf reads a list from standard input, lets you type a fuzzy query to narrow it down interactively, and writes the selected item to standard output. Because it works on any text stream, it can be used for files, command history, process lists, git branches, or any other output that can be piped in.
Is fzf free to use? What license does it have?
fzf is open source under the MIT license. Check the license terms before using it in commercial products.
Is fzf still maintained?
Actively maintained. The last commit to fzf was on Oct 20, 2026.
What can I use fzf for?
Quickly finding and opening files in a terminal session with a fuzzy picker. Searching shell command history with CTRL-R instead of scrolling through it. Building interactive selection menus inside shell scripts. Browsing git branches, processes, or log output with live previews.
How do I install fzf?
Install fzf with Homebrew: brew install fzf Set up shell integration for bash (key bindings and fuzzy completion) by adding this to your shell config: eval "$(fzf --bash)" Run fzf to start the interactive finder: fzf
Where can I get fzf?
The source code and installation instructions are on GitHub: https://github.com/junegunn/fzf

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects