Releases · fish-shell/fish-shell

fish 4.5.0

This is mostly a patch release for Vi mode regressions in 4.4.0 but other minor behavior changes are included as well.

This release comprises 68 commits since 4.4.0, contributed by 16 authors, 8 of which are new committers.

Interactive improvements

  • ctrl-l no longer cancels history search (#12436).
  • History search cursor positioning now works correctly with characters of arbitrary width.

Deprecations and removed features

  • fish no longer reads the terminfo database to alter behaviour based on the TERM environment variable, and does not depend on ncurses or terminfo. The ignore-terminfo feature flag, introduced and enabled by default in fish 4.1, is now permanently enabled. fish may no longer work correctly on Data General Dasher D220 and Wyse WY-350 terminals, but should continue to work on all known terminal emulators released in the 21st century.

Regression fixes:

  • (from 4.4.0) Vi mode d,f key binding did not work (#12417).
  • (from 4.4.0) Vi mode c,w key binding wrongly deleted trailing spaces (#12443).
  • (from 4.4.0) Vi mode crash on c,i,w after accepting autosuggestion (#12430).
  • (from 4.4.0) fish_vi_key_bindings called with a mode argument produced an error (#12413).
  • (from 4.0.0) Build on Illumos (#12410).

Thanks to everyone who contributed through issue discussions, code reviews, or code changes.

Welcome our new committers: Aman Verma, Jack Pickle, Liam Snow, Pothi Kalimuthu, Salman Muin Kayser Chishti, Simon Olofsson, Tristan Partin, Weixie Cui

Welcome back our returning committers: Daniel Rainer, David Adam, Francisco Giordano, Johannes Altmanninger, Nahor, Peter Ammon, madblobfish, xtqqczze


Download links: To download the source code for fish, we suggest the file named fish-4.5.0.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.5.0.tar.xz.asc.

The files called fish-4.5.0-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.4.0

This release comprises 215 commits since 4.3.3, contributed by 20 authors, 9 of which are new committers.

Deprecations and removed features

  • The default fossil prompt has been disabled (#12342).

Interactive improvements

  • The bind builtin lists mappings from all modes if --mode is not provided (#12214).
  • Line-wise autosuggestions that don’t start a command are no longer shown (739b82c, 58e7a50).
  • Builtin history now assumes that PAGER supports ANSI color sequences.
  • fish now clears the terminal’s FLUSHO flag when acquiring control of the terminal, to fix an issue caused by pressing ctrl-o on macOS (#12304).

New or improved bindings

  • Vi mode word movements (w, W, e, and E) are now largely in line with Vim. The only exception is that underscores are treated as word separators (#12269).
  • New special input functions to support these movements: forward-word-vi, kill-word-vi, forward-bigword-vi, kill-bigword-vi, forward-word-end, backward-word-end, forward-bigword-end, backward-bigword-end, kill-a-word, kill-inner-word, kill-a-bigword, and kill-inner-bigword.
  • Vi mode key bindings now support counts for movement and deletion commands (e.g. d3w or 3l), via a new operator mode (#2192).
  • New catpuccin-* color themes.

Improved terminal support

  • set_color learned the strikethrough (--strikethrough or -s) modifier.

For distributors and developers

  • The CMake option WITH_GETTEXT has been renamed to WITH_MESSAGE_LOCALIZATION, to reflect that it toggles localization independently of the backend used in the implementation.
  • New cargo xtask commands can replace some CMake workflows.

Regression fixes:

  • (from 4.1.0) Crash when autosuggesting Unicode characters with nontrivial lowercase mapping (#12326, 78f4541).
  • (from 4.3.0) Glitch on read --prompt-str "" (#12296).

Thanks to everyone who contributed through issue discussions, code reviews, or code changes.

Welcome our new committers: Heitor Augusto, JANMESH ARUN SHEWALE, SharzyL, Tiago de Paula, Timen Zandbergen, Wang Bing-hua, andreacfromtheapp, iksuddle, neglu

Welcome back our returning committers: Daniel Rainer, David Adam, Fabian Boehm, Ilya Grigoriev, Johannes Altmanninger, Luc J. Bourhis, Next Alone, Peter Ammon, Razzi Abuissa, phanium, xtqqczze


Download links: To download the source code for fish, we suggest the file named fish-4.4.0.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.4.0.tar.xz.asc.

The files called fish-4.4.0-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.3.3

This release fixes the following problems identified in fish 4.3.0:

  • Selecting a completion could insert only part of the token (#12249).
  • Glitch with soft-wrapped autosuggestions and fish_right_prompt (#12255).
  • Spurious echo in tmux when typing a command really fast (#12261).
  • tomorrow theme always using the light variant (#12266).
  • fish_config theme choose sometimes not shadowing themes set by e.g. webconfig (#12278).
  • The sample prompts and themes are correctly installed (#12241).
  • Last line of command output could be hidden when missing newline (#12246).

Other improvements include:

  • The abbr, bind, complete, functions, history and type commands now support a --color option to control syntax highlighting in their output. Valid values are auto (default), always, or never.
  • Existing file paths in redirection targets such as > file.txt are now highlighted using fish_color_valid_path, indicating that file.txt will be clobbered (#12260).

Download links: To download the source code for fish, we suggest the file named fish-4.3.3.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.3.tar.xz.asc.

The files called fish-4.3.3-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.3.2

This release fixes the following problems identified in 4.3.0:

  • Pre-built macOS packages failed to start due to a Malformed Mach-O file error (#12224).
  • extra_functionsdir (usually vendor_functions.d) and friends were not used (#12226).
  • Sample config file ~/.config/fish/config.fish/ and config directories ~/.config/fish/conf.d/, ~/.config/fish/completions/ and ~/.config/fish/functions/ were recreated on every startup instead of only the first time fish runs on a system (#12230).
  • Spurious echo of ^[[I in some scenarios (#12232).
  • Infinite prompt redraw loop on some prompts (#12233).
  • The removal of pre-built HTML docs from tarballs revealed that cross compilation is broken because we use ${CMAKE_BINARY_DIR}/fish_indent for building HTML docs. As a workaround, the new CMake build option FISH_INDENT_FOR_BUILDING_DOCS can be set to the path of a runnable fish_indent binary.

Download links: To download the source code for fish, we suggest the file named fish-4.3.2.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.2.tar.xz.asc.

The files called fish-4.3.2-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.3.1

This release fixes the following problem identified in 4.3.0:

  • Possible crash after expanding an abbreviation (#12223).

Download links: To download the source code for fish, we suggest the file named fish-4.3.1.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.1.tar.xz.asc.

The files called fish-4.3.1-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.3.0

This release comprises 285 commits since 4.2.1, contributed by 27 authors, 15 of which are new committers.

Deprecations and removed features

  • fish no longer sets universal variables by default, which simplifies configuration. Specifically, the fish_color_*, fish_pager_color_* and fish_key_bindings variables are now set in the global scope by default. After upgrading to 4.3.0, fish will (once and never again) migrate these universals to globals set at startup in the ~/.config/fish/conf.d/fish_frozen_theme.fish and ~/.config/fish/conf.d/fish_frozen_key_bindings.fish files. We suggest that you delete those files and set your theme in ~/.config/fish/config.fish.
    • You can still configure fish to propagate theme changes instantly; see here for an example.
    • You can still opt into storing color variables in the universal scope via fish_config theme save though unlike fish_config theme choose, that does not support dynamic theme switching based on the terminal’s color theme (see below).
  • In addition to setting the variables which are explicitly defined in the given theme, fish_config theme choose now clears only color variables that were set by earlier invocations of a fish_config theme choose command (which is how fish’s default theme is set).

Scripting improvements

  • New status language command allows showing and modifying language settings for fish messages without having to modify environment variables.
  • When using a noninteractive fish instance to compute completions, commandline --cursor works as expected instead of throwing an error (#11993).
  • fish_trace can now be set to all to also trace execution of key bindings, event handlers as well as prompt and title functions.

Interactive improvements

  • When typing immediately after starting fish, the first prompt is now rendered correctly.
  • Completion accuracy was improved for file paths containing = or : (#5363).
  • Prefix-matching completions are now shown even if they don’t match the case typed by the user (#7944).
  • On Cygwin/MSYS, command name completion will favor the non-exe name (foo) unless the user started typing the extension.
  • When using the exe name (foo.exe), fish will use to the description and completions for foo if there are none for foo.exe.
  • Autosuggestions now also show soft-wrapped portions (#12045).

New or improved bindings

  • ctrl-w (backward-kill-path-component) also deletes escaped spaces (#2016).
  • New special input functions backward-path-component, forward-path-component and kill-path-component (#12127).

Improved terminal support

  • Themes can now be made color-theme-aware by including both [light] and [dark] sections in the theme file. Some default themes have been made color-theme-aware, meaning they dynamically adjust as your terminal’s background color switches between light and dark colors (#11580).
  • The working directory is now reported on every fresh prompt (via OSC 7), fixing scenarios where a child process (like ssh) left behind a stale working directory (#12191).
  • OSC 133 prompt markers now also mark the prompt end, which improves shell integration with terminals like iTerm2 (#11837).
  • Operating-system-specific key bindings are now decided based on the terminal’s host OS.
  • Focus reporting is enabled unconditionally, not just inside tmux. To use it, define functions that handle the fish_focus_in or fish_focus_out events.
  • New feature flag omit-term-workarounds can be turned on to prevent fish from trying to work around some incompatible terminals.

For distributors and developers

  • Tarballs no longer contain prebuilt documentation, so building and installing documentation requires Sphinx. To avoid users accidentally losing docs, the BUILD_DOCS and INSTALL_DOCS configuration options have been replaced with a new WITH_DOCS option.
  • fish_key_reader and fish_indent are now installed as hardlinks to fish, to save some space.

Regression fixes:

  • (from 4.1.0) Crash on incorrectly-set color variables (#12078).
  • (from 4.1.0) Crash when autosuggesting Unicode characters with nontrivial lowercase mapping.
  • (from 4.2.0) Incorrect emoji width computation on macOS.
  • (from 4.2.0) Mouse clicks and ctrl-l edge cases in multiline command lines (#12121).
  • (from 4.2.0) Completions for Git remote names on some non-glibc systems.
  • (from 4.2.0) Expansion of ~$USER.

Thanks to everyone who contributed through issue discussions, code reviews, or code changes.

Welcome our new committers: Denys Zhak, ELginas, Gleb Smirnov, Juho Kuisma, Julio Napurí, Kristof Mattei, Nikita COEUR, PowerUser64, Tair Sabirgaliev, Toyosatomimi no Miko, Zhizhen He, huaji2369, oliwia, xtqqczze, チセ

Welcome back our returning committers: Asuka Minato, Branch Vincent, Daniel Rainer, David Adam, Fabian Boehm, Jesse Harwin, Johannes Altmanninger, Nahor, Peter Ammon, exploide, phanium, seg6


Download links: To download the source code for fish, we suggest the file named fish-4.3.0.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.3.0.tar.xz.asc.

The files called fish-4.3.0-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.2.1

This release fixes the following problems identified in 4.2.0:

  • When building from a tarball without Sphinx (that is, with -DBUILD_DOCS=OFF or when sphinx-build is not found), builtin man pages and help files were missing, which has been fixed (#12052).
  • fish_config’s theme selector (the “colors” tab) was broken, which has been fixed (#12053).

Download links: To download the source code for fish, we suggest the file named fish-4.2.1.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using this key is available as fish-4.2.1.tar.xz.asc.

The files called fish-4.2.1-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

fish 4.2.0

This release comprises 473 commits since 4.1.2, contributed by 35 authors, 15 of which are new committers.

Notable improvements and fixes

  • History-based autosuggestions now include multi-line commands.
  • A transient prompt containing more lines than the final prompt will now be cleared properly (#11875).
  • Taiwanese Chinese translations have been added.
  • French translations have been supplemented (#11842).

Deprecations and removed features

  • fish now assumes UTF-8 for character encoding even if the system does not have a UTF-8 locale. Input bytes which are not valid UTF-8 are still round-tripped correctly. For example, file paths using legacy encodings can still be used, but may be rendered differently on the command line.
  • On systems where no multi-byte locale is available, fish will no longer fall back to using ASCII replacements for Unicode characters such as “…”.

Interactive improvements

  • The title of the terminal tab can now be set separately from the window title by defining the fish_tab_title function (#2692).
  • fish now hides the portion of a multiline prompt that is scrolled out of view due to a huge command line. This prevents duplicate lines after repainting with partially visible prompt (#11911).
  • fish_config prompt’s choose and save subcommands have been taught to reset fish_mode_prompt in addition to the other prompt functions (#11937).
  • fish no longer force-disables mouse capture (DECSET/DECRST 1000), so you can use those commands to let mouse clicks move the cursor or select completions items (#4918).
  • The alt-p binding no longer adds a redundant space to the command line.
  • When run as a login shell on macOS, fish now sets MANPATH correctly when that variable was already present in the environment (#10684).
  • A Windows-specific case of the web-based config failing to launch has been fixed (#11805).
  • A MSYS2-specific workaround for Konsole and WezTerm has been added, to prevent them from using the wrong working directory when opening new tabs (#11981).

For distributors and developers

  • Release tags and source code tarballs are GPG-signed again (#11996).
  • Documentation in release tarballs is now built with the latest version of Sphinx, which means that pre-built man pages include OSC 8 hyperlinks.
  • The Sphinx dependency is now specified in pyproject.toml, which allows you to use uv to provide Sphinx for building documentation (e.g. uv run cargo install --path .).
  • The minimum supported Rust version (MSRV) has been updated to 1.85.
  • The standalone build mode has been made the default. This means that the files in $CMAKE_INSTALL_PREFIX/share/fish will not be used anymore, except for HTML docs. As a result, future upgrades will no longer break running shells if one of fish’s internal helper functions has been changed in the updated version. For now, the data files are still installed redundantly, to prevent upgrades from breaking already-running shells (#11921). To reverse this change (which should not be necessary), patch out the embed-data feature from cmake/Rust.cmake. This option will be removed in future.
  • OpenBSD 7.8 revealed an issue with fish’s approach to displaying builtin man pages, which has been fixed.

Regression fixes:

  • (from 4.1.0) Fix the web-based config for Python 3.9 and older (#12039).
  • (from 4.1.0) Correct wrong terminal modes set by fish -c 'read; cat (#12024).
  • (from 4.1.0) On VTE-based terminals, stop redrawing the prompt on resize again, to avoid glitches.
  • (from 4.1.0) On MSYS2, fix saving/loading of universal variables (#11948).
  • (from 4.1.0) Fix error using man for the commands ! . : [ { (#11955).
  • (from 4.1.0) Fix build issues on illumos systems (#11982).
  • (from 4.1.0) Fix crash on invalid function command (#11912).
  • (from 4.0.0) Fix build on SPARC and MIPS Linux by disabling SIGSTKFLT.
  • (from 4.0.0) Fix crash when passing negative PIDs to builtin wait (#11929).
  • (from 4.0.0) On Linux, fix status fish-path output when fish has been reinstalled since it was started.

Thanks to everyone who contributed through issue discussions, code reviews, or code changes.

Welcome our new committers: Ada Magicat, Aditya Bhargava, Alan Wu, Jesse Harwin, John Paul Adrian Glaubitz, Kabakov Grigoriy, Kaya Arro, Lumynous, Nahor, SandWood Jones, Shigure Kurosaki, ken, qianlongzt, seg6, traal

Welcome back our returning committers: Asuka Minato, Daniel Rainer, David Adam, Fabian Boehm, Henrik Hørlück Berg, Ilya Grigoriev, Integral, Isaac Oscar Gariano, Jiangqiu Shen, Johannes Altmanninger, Luca Weiss, Michael Nickerson, Peter Ammon, Sebastian Fleer, The0x539, Xiretza, kerty, ridiculousfish, Étienne Deparis, 王宇逸


Download links: To download the source code for fish, we suggest the file named fish-4.2.0.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using the key published at https://github.com/krobelus.gpg is available as fish-4.2.0.tar.xz.asc.

The files called fish-4.2.0-linux-*.tar.xz contain standalone fish binaries for any Linux with the given CPU architecture.

macOS packages will be uploaded soon.

fish 4.1.2

This release fixes the following regressions identified in 4.1.0:

  • Fixed spurious error output when completing remote file paths for scp (#11860).

  • Fixed the alt-l binding not formatting ls output correctly (one entry per line, no colors) (#11888).

  • Fixed an issue where focus events (currently only enabled in tmux) would cause multiline prompts to be redrawn in the wrong line (#11870).

  • Stopped printing output that would cause a glitch on old versions of Midnight Commander (#11869).

  • Added a fix for some configurations of Zellij where escape key processing was delayed (#11868).

  • Fixed a case where the web-based configuration tool would generate invalid configuration (#11861).

  • Fixed a case where pasting into fish -c read would fail with a noisy error (#11836).

  • Fixed a case where upgrading fish would break old versions of fish that were still running.

    In general, fish still needs to be restarted after it is upgraded, except for standalone builds.


Download links: To download the source code for fish, we suggest the file named fish-4.1.2.tar.xz. The file downloaded from Source code (tar.gz) will not build correctly. A GPG signature using the key published at https://github.com/krobelus.gpg is available as fish-4.1.2.tar.xz.asc.

The files called fish-4.1.2-linux-*.tar.xz are experimental packages containing a single standalone fish binary for any Linux with the given CPU architecture.

fish 4.1.1

This release fixes the following regressions identified in 4.1.0:

  • Many of our new Chinese translations were more confusing than helpful; they have been fixed or removed (#11833).

    Note that you can work around this type of issue by configuring fish’s message localization: if your environment contains something like LANG=zh_CN.UTF-8, you can use set -g LC_MESSAGES en to use English messages inside fish. This will not affect fish’s child processes unless LC_MESSAGES was already exported.

  • Some fish_config subcommands for showing prompts and themes had been broken in standalone Linux builds (those using the embed-data cargo feature), which has been fixed (#11832).

  • On Windows Terminal, we observed an issue where fish would fail to read the terminal’s response to our new startup queries, causing noticeable lags and a misleading error message. A workaround has been added (#11841).

  • A WezTerm issue breaking shifted key input has resurfaced on some versions of WezTerm; our workaround has been extended to cover all versions for now (#11204).

  • Fixed a crash in the web-based configuration tool when using the new underline styles (#11840).


Download links: To download the source code for fish, we suggest the file named “fish-4.1.1.tar.xz”. The file downloaded from “Source code (tar.gz)” will not build correctly.

The files called fish-4.1.1-linux-*.tar.xz are experimental packages containing a single standalone fish binary for any Linux with the given CPU architecture.