NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #9 by repository stars
Last release 20 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
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
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
Fixed a bug preventing 'ctrl-h' from being bound to an action
--no-color / NO_COLOR theme (#4561)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This version introduces many new features centered around the new "raw" mode.
This version introduces many new features centered around the new "raw" mode.
| Type | Class | Name | Description |
|---|---|---|---|
| New | Option | --raw |
Enable raw mode by default |
| New | Option | --gutter CHAR |
Set the gutter column character |
| New | Option | --gutter-raw CHAR |
Set the gutter column character in raw mode |
| Enhancement | Option | --listen SOCKET |
Added support for Unix domain sockets |
| New | Action | toggle-raw |
Toggle raw mode |
| New | Action | enable-raw |
Enable raw mode |
| New | Action | disable-raw |
Disable raw mode |
| New | Action | up-match |
Move up to the matching item |
| New | Action | down-match |
Move down to the matching item |
| New | Action | best |
Move to the matching item with the best score |
| New | Color | nomatch |
Color for non-matching items in raw mode |
| New | Env Var | FZF_RAW |
Matching status in raw mode (0, 1, or undefined) |
| New | Env Var | FZF_DIRECTION |
up or down depending on the layout |
| New | Env Var | FZF_SOCK |
Path to the Unix domain socket fzf is listening on |
| Enhancement | Key | CTRL-N |
down -> down-match |
| Enhancement | Key | CTRL-P |
up -> up-match |
| Enhancement | Shell | CTRL-R binding |
Toggle raw mode with ALT-R |
| Enhancement | Shell | CTRL-R binding |
Opt-out with an empty FZF_CTRL_R_COMMAND |
This version introduces a new "raw" mode (named so because it shows the list
"unfiltered"). In raw mode, non-matching items stay in their original positions,
but appear dimmed. This allows you to see the surrounding items of a match and
better understand the context of it. You can enable raw mode by default with
--raw, but it's often more useful when toggled dynamically with the
toggle-raw action.
tree | fzf --reverse --bind alt-r:toggle-raw
While non-matching items are displayed in a dimmed color, they are treated just
like matching items, so you place the cursor on them and perform any action. If
you prefer to navigate only through matching items, use the down-match and
up-match actions, which are from now on bound to CTRL-N and CTRL-P
respectively, and also to ALT-DOWN and ALT-UP.
| Key | Action | With --history |
|---|---|---|
down |
down |
|
up |
up |
|
ctrl-j |
down |
|
ctrl-k |
up |
|
ctrl-n |
down-match |
next-history |
ctrl-p |
up-match |
prev-history |
alt-down |
down-match |
|
alt-up |
up-match |
[!NOTE]
CTRL-NandCTRL-Pare bound tonext-historyandprev-historywhen--historyoption is enabled, so in that case, you'll need to manually bind them, or useALT-DOWNandALT-UPinstead.
[!TIP]
up-matchanddown-matchare equivalent toupanddownwhen not in raw mode, so you can safely bind them toupandarrowkeys if you prefer.fzf --bind up:up-match,down:down-match
In raw mode, the input list is presented in its original order, unfiltered, and your cursor will not move to the matching item automatically. Here are ways to customize the behavior.
# When the result list is updated, move the cursor to the item with the best score
# (assuming sorting is not disabled)
fzf --raw --bind result:best
# Move to the first matching item in the original list
# - $FZF_RAW is set to 0 when raw mode is enabled and the current item is a non-match
# - $FZF_DIRECTION is set to either 'up' or 'down' depending on the layout direction
fzf --raw --bind 'result:first+transform:[[ $FZF_RAW = 0 ]] && echo $FZF_DIRECTION-match'
To make the mode visually distinct, the gutter column is rendered in a dashed
line using ▖ character. But you can customize it with the --gutter-raw CHAR
option.
# Use a thinner gutter instead of the default dashed line
fzf --bind alt-r:toggle-raw --gutter-raw ▎
Non-matching items are displayed in a dimmed color by default, but you can
change it with the --color nomatch:... option.
fzf --raw --color nomatch:red
fzf --raw --color nomatch:red:dim
fzf --raw --color nomatch:red:dim:strikethrough
fzf --raw --color nomatch:red:dim:strikethrough:italic
For colored input, dimming alone may not be enough, and you may prefer to remove
colors entirely. For that case, a new special style attribute strip has been
added.
fd --color always | fzf --ansi --raw --color nomatch:dim:strip:strikethrough
You may want to perform different actions depending on whether the current item
is a match or not. For that, fzf now exports $FZF_RAW environment variable.
It's:
1 if the current item is a match0 otherwise# Do not allow selecting non-matching items
fzf --raw --bind 'enter:transform:[[ ${FZF_RAW-1} = 1 ]] && echo accept || echo bell'
The CTRL-R binding (command history) now lets you toggle raw mode with ALT-R.
The screenshot on the right shows the updated gutter style:
This version includes a few minor updates to fzf's classic visual style:
▌).--color base16 theme (alias: 16) has been updated for better compatibility with both dark and light themes.--listen now supports Unix domain socketsIf an argument to --listen ends with .sock, fzf will listen on a Unix
domain socket at the specified path.
fzf --listen /tmp/fzf.sock --no-tmux
# GET
curl --unix-socket /tmp/fzf.sock http
# POST
curl --unix-socket /tmp/fzf.sock http -d up
Note that any existing file at the given path will be removed before creating the socket, so avoid using an important file path.
--gutter CHARThe gutter column can now be customized using --gutter CHAR and styled with
--color gutter:.... Examples:
# Right-aligned gutter
fzf --gutter '▐'
# Even thinner gutter
fzf --gutter '▎'
# Yellow checker pattern
fzf --gutter '▚' --color gutter:yellow
# Classic style
fzf --gutter ' ' --color gutter:reverse
--gutter-raw CHARAs noted above, the --gutter-raw CHAR option was also added for customizing the gutter column in raw mode.
The following actions were introduced to support working with raw mode:
| Action | Description |
|---|---|
toggle-raw |
Toggle raw mode |
enable-raw |
Enable raw mode |
disable-raw |
Disable raw mode |
up-match |
Move up to the matching item; identical to up if raw mode is disabled |
down-match |
Move down to the matching item; identical to down if raw mode is disabled |
best |
Move to the matching item with the best score; identical to first if raw mode is disabled |
$FZF_DIRECTION$FZF_DIRECTION is now exported to child processes, indicating the list direction of the current layout:
up for the default layoutdown for reverse or reverse-listThis simplifies writing transform actions involving layout-dependent actions
like {up,down}-match, {up,down}-selected, and toggle+{up,down}.
fzf --raw --bind 'result:first+transform:[[ $FZF_RAW = 0 ]] && echo $FZF_DIRECTION-match'
$FZF_SOCKWhen fzf is listening on a Unix domain socket using --listen, the path to the
socket is exported as $FZF_SOCK, analogous to $FZF_PORT for TCP sockets.
$FZF_RAWAs described above, $FZF_RAW is now exported to child processes in raw mode,
indicating whether the current item is a match (1) or not (0). It is not
defined when not in raw mode.
$FZF_CTRL_R_COMMANDYou can opt-out CTRL-R binding from the shell integration by setting
FZF_CTRL_R_COMMAND to an empty string. Setting it to any other value is not
supported and will result in a warning.
# Disable the CTRL-R binding from the shell integration
FZF_CTRL_R_COMMAND= eval "$(fzf --bash)"
--bindPull request #3996 added support
for many additional keys for --bind option, such as ctrl-backspace.
In the previous versions, the recommended way to hide the gutter column was to
set --color gutter:-1. That's because the gutter column was just a space
character, reversed. But now that it's using a visible character (▌), applying
the default color is no longer enough to hide it. Instead, you can set it to
a space character.
# Hide the gutter column
fzf --gutter ' '
# Classic style
fzf --gutter ' ' --color gutter:reverse
--color optionIn the previous versions, some elements had default style attributes applied and
you would have to explicitly unset them with regular attribute if you wanted
to reset them. This is no longer needed now, as the default style attributes
are applied only when you do not specify any color or style for that element.
# No 'dim', just red and italic.
fzf --ghost 'Type to search' --color ghost:red:italic
Starting with this release, fzf is built with Go 1.23. Support for some old OS versions has been dropped.
See https://go.dev/wiki/MinimumRequirements.
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
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
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix incorrect truncation of --info-command with --info=inline-right
--info-command with --info=inline-right (#4479)CTRL-T and ALT-C to preserve the last yank (#4496)FZF_DEFAULT_* variables when using winpty (#4497) (#4400)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed incorrect $FZF_CLICK_HEADER_WORD and $FZF_CLICK_FOOTER_WORD when the header or footer contains ANSI escape sequences and tab characters.
$FZF_CLICK_HEADER_WORD and $FZF_CLICK_FOOTER_WORD when the header or footer contains ANSI escape sequences and tab characters.--nth using change-nth action.--color fg:dim,nth:regular pattern over ANSI-colored items.Added click-footer event that is triggered when the footer section is clicked. When the event is triggered, the following environment variables are se
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 cursorfzf --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"
'
trigger(...) action that triggers events bound to another key or event.# You can click on each key name to trigger the actions bound to that key
fzf --footer 'Ctrl-E: Edit / Ctrl-V: View / Ctrl-Y: Copy to clipboard' \
--with-shell 'bash -c' \
--bind 'ctrl-e:execute:vim {}' \
--bind 'ctrl-v:execute:view {}' \
--bind 'ctrl-y:execute-silent(echo -n {} | pbcopy)+bell' \
--bind 'click-footer:transform:
[[ $FZF_CLICK_FOOTER_WORD =~ Ctrl ]] && echo "trigger(${FZF_CLICK_FOOTER_WORD%:})"
'
fzf --bind 'a:up,b:trigger(a,a,a)'
{*n} and {*nf} placeholder.
{*n} evaluates to the zero-based ordinal index of all matched items.{*nf} evaluates to the temporary file containing that.&winborder is used (#4453)--no-header-lines-border behavior (08027e7a)Nothing published for this version
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 'm
multi event that is triggered when the multi-selection has changed.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)"'
echo ABC| fzf -q abc
clear-selection action to clear-multi for consistency.
clear-selection remains supported as an alias for backward compatibility.exclude or change-nth._Release highlights: https://junegunn.github.io/fzf/releases/0.63.0/_
Release highlights: https://junegunn.github.io/fzf/releases/0.63.0/
line, which draws a single separator line.fzf --reverse --footer "fzf: friend zone forever"
--footer[=STRING]--footer-border[=STYLE]--footer-label=LABEL--footer-label-pos=COL[:bottom]footerfooter-bgfooter-borderfooter-labelchange-footertransform-footerbg-transform-footerchange-footer-labeltransform-footer-labelbg-transform-footer-labelline border style is now allowed for all types of border except for --list-border.fzf --height 50% --style full:line --preview 'cat {}' \
--bind 'focus:bg-transform-header(file {})+bg-transform-footer(wc {})'
{*} placeholder flag that evaluates to all matched items.seq 10000 | fzf --preview "awk '{sum += \$1} END {print sum}' {*f}"
bg- prefix that run asynchronously in the background, along with bg-cancel action to cancel currently running bg-transform actions.# Implement popup that disappears after 1 second
# * Use footer as the popup
# * Use `bell` to ring the terminal bell
# * Use `bg-transform-footer` to clear the footer after 1 second
# * Use `bg-cancel` to cancel currently running background transform actions
fzf --multi --list-border \
--bind 'enter:execute-silent(echo -n {+} | pbcopy)+bell' \
--bind 'enter:+transform-footer(echo Copied {} to clipboard)' \
--bind 'enter:+bg-cancel+bg-transform-footer(sleep 1)'
# It's okay for the commands to take a little while because they run in the background
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"
for i in $(seq 16 255); do
echo -e "\x1b[48;5;${i}m\x1b[0Khello"
done | fzf --ansi
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
Relaxed the --color option syntax to allow whitespace-separated entries (in addition to commas), making multi-line definitions easier to write and rea
--color option syntax to allow whitespace-separated entries (in addition to commas), making multi-line definitions easier to write and read# 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
'
alt-bg color to create striped lines to visually separate rowsfzf --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
reload (#4364)selected-bg not applied to colored items (#4372)Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →