# fish shell 4.9.0 — fish 4.9.0 - Product: fish shell (https://whatsnew.fyi/product/fish-shell) - Vendor: fish-shell - Date: 2026-09-03 - Version: 4.9.0 - Original notes: https://github.com/fish-shell/fish-shell/releases/tag/4.9.0 - Permalink: https://whatsnew.fyi/product/fish-shell/releases/4.9.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Fish no longer requests the kitty keyboard protocol on Konsole to mitigate issues in Konsole version v26.07.80's implementation - **added** — Keys like shift-space and space can now be mapped independently on some terminals like kitty - **fixed** — Fixed slow tab completion in directories that contain slow-to-resolve symlinks - **added** — Abbreviations can now be given a description, which will be displayed in the completion pager - **fixed** — Vi mode commands like cF and cT now work correctly - **changed** — List indexing can now be nested in more cases, for example $foo[$bar[1] 2] is now allowed - **fixed** — Escaped square brackets are no longer considered a slicing operator - **fixed** — Variables containing a closing square bracket and used to index into another variable will no longer close the slice early - **fixed** — Builtin help pages now respect an override of the man function - **changed** — Commands like status=123 echo $status now throw an error instead of silently ignoring the variable override - **fixed** — Chinese and Japanese translation of error messages owned by the C library were broken - **fixed** — Erasing read-only variables with set --erase was accidentally allowed - **fixed** — Builtin fg was not working on NetBSD This release exists mainly to work around an issue with the Konsole terminal which would cause `shift-pageup` to stop working. This release brings 151 new commits since 4.8.1, contributed by 26 authors, 18 of which are new faces. ###### Interactive improvements - To mitigate issues in Konsole version v26.07.80’s implementation of the kitty keyboard protocol, fish no longer requests that protocol on Konsole. The `omit-term-workarounds` [feature flag](https://fishshell.com/docs/4.9/language.html#featureflags) can be turned on to enable the kitty keyboard protocol on Konsole again ([#12948](https://github.com/fish-shell/fish-shell/issues/12948)). - On some terminals like kitty, keys like `shift`-`space` and `space` can now be mapped independently ([#12898](https://github.com/fish-shell/fish-shell/issues/12898)). - Fixed slow tab completion in directories that contain slow-to-resolve symlinks (e.g. links to network-mounted files) ([#12905](https://github.com/fish-shell/fish-shell/issues/12905)). - Abbreviations can now be given a description, which will be displayed in the completion pager ([#11291](https://github.com/fish-shell/fish-shell/issues/11291)). - Vi mode commands like `cF` and `cT` now work correctly ([#12947](https://github.com/fish-shell/fish-shell/issues/12947)). ###### Scripting improvements - List indexing can now be nested in more cases; for example `$foo[$bar[1] 2]` is now allowed ([#12903](https://github.com/fish-shell/fish-shell/issues/12903)). - Escaped square brackets (e.g. `\133` for `[`) are no longer considered a slicing operator ([#7969](https://github.com/fish-shell/fish-shell/issues/7969)). - Variables containing a closing square brackets and used to index into another variable will no longer close the slice early ([#12819](https://github.com/fish-shell/fish-shell/issues/12819)). - Builtin help pages now respect an override of the `man` function ([#12886](https://github.com/fish-shell/fish-shell/issues/12886)). - Commands like `status=123 echo $status` now throw an error instead of silently ignore the variable override ([#7790](https://github.com/fish-shell/fish-shell/issues/7790)). ###### Regression fixes: - (From 4.6.0) Chinese and Japanese translation of error messages owned by the C library were broken ([#12895](https://github.com/fish-shell/fish-shell/issues/12895)). - (From 4.3.2) Erasing read-only variables with `set --erase` was accidentally allowed. - (From 4.0.0) Builtin `fg` was not working on NetBSD ([#12929](https://github.com/fish-shell/fish-shell/issues/12929)). --- Thanks to everyone who contributed through issue discussions, code reviews, or code changes. Welcome our new committers: AbhinavMir, Aelin, Alex Le Blanc, Alexia, Guflly, MeGaurav4, Philipp Jungkamp, SR0725, Tommi Virtanen, Vaibhav Srivastava, Valentyn Yefimov, avbest, developic, hazel, nekoside, orpheus6678, tianrking, yakakay Welcome back our returning committers: David Adam (zanchey), Fabian Boehm, Ilya Grigoriev, Johannes Altmanninger, Michael Jarvis, Nahor, Peter Ammon, Wes Higbee --- A GPG signature for `fish-4.9.0.tar.xz` using [this key](https://github.com/krobelus.gpg) is available as `fish-4.9.0.tar.xz.asc`. The files called `fish-4.9.0-linux-*.tar.xz` contain [standalone fish binaries](https://github.com/fish-shell/fish-shell/?tab=readme-ov-file#building-fish-with-cargo) for any Linux with the given CPU architecture.