fish shell v4 beta 1

A bunch of small nice improvements… and a rewrite in Rust!

Assumed audience: People who at least sometimes use a command line and understand that there are differences between different shells.

My shell of choice for going on a decade now1 has been fish, which has a bunch of built-in niceties that need user-authored code to get in bash, zsh, etc. A couple days ago, fish shipped the first beta of v4 of the shell, which they rewrote entirely from C++ to Rust. From the blog post:

We are quite proud of this upcoming release. It represents a staggering amount of work and includes some really nice changes for users, as well as foundational improvements that will pay off in the future.

We consider this beta to be highly stable, and we use it as our primary shell. All existing fish scripts and commands are expected to keep working, with the exception of the items noted in the release notes. Whether you are an existing user, or curious to give fish a try, this is a great opportunity to contribute to fish-shell.

We will be publishing a follow-up post about the mechanics of the port from C++ to Rust: what went well, what could have gone better, and lessons learned.

I just installed it myself and everything Just Works™ right out of the box, which is exactly what you want for this kind of update. I am certainly looking forward to that blog post about the migration! A few highlights from the release notes that caught my attention:

  • Improved search when using Controlr — which was already very good.
  • A number of improvements to compatibility with other POSIX shells.
  • Improvements to fancy key combo support for XTerm and the kitty keyboard protocol. (I like to see that terminals are still working to improve from the weird baseline that is how we had to do things 50 years ago”.)
  • Better Windows support in a couple key areas. This doesn’t affect me, but it might be useful for some of you reading!
  • Improved completions, including completing things with leading ., like .gitignore.

See the blog post and the release notes for further details on what’s new and what changed, as well as how to install the beta.


Notes

  1. I don’t remember when I switched from zsh to fish, but it has been a very long time; I was a fish veteran when I went to LinkedIn and indeed one of the first things I shipped there was fish support for Volta (then still named Notion). ↩︎