Download Latest Version fish 4.8.1 source code.zip (6.9 MB)
Email in envelope

Get an email when there's a new version of fish

Home / 4.8.0
Name Modified Size InfoDownloads / Week
Parent folder
fish-4.8.0.app.zip 2026-06-26 17.0 MB
fish-4.8.0.pkg 2026-06-26 23.8 MB
fish-4.8.0.tar.xz.asc 2026-06-24 687 Bytes
fish-4.8.0-linux-aarch64.tar.xz 2026-06-24 2.9 MB
fish-4.8.0-linux-x86_64.tar.xz 2026-06-24 3.2 MB
fish-4.8.0.tar.xz 2026-06-24 2.6 MB
fish 4.8.0 source code.tar.gz 2026-06-24 6.2 MB
fish 4.8.0 source code.zip 2026-06-24 6.9 MB
README.md 2026-06-24 6.1 kB
Totals: 9 Items   62.6 MB 5

This release brings 234 new commits since 4.7.1, contributed by 39 authors, 21 of which are new faces.

Notable improvements and fixes

  • Translatable messages defined in Rust source code can and should now be translated using Fluent instead of GNU gettext. For now, GNU gettext continues to be used for translating messages defined in fish scripts. To make Fluent easy to work with, we have added tooling based on the new fluent-ftl-tools library. See Contributing Translations (#11928).

Deprecations and removed features

  • Builtin complete’s --command and --path options no longer unescape their argument.

Interactive improvements

  • History search would sometimes forget about commands after those were re-run in concurrent sessions. This has been fixed (#10300).
  • fish_hg_prompt, fish_git_prompt and fish_fossil_prompt now strip control characters from VCS state read off disk, matching prompt_pwd.
  • Abbreviations with --position=anywhere can now be completed in argument position, not just in command position (#12630).
  • Path component movement (ctrl-w) skips escaped characters.
  • Completion of short option groups will now handle --condition correctly (#12821).
  • Fixed an issue where ctrl-c might fail to cancel certain functions (#12802).
  • On the first run after upgrading from an older version, fish will try harder to check if the current theme matches a historical default. If it does match, fish won’t create ~/.config/fish/conf.d/fish_frozen_theme.fish when upgrading from fish < 4.3. In particular, on systems where fish version 3.x was installed originally, fish will now avoid creating that file on upgrade (#12725).

Scripting improvements

  • cd supports the -L and -P options, like other shells, to allow specifying whether symbolic links (symlinks) are resolved when changing directories (#7206).
  • cd with a relative path will now retry using the real current directory, if $PWD has been moved (#12700).
  • Nested brace expansions now strip unquoted leading and trailing spaces from entries consistently (#12794).
  • bind shows the files where bindings were defined (#12504).

Other improvements

  • fish no longer creates the __fish_initialized universal variable on startup. If you don’t expect to need to downgrade to earlier versions, you can remove it with set --erase __fish_initialized. This means that fish now only creates universal variables if instructed by the user.

For distributors and developers

  • With the exception of the $CMAKE_INSTALL_PREFIX/share/fish/man directory, fish no longer installs files to $CMAKE_INSTALL_PREFIX/share/fish. In particular, this means that both $CMAKE_INSTALL_PREFIX/share/fish/completions and $CMAKE_INSTALL_PREFIX/share/fish/functions should no longer exist. These directories have been ignored since fish 4.2. If another package installs fish scripts there, they should be corrected to install to extra_completionsdir (typically $CMAKE_INSTALL_PREFIX/share/fish/vendor_completions.d), extra_functionsdir (typically $CMAKE_INSTALL_PREFIX/share/fish/vendor_functions.d) or extra_confdir (typically $CMAKE_INSTALL_PREFIX/share/fish/vendor_functions.d) instead. See also the output of for var in completions functions conf; pkgconf fish --variable="$var"dir; end.

Regression fixes:

  • (from 4.4.0) Vi mode c,W key binding wrongly deleted trailing spaces (#12790).
  • (from 4.4.0) Vi mode x in builtin read (#12724).
  • (from 4.3.3) Repeated tab would sometimes insert smartcase completions redundantly.
  • (from 4.3.0) Pressing escape during command execution could insert garbage text into the command line (#12379).

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

Welcome our new committers: Clément Bœsch, Deepak kudi, Drazape, Hans Larsen, Harry Garrood, Jian Weihang, Jonas Natten, June Kim, Justin Su, KeloYuan, Mark Otzen, Michael Morgan, Milo, Sean Reifschneider, Tunglies, Wes Higbee, cyphercodes, ketal, ritoban23, saku0512, sorgel

Welcome back our returning committers: Asuka Minato, Collin Styles, Daniel Rainer, David Adam, Fabian Boehm, Henrik Hørlück Berg, Johannes Altmanninger, Mahmoud Al-Qudsi, Nahor, Peter Ammon, PowerUser64, Remo Senekowitsch, Shayan, Tristan Partin, Vishrut Sachan, huaji2369, visrosa, xtqqczze


Download links: To download the source code for fish, we suggest the file named fish-4.8.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.8.0.tar.xz.asc.

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

macOS packages will be uploaded soon

Source: README.md, updated 2026-06-24