fzf 0.71.0

An interactive command line filter program for any kind of list; files, command history, processes, hostnames, bookmarks, git commits, etc. It implements a "fuzzy" matching algorithm, so you can quickly type in patterns with omitted characters and still get the results you want. Highlights πŸ“¦ Portable β€” Distributed as a single binary for easy installation ⚑ Blazingly fast β€” Highly optimized code instantly processes millions of items πŸ› οΈ Extremely versatile β€” Fully customizable via an event-action binding mechanism πŸ”‹ Batteries included β€” Includes integration with bash, zsh, fish, Vim, and Neovim

Tags cli finder go ruby shell
License MITL
State initial

Recent Releases

0.71.015 Mar 2026 03:15 major bugfix: Cross-reload item identity with `--id-nth`. - Added `--id-nth=NTH` to define item identity fields for cross-reload operations. - When a `reload` is triggered with tracking enabled, fzf searches for the tracked item by its identity fields in the new list. - `--track --id-nth..` tracks by the entire line. - `--track --id-nth 1` tracks by the first field. - `--track` without `--id-nth` retains the existing index-based tracking behavior. - The UI is temporarily blocked (prompt dimmed, input disabled) until the item is found or loading completes. - Press `Escape` or `Ctrl-C` to cancel the blocked state without quitting. - Info line shows `+T*` / `+t*` while searching. - With `--multi`, selected items are preserved across `reload-sync` by matching their identity fields. Performance improvements. - The search performance now scales linearly with the number of CPU cores, as we dropped static partitioning to allow better load balancing across threads. ``. === query: 'linux' ===. all baseline: 17.12ms current: 14.28ms (1.20x) matches: 179966 (12.79 ). 1T baseline: 136.49ms current: 137.25ms (0.99x) matches: 179966 (12.79 ). 2T baseline: 75.74ms current: 68.75ms (1.10x) matches: 179966 (12.79 ). 4T baseline: 41.16ms current: 34.97ms (1.18x) matches: 179966 (12.79 ). 8T baseline: 32.82ms current: 17.79ms (1.84x) matches: 179966 (12.79 ). ``. - Improved the cache structure, reducing memory footprint per entry by 86x. - With the reduced per-entry cost, the cache now has broader coverage. fish: Improved command history (CTRL-R). - AWK tokenizer not treating a new line character as whitespace. - `-- accept,with -nth` removing trailing whitespaces with a non-default `--delimiter`. - OSC8 hyperlinks being mangled when the URL contains unicode characters. - `--with-shell` not handlin
0.70.109 Mar 2026 03:15 minor bugfix: Performance improvements. - The search performance now scales linearly with the number of CPU cores, as we dropped static partitioning to allow better load balancing across threads. ``. === query: 'linux' ===. all baseline: 17.12ms current: 14.28ms (1.20x) matches: 179966 (12.79 ). 1T baseline: 136.49ms current: 137.25ms (0.99x) matches: 179966 (12.79 ). 2T baseline: 75.74ms current: 68.75ms (1.10x) matches: 179966 (12.79 ). 4T baseline: 41.16ms current: 34.97ms (1.18x) matches: 179966 (12.79 ). 8T baseline: 32.82ms current: 17.79ms (1.84x) matches: 179966 (12.79 ). ``. - Improved the cache structure, reducing memory footprint per entry by 86x. - With the reduced per-entry cost, the cache now has broader coverage. fish: Improved command history (CTRL-R). - AWK tokenizer not treating a new line character as whitespace. - `-- accept,with -nth` removing trailing whitespaces with a non-default `--delimiter`. - OSC8 hyperlinks being mangled when the URL contains unicode characters.
0.70.006 Mar 2026 03:15 major feature: Added `change-with-nth` action for dynamically changing the `--with-nth` option. - Requires `--with-nth` to be set initially. - Multiple options separated by ` ` can be given to cycle through. ``sh echo -e "a b c nd e f ng h i" fzf --with-nth.. . --bind 'space:change-with-nth(1 2 3 1,3 2,3 )'. ``. Added `change-header-lines` action for dynamically changing the `--header-lines` option. Performance improvements (1.3x to 1.9x faster filtering depending on query). ``. === query: 'l' ===. all baseline: 168.87ms current: 95.21ms (1.77x) matches: 5069891 (94.78 ). 1T baseline: 1652.22ms current: 841.40ms (1.96x) matches: 5069891 (94.78 ). === query: 'lin' ===. all baseline: 343.27ms current: 252.59ms (1.36x) matches: 3516507 (65.74 ). 1T baseline: 3199.89ms current: 2230.64ms (1.43x) matches: 3516507 (65.74 ). === query: 'linux' ===. all baseline: 85.47ms current: 63.72ms (1.34x) matches: 307229 (5.74 ). 1T baseline: 774.64ms current: 589.32ms (1.31x) matches: 307229 (5.74 ). === query: 'linuxlinux' ===. all baseline: 55.13ms current: 35.67ms (1.55x) matches: 12230 (0.23 ). 1T baseline: 461.99ms current: 332.38ms (1.39x) matches: 12230 (0.23 ). === query: 'linuxlinuxlinux' ===. all baseline: 51.77ms current: 32.53ms (1.59x) matches: 865 (0.02 ). 1T baseline: 409.99ms current: 296.33ms (1.38x) matches: 865 (0.02 ). ``. `nth` attribute merge order to respect precedence hierarchy. bash: Replaced `printf` with builtin `printf` to bypass local indirections.
0.69.002 Mar 2026 03:15 major feature: Added `change-with-nth` action for dynamically changing the `--with-nth` option. ``sh. Echo -e "a b c nd e f ng h i" fzf --with-nth.. --bind 'space:change-with-nth(1 2 3 1,3 2,3 )'. ``.
0.68.015 Feb 2026 03:15 major bugfix: Added support for underline style variants in `--color`: `underline-double`, `underline-curly`, `underline-dotted`, `underline-dashed`. ``sh. Fzf --color 'fg:underline-curly,current-fg:underline-dashed' ``. Added support for underline styles (`4:N`) and underline colors (SGR 58/59). ``sh. # In the list section. Printf ' e 4:3;58;2;255;0;0mRed curly underline e 0m n' fzf --ansi # In the preview window. Fzf --preview "printf ' e 4:3;58;2;255;0;0mRed curly underline e 0m n'" ``. Added `alt-gutter` color option. Added fish completion support. Zsh: Handle multi-line history selection. - symlinks to directories being returned as files. - SIGHUP signal handling. Preview process not killed on exit. Coloring of items with zero-width characters. - `track-current` unset after a combined movement action. - `--accept-nth` being ignored in filter mode. Display width calculation with `maxWidth`. Clearing of the rest of the current line on start. - `x-api-key` header not required for GET requests. Key reading not cancelled when `execute` triggered via a server request. Rebind of readline command `redraw-current-line`. - `fzf-tmux` `TERM` quoting and added `mktemp` usage. - Do not allow very long queries in `FuzzyMatchV2`.
0.67.021 Jan 2026 03:15 major bugfix: Added `--freeze-left=N` option to keep the leftmost N columns always visible. ``sh. # Keep the file name column and always visible. Git grep --line-number --color=always -- '' Fzf --ansi --delimiter : --freeze-left 1 # Can be used with --keep-right. Git grep --line-number --color=always -- '' Fzf --ansi --delimiter : --freeze-left 1 --keep-right ``. Also added `--freeze-right=N` option to keep the rightmost N columns always visible. ``sh. # Stronger version of --keep-right that always keeps the right-end visible fd fzf --freeze-right 1. # Keep the base name always visible fd fzf --freeze-right 1 --delimiter /. # Keep both leftmost and rightmost components visible fd fzf --freeze-left 1 --freeze-right 1 --delimiter /. ``. Updated `--info=inline` to print the spinner (load indicator). .
0.66.101 Nov 2025 03:15 minor bugfix: - a preventing 'ctrl-h' from being bound to an action. - `--no-color` / `NO_COLOR` theme.
0.66.017 Sep 2025 03:15 major feature: Style changes. - Narrowed the gutter column by using the left-half block character (` `). - Removed background colors from markers. Added `--gutter CHAR` option for customizing the gutter column. Some examples using box-drawing characters: ``sh. # Right-aligned gutter. Fzf --gutter ' ' # Even thinner gutter. Fzf --gutter ' ' # Checker. Fzf --gutter ' ' # Dotted. Fzf --gutter ' ' # Full-width. Fzf --gutter ' ' # No gutter. Fzf --gutter ' ' ``.
0.65.201 Sep 2025 03:15 minor bugfix: And improvements. Incorrect truncation of `--info-command` with `--info=inline-right`. - install Support old uname in macOS. - bash 3 `CTRL-T` and `ALT-C` to preserve the last yank. - Do not unset `FZF_DEFAULT_*` variables when using winpty. Rendering of items with tabs when using a non-default ellipsis. This is the final release to support Windows 7. - Future versions will be built with the latest Go toolchain, which has dropped support for Windows 7.
0.65.104 Aug 2025 03:15 minor bugfix: Incorrect ` FZF_CLICK_HEADER_WORD` and ` FZF_CLICK_FOOTER_WORD` when the header or footer contains ANSI escape sequences and tab characters. a where you cannot unset the default `--nth` using `change-nth` action. a highlighting when using `--color fg:dim,nth:regular` pattern over ANSI-colored items.
0.65.023 Jul 2025 03:15 major bugfix: Added `click-footer` event that is triggered when the footer section is clicked. When the event is triggered, the following environment variables are set: - ` FZF_CLICK_FOOTER_COLUMN` - clicked column (1-based). - ` FZF_CLICK_FOOTER_LINE` - clicked line (1-based). - ` FZF_CLICK_FOOTER_WORD` - the word under the cursor. ``sh. Fzf --footer ' Edit View n Copy to clipboard ' --with-shell 'bash -c' . --bind 'click-footer:transform: FZF_CLICK_FOOTER_WORD = Edit echo "execute:vim ". FZF_CLICK_FOOTER_WORD = View echo "execute:view ". (( FZF_CLICK_FOOTER_LINE == 2 )) (( FZF_CLICK_FOOTER_COLUMN 20 )) . Echo "execute-silent(echo -n pbcopy)+bell" '. ``. Added support for ` *n ` and ` *nf ` placeholder. - ` *n ` evaluates to the zero-based ordinal index of all matched items. - ` *nf ` evaluates to the temporary file containing that. .
0.64.008 Jul 2025 03:15 major bugfix: Added `multi` event that is triggered when the multi-selection has changed. ``sh fzf --multi . --bind 'ctrl-a:select-all,ctrl-d:deselect-all' . --bind 'multi:transform-footer:(( FZF_SELECT_COUNT )) echo "Selected FZF_SELECT_COUNT item(s)"'. ``. Halfwidth and fullwidth alphanumeric and punctuation characters) are now internally normalized to their ASCII equivalents to allow matching with ASCII queries. ``sh echo οΌ‘οΌ’οΌ£ fzf -q abc. ``. Renamed `clear-selection` action to `clear-multi` for consistency. - `clear-selection` remains supported as an alias for backward compatibility. - a that could cause fzf to abort due to incorrect update ordering. - a where some multi-selections were lost when using `exclude` or `change-nth`.
0.63.104 Jul 2025 03:15 minor bugfix: Halfwidth and fullwidth alphanumeric and punctuation characters) are now internally normalized to their ASCII equivalents to allow matching with ASCII queries. ``sh. Echo οΌ‘οΌ’οΌ£ fzf -q abc ``. a which caused fzf to abort due to incorrect update ordering.
0.63.016 Jun 2025 03:15 major feature: Added background variants of transform actions with `bg-` prethat run asynchronously in the background. ``sh GETTER='curl -s http://metaphorpsum.com/sentences/1' fzf --style full --border --preview : . --bind "focus:bg-transform-header: GETTER" . --bind "focus:+bg-transform-footer: GETTER" . --bind "focus:+bg-transform-border-label: GETTER" . --bind "focus:+bg-transform-preview-label: GETTER" . --bind "focus:+bg-transform-input-label: GETTER" . --bind "focus:+bg-transform-list-label: GETTER" . --bind "focus:+bg-transform-header-label: GETTER" . --bind "focus:+bg-transform-footer-label: GETTER" . --bind "focus:+bg-transform-ghost: GETTER" . --bind "focus:+bg-transform-prompt: GETTER". ``.
0.62.010 May 2025 03:15 major bugfix: Relaxed the `--color` option syntax to allow whitespace-separated entries (in addition to commas), making multi-line definitions easier to write and read. ``sh. # seoul256-light. Fzf --style full --color=' fg:#616161 fg+:#616161 bg:#ffffff bg+:#e9e9e9 alt-bg:#f1f1f1 hl:#719872 hl+:#719899. Pointer:#e12672 marker:#e17899 Header:#719872 Spinner:#719899 info:#727100 Prompt:#0099bd query:#616161 Border:#e1e1e1 '. ``. Added `alt-bg` color to create striped lines to visually separate rows. ``sh. Fzf --color bg:237,alt-bg:238,current-bg:236 --highlight-line Declare -f perl -0777 -pe 's/ n/ 0/gm' . Bat --plain --language bash --color always Fzf --read0 --ansi --reverse --multi --color bg:237,alt-bg:238,current-bg:236 --highlight-line. ``. fish Improvements in CTRL-R binding. - You can trigger CTRL-R in the middle of a command to insert the selected item. - You can delete history items with SHIFT-DEL. And improvements. Unnecessary 100ms delay after `reload`. - `selected-bg` not applied to colored items.
0.61.324 Apr 2025 03:15 minor bugfix: Reverted #4351 as it caused `tmux run-shell 'fzf --tmux'` to fail. More environment variables for child processes.
0.61.220 Apr 2025 13:16 minor bugfix: Panic when using header border without pointer/marker. `--tmux` option when already inside a tmux popup. And improvements in CTRL-T binding of fish. Added `--no-tty-default` option to make fzf search for the current TTY device instead of defaulting to `/dev/tty`.