NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #9 by repository stars
Last release 18 days ago
14 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 40 of 40 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
1187 releases · first in 2013
Reverted #4351 as it caused tmux run-shell 'fzf --tmux' to fail (#4559 #4560)
tmux run-shell 'fzf --tmux' to fail (#4559 #4560)Fixed panic when using header border without pointer/marker (@phanen)
--tmux option when already inside a tmux popup (@peikk0)--no-tty-default option to make fzf search for the current TTY device instead of defaulting to /dev/tty (#4242)One column per quarter.
Nothing published for this version
Disable bracketed-paste mode on exit. This fixes issue where pasting breaks after running fzf on old bash versions that don't support the mode.
Added --ghost=TEXT to display a ghost text when the input is empty ```sh
--ghost=TEXT to display a ghost text when the input is empty# Display "Type to search" when the input is empty
fzf --ghost "Type to search"
change-ghost and transform-ghost actions for dynamically changing the ghost textchange-pointer and transform-pointer actions for dynamically changing the pointer signr flag for placeholder expression (raw mode) for unquoted output[fish] Enable multiple history commands insertion (#4280) (@bitraid)
become when using --tmux option (#4283)--accept-nth compatible with --select-1 (#4287)Nothing published for this version
Nothing published for this version
Template for --with-nth and --accept-nth now supports {n} which evaluates to the zero-based ordinal index of the item
--with-nth and --accept-nth now supports {n} which evaluates to the zero-based ordinal index of the itemBug fixes and minor improvements
_Release highlights: https://junegunn.github.io/fzf/releases/0.60.0/_
Release highlights: https://junegunn.github.io/fzf/releases/0.60.0/
--accept-nth for choosing output fieldsps -ef | fzf --multi --header-lines 1 | awk '{print $2}'
# Becomes
ps -ef | fzf --multi --header-lines 1 --accept-nth 2
git branch | fzf | cut -c3-
# Can be rewritten as
git branch | fzf --accept-nth -1
--accept-nth and --with-nth now support a template that includes multiple field index expressions in curly bracesecho foo,bar,baz | fzf --delimiter , --accept-nth '{1}, {3}, {2}'
# foo, baz, bar
echo foo,bar,baz | fzf --delimiter , --with-nth '{1},{3},{2},{1..2}'
# foo,baz,bar,foo,bar
exclude and exclude-multi actions for dynamically excluding itemsseq 100 | fzf --bind 'ctrl-x:exclude'
# 'exclude-multi' will exclude the selected items or the current item
seq 100 | fzf --multi --bind 'ctrl-x:exclude-multi'
seq 100 | xargs | fzf --wrap --preview 'echo {}' --preview-window wrap
Nothing published for this version
_Release highlights: https://junegunn.github.io/fzf/releases/0.59.0/_
Release highlights: https://junegunn.github.io/fzf/releases/0.59.0/
pathname for prioritizing file name matches--scheme=path now sets --tiebreak=pathname,lengthpath scheme
$FZF_DEFAULT_COMMAND which is usually a command for listing files,reload or transform action is bound to start event, because in that case, fzf can't be sure of the input type.--header-lines-border to display header from --header-lines with a separate border# Use --header-lines-border to separate two headers
ps -ef | fzf --style full --layout reverse --header-lines 1 \
--bind 'ctrl-r:reload(ps -ef)' --header 'Press CTRL-R to reload' \
--header-lines-border bottom --no-list-border
click-header event now sets $FZF_CLICK_HEADER_WORD and $FZF_CLICK_HEADER_NTH. You can use them to implement a clickable header for changing the search scope using the new transform-nth action.# Click on the header line to limit search scope
ps -ef | fzf --style full --layout reverse --header-lines 1 \
--header-lines-border bottom --no-list-border \
--color fg:dim,nth:regular \
--bind 'click-header:transform-nth(
echo $FZF_CLICK_HEADER_NTH
)+transform-prompt(
echo "$FZF_CLICK_HEADER_WORD> "
)'
$FZF_KEY was updated to expose the type of the click. e.g. click, ctrl-click, etc. You can use it to implement a more sophisticated behavior.kill completion for bash and zsh were updated to use this feature--no-input option to completely disable and hide the input section# Click header to trigger search
fzf --header '[src] [test]' --no-input --layout reverse \
--header-border bottom --input-border \
--bind 'click-header:transform-search:echo ${FZF_CLICK_HEADER_WORD:1:-1}'
# Vim-like mode switch
fzf --layout reverse-list --no-input \
--bind 'j:down,k:up,/:show-input+unbind(j,k,/)' \
--bind 'enter,esc,ctrl-c:transform:
if [[ $FZF_INPUT_STATE = enabled ]]; then
echo "rebind(j,k,/)+hide-input"
elif [[ $FZF_KEY = enter ]]; then
echo accept
else
echo abort
fi
'
show-input or toggle-input action, and hide it again using hide-input, or toggle-input.{q} placeholder to support ranges. e.g. {q:1}, {q:2..}, etc.search(...) and transform-search(...) action to trigger an fzf search with an arbitrary query string. This can be used to extend the search syntax of fzf. In the following example, fzf will use the first word of the query to trigger ripgrep search, and use the rest of the query to perform fzf search within the result.export TEMP=$(mktemp -u)
trap 'rm -f "$TEMP"' EXIT
TRANSFORMER='
rg_pat={q:1} # The first word is passed to ripgrep
fzf_pat={q:2..} # The rest are passed to fzf
if ! [[ -r "$TEMP" ]] || [[ $rg_pat != $(cat "$TEMP") ]]; then
echo "$rg_pat" > "$TEMP"
printf "reload:sleep 0.1; rg --column --line-number --no-heading --color=always --smart-case %q || true" "$rg_pat"
fi
echo "+search:$fzf_pat"
'
fzf --ansi --disabled \
--with-shell 'bash -c' \
--bind "start,change:transform:$TRANSFORMER"
# Load 'ps -ef' output on start and reload it on CTRL-R
fzf --bind 'start,ctrl-r:reload:ps -ef'
--min-height option now takes a number followed by +, which tells fzf to show at least that many items in the list section. The default value is now changed to 10+.# You will only see the input section which takes 3 lines
fzf --style=full --height 1% --min-height 3
# You will see 3 items in the list section
fzf --style full --height 1% --min-height 3+
--min-height 20+ by default--header-lines will be displayed at the top in reverse-list layoutbell action to ring the terminal bell# Press CTRL-Y to copy the current line to the clipboard and ring the bell
fzf --bind 'ctrl-y:execute-silent(echo -n {} | pbcopy)+bell'
toggle-bind actionNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
_Release highlights: https://junegunn.github.io/fzf/releases/0.58.0/_
Release highlights: https://junegunn.github.io/fzf/releases/0.58.0/
This version introduces three new border types, --list-border, --input-border, and --header-border, offering much greater flexibility for customizing the user interface.
<img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-4-borders.png" />
Also, fzf now offers "style presets" for quick customization, which can be activated using the --style option.
| Preset | Screenshot |
|---|---|
default |
<img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-style-default.png"/> |
full |
<img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-style-full.png"/> |
minimal |
<img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-style-minimal.png"/> |
--style=full[:BORDER_STYLE]--style=default--style=minimal--list-border[=STYLE]--list-label=LABEL--list-label-pos=COL[:bottom]list-fglist-bglist-borderlist-labelchange-list-labeltransform-list-label--input-border[=STYLE]--input-label=LABEL--input-label-pos=COL[:bottom]input-fg (query)input-bginput-borderinput-labelchange-input-labeltransform-input-label--header-border[=STYLE]--header-label=LABEL--header-label-pos=COL[:bottom]header-fg (header)header-bgheader-borderheader-labelchange-header-labeltransform-header-label--preview-border[=STYLE] as short for --preview-window=border[-STYLE]line which draws a single separator line between the preview window and the rest of the interface┈┈) in each --gap for better visual separation.# All bash/zsh functions, highlighted
declare -f |
perl -0 -pe 's/^}\n/}\0/gm' |
bat --plain --language bash --color always |
fzf --read0 --ansi --layout reverse --multi --highlight-line --gap
--gap-line[=STR].border-native to --tmux so that native tmux border is used instead of --border. This can be useful if you start a different program from inside the popup.fzf --tmux border-native --bind 'enter:execute:less {}'
toggle-multi-line actiontoggle-hscroll actionchange-nth action for dynamically changing the value of the --nth option# Start with --nth 1, then 2, then 3, then back to the default, 1
echo 'foo foobar foobarbaz' | fzf --bind 'space:change-nth(2|3|)' --nth 1 -q foo
--nth parts of each line can now be rendered in a different text style# nth in a different style
ls -al | fzf --nth -1 --color nth:italic
ls -al | fzf --nth -1 --color nth:reverse
ls -al | fzf --nth -1 --color nth:reverse:bold
# Dim the other parts
ls -al | fzf --nth -1 --color nth:regular,fg:dim
# With 'change-nth'. The current nth option is exported as $FZF_NTH.
ps -ef | fzf --reverse --header-lines 1 --header-border bottom --input-border \
--color nth:regular,fg:dim \
--bind 'ctrl-n:change-nth(8..|1|2|3|4|5|6|7|)' \
--bind 'result:transform-prompt:echo "${FZF_NTH}> "'
--delimiter '|' instead of escaping it as --delimiter '\|'Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
You can now resize the preview window by dragging the border
--walker-root can take multiple directory arguments. e.g. --walker-root include src lib--walker-skip can handle multi-component patterns. e.g. --walker-skip target/buildFZF_PREVIEW_* environment variables are exported to all child processes (#4098)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
fix(zsh): handle backtick trigger edge case
Nothing published for this version
Fixed abnormal scrolling behavior when --wrap is set
--wrap is set (#4083)ksh_arrays is set (#4084)Nothing published for this version
Nothing published for this version
Fixed a race condition which would cause fzf to present stale results after reload
reload (#4070)page-up and page-down actions now work correctly with multi-line items (#4069){n} is allowed in SCROLL expression in --preview-window (#4079)Nothing published for this version
Added --gap[=N] option to display empty lines between items.
--gap[=N] option to display empty lines between items.
# All bash functions, highlighted
declare -f | perl -0777 -pe 's/^}\n/}\0/gm' |
bat --plain --language bash --color always |
fzf --read0 --ansi --reverse --multi --highlight-line --gap
--color gutter:-1 as well to hide the gutter.fzf --info inline-right --gap --color gutter:-1
noinfo option to --preview-window to hide the scroll indicator in the preview windowNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
_Release highlights: https://junegunn.github.io/fzf/releases/0.55.0/_
Release highlights: https://junegunn.github.io/fzf/releases/0.55.0/
exact-boundary-match type to the search syntax. When a search term is single-quoted, fzf will search for the exact occurrences of the string with both ends at word boundaries.fzf --query "'here'" << EOF
come here
not there
EOF
complete -D option__fzf_default_completion function for more information$FZF_DEFAULT_OPTS and $FZF_DEFAULT_OPTS_FILEexport FZF_DEFAULT_OPTS='
# Layout options
--layout=reverse
--info=inline-right # Show info on the right side of the prompt line
# ...
'
printf '<< \e]8;;http://github.com/junegunn/fzf\e\\Link to \e[32mfz\e[0mf\e]8;;\e\\ >>' | fzf --ansi
fzf --preview "printf '<< \e]8;;http://github.com/junegunn/fzf\e\\Link to \e[32mfz\e[0mf\e]8;;\e\\ >>'"
--ellipsis is now ·· instead of ...exit callback that is called with the exit status of fzf
--tmux bottom when the status line is not at the bottom--read0 or --wrap)ps command for kill completion on CygwinNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →