Nushell, or Nu for short, is a new shell that takes a modern, structured approach to your commandline. It works seamlessly with the data from your filesystem, operating system, and a growing number of file formats to make it easy to build powerful commandline pipelines.
Today, we're releasing 0.19 of Nu. In this version, we fill some long-lived gaps in Nu, improve completions, theming, and much more.
Where to get it
Nu 0.19 is available as pre-built binaries or from crates.io. If you have Rust installed you can install it using
cargo install nu.
If you want all the goodies, you can install
cargo install nu --features=extra.
As part of this release, we also publish a set of plugins you can install and use with Nu. To install, use
cargo install nu_plugin_<plugin name>.
New completion engine (thegedge)
Nushell's completion suggestions are now built around the nushell parser. This means completers can now use a much richer context to provide relevant suggestions. This is still a work in progress, but one immediate improvement is that we can now complete commands, flags, and arguments in most nested structures. For example,
echo $(l<TAB> will show you all commands that start with l.
The completion work is still very "new", with parts landing in the hours before the release, so please give it a spin and let us know where we can keep improving it.
Improved theming (fdncred)
Nu, with love
We're continuing to expand what's possible with Nu's themes, allowing you to configure more areas of how your data is displayed.
You can also configure how the various Nu data types are displayed. You can learn about the new custom data colors if you're interested in configuring them for yourself. There's also and example
config.toml here with an example of how to set the colors you like.
Table literals (jonathandturner)
Starting with 0.19, you can now write table values like you would other kinds of values. To do so, separate a row of header names from the data using a
;. For example:
> echo [[name size]; [JT 185] [KJ 160]] ───┬──────┬────── # │ name │ size ───┼──────┼────── 0 │ JT │ 185 1 │ KJ │ 160 ───┴──────┴──────
To be a valid table, the number of columns needs to line up.
Multiline edits (jonathandturner)
In addition to the new table literals, we're opening up multiline commands. Initially, this will be for the line editor, but we'll extend this further as we improve parser support.
You can now also write the above:
> echo [ [name, size]; [JT, 185] [KJ, 160] ] ───┬──────┬────── # │ name │ size ───┼──────┼────── 0 │ JT │ 185 1 │ KJ │ 160 ───┴──────┴──────
You might have noticed we now also allow commas to separate cells. These are intended to help readability and give a more familiar syntax for people coming from other languages.
Nushell celebrates its first year in the public
We recently sat down and wrote about where Nushell has come over the last year and some thoughts about where it's going. The blog post is a wealth of information about Nu's philosophy and direction. Well worth a read.
sizenow gives back simpler columns (gillespiecd)
uniqehas more examples (gillespiecd)
lswill tolerate more OS errors while listing (gorogoroumaru)
cd .now does the expected (VincentWo)
math varianceboth received updates (gillespiecd)
- List literals can now have commas (jonathandturner)
str index-ofcan now do a reverse find (fdncred)
- A new PowerShell plugin sample (fdncred)
path filestemsubcommands (fdncred)
aliascommand now has optional type inference (bailey-layzer)
- The line editor hinter is now configurable (amitdev)
versionnow includes the git hash when built locally (coolshaurya)
touchcan now take multiple arguments (jzaefferer)
datenow has subcommands (gorogoroumaru)
- A new
- Improvements to
lsand hidden files (mattclarke)
sort-byerrors now point to mismatched types (luccasmmg)
strsubcommands for various capitalizations (rrichardson)
- Time units are now more readable (mattclarke)
- Exit scripts from per-directory environments are now run in the original directory (samhedin)
- We've also got a Portuguese translation of the contributor book(!!) (vpperego)
- Improved RHEL installation instructions (arnaldo2792)
More cleanup and improvements (gillespiecd, jonathandturner, Marcoleni, andrasio, dmeijboom, thegedge, jzaefferer, ryuichi1208, JosephTLyons)
Cleanups in math commands, extra bits of command help, reformatting of the command list, better email samples, cleaned up spans in pipelines, fix to
header command with mismatched columns, cleanup of dependency usage, cleaned up display config, added crossreferences in command help, subcommands are now sorted before being listed, some dockerfile improvements, nu-cli now has nu-data split off from it, column count now won't break on empty tables, wasm is now tested on CI, improvements to
Starship is now external
To help Nu focus a bit more on the core capabilities, and to free up it to update separate from Nu, Starship is now external. Once you install Starship, you can set your prompt to use starship using:
> config set prompt `echo $(starship prompt)`
You can also set Nu to use other prompts as well. For example, if you like powerline, you can also use this:
> config set prompt `echo $(powerline shell left)`
No more auto-pivot by default
Based on feedback from users, we've now disabled any auto-pivoting of tables by default. You can still re-enable this behavior in your config, but we will no longer rotate any tables without being explicitly asked.
# To only rotate large tables: > config set pivot_mode auto # To always rotate a single row to be vertical: > config set pivot_mode always
Time units are now renamed
To make it easier, and more readable, to work with a variety of units in the future, we've renamed the time units.
1s, you'll now use
1sec. Most units for time now follow 3 letters instead of a single letter. You can read more about the full change in the PR.
With the new theming support,
header_align have moved into the
[color_config] section, and out of the root level, of the
Simplified default build
While not technically a breaking change, it's worth a mention that starting with 0.19, you don't need to use
--features=stable to get most of Nu's features. We've folded most of the common ones into the default install. For all the bells and whistles, now use
--features=extra, which includes additional functionality not part of the original
With 0.19, we see the first deeper changes to the completion engine since Nu was first released. These will grow to allow custom completions for commands, and we're looking forward to making these features available.
The new table literal also takes a step in the direction of data frame support in the future, a powerful feature popularized by pandas, R and other data processing libraries and languages. With it, we hope Nu will continue to grow to having a richer, more nuanced, view of data over time.