84,116
stars
+22+171+750
3,430
forks
446
watchers
1,221
prs
3,235
issues
87
releases
393
discussions
README
---
Show your love for fzf -- T-shirts, mugs, and stickers now available!
---
fzf is a general-purpose command-line fuzzy finder and an interactive terminal toolkit.
Whether you're selecting files, browsing command history, previewing data,
navigating complex datasets with fuzzy matching, or creating custom menus and
workflows, fzf provides the building blocks to turn shell scripts into rich
terminal applications.
Highlights
----------
- Portable // Distributed as a single binary for easy installation
- Fast // Optimized to process millions of items in milliseconds
- Programmable // Event-driven architecture for building custom terminal interfaces and workflows
- Batteries-included // Comes with integrations for Bash, Zsh, Fish, Nushell, Vim, and Neovim
Table of Contents
-----------------
Installation
Using Homebrew
Using Mise
Linux packages
Windows packages
Using git
Binary releases
Setting up shell integration
Vim/Neovim plugin
Upgrading fzf
Building fzf
Usage
Using the finder
Display modes
--height mode
--popup mode
Search syntax
Environment variables
Customizing the look
Options
Demo
Examples
Key bindings for command-line
Fuzzy completion
Files and directories
Process IDs
Host names
Environment variables / Aliases
Customizing fuzzy completion for bash and zsh
Customizing fzf options for completion
Customizing completion source for paths and directories
Supported commands (bash)
Custom fuzzy completion
Fuzzy completion for fish
Fuzzy completion for Nushell
Vim plugin
Advanced topics
Customizing for different types of input
Performance
Executing external programs
Turning into a different process
Reloading the candidate list
1. Update the list of processes by pressing CTRL-R
2. Switch between sources by pressing CTRL-D or CTRL-F
3. Interactive ripgrep integration
Preview window
Previewing an image
Tips
Respecting .gitignore
Fish shell
fzf Theme Playground
Related projects
License
Goods
Sponsors :heart:
Installation
------------
Using Homebrew
You can use Homebrew (on macOS or Linux) to install fzf.
sh
brew install fzf
[!IMPORTANT]
To set up shell integration (key bindings and fuzzy completion),
see the instructions below.
fzf is also available [via MacPorts][portfile]: sudo port install fzf
[portfile]: https://github.com/macports/macports-ports/blob/master/sysutils/fzf/Portfile
Using Mise
You can use mise to install fzf.
sh
mise use -g fzf@latest
Linux packages
| Package Manager | Linux Distribution | Command |
| --------------- | ----------------------- | ---------------------------------- |
| APK | Alpine Linux | sudo apk add fzf |
| APT | Debian 9Top issues
#4300Fzf does not select path20 comments · 2025-03-06#4065fzf on Windows assumes UTF8 stdin, but it should assume CP_ACP stdin (current system codepage)18 comments · 2024-10-26#3522I need help to remove entries from history16 comments · 2023-12-02#2170[FR] Sending the current line with its ANSI color codes preserved to the preview command15 comments · 2020-09-06#1526[ubuntu] Fast scroll in fzf leaves garbage on screen15 comments · 2019-03-13#1049Feature request: Add an option to display date-time of fzf command history15 comments · 2017-09-11#3799Can't input non ascii characters14 comments · 2024-05-16#2123Expand SSH hostname to IP where necessary (telnet for example)13 comments · 2020-07-27
Discussions
#4950How can I have `fzf` allow me inserting a gpg password when the sink is a call to `pass` and the passphrase hasn't been cached yet?4 comments · 2026-10-30#4935Cursor position isn't reset after reloading list. Is this an intended behavior?2 comments · 2026-10-14#4930Focus event isn't fired after reloading list. Is it a bug or by design?2 comments · 2026-10-10#4925Change temporary file directory1 comments · 2026-09-26#4896Recent build failure4 comments · 2026-08-17#4888Searching for literal newline when using `--read0`1 comments · 2026-08-07#4847FZF_CTRL_R_OPTS with --no-tac or --tac has no effect on history order in fish shell integration2 comments · 2026-06-27#4826ccline: I built something that complements fzf — ask your shell instead of searching history0 comments · 2026-06-10
Latest release
0.75.0 v0.75.0 2026-11-07- Added {change,transform,bg-transform}-info-command actions (4951) (@casperdcl)
sh
seq 100 | fzf --info-command 'echo "mode: A | $FZF_INFO"' \
--bind 'ctrl-a:change-info-command:echo "mode: A | $FZF_INFO"' \
--bind 'ctrl-b:change-info-command:echo "mode: B | $FZF_INFO"'
- transform-nth and transform-with-nth (and their bg- variants) no longer split the output at |
- Only change-nth and change-with-nth rotate through |-separated values
- Fixed the bound command being replaced with the output. e.g. With transform-nth(echo '1|2'), the next key press