# Nushell 0.19
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 (opens new window) or from crates.io (opens new window). 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>
.
# What's New
# 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 (opens new window) if you're interested in configuring them for yourself. There's also and example config.toml
here (opens new window) 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 (opens new window) 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.
# Command improvements
size
now gives back simpler columns (opens new window) (gillespiecd)uniqe
has more examples (opens new window) (gillespiecd)ls
will tolerate more OS errors while listing (opens new window) (gorogoroumaru)cd .
now does the expected (opens new window) (VincentWo)math stddev
andmath variance
both received updates (gillespiecd)- List literals can now have commas (opens new window) (jonathandturner)
str index-of
can now do a reverse find (opens new window) (fdncred)- A new PowerShell plugin sample (opens new window) (fdncred)
- New
path dirname
andpath filestem
subcommands (opens new window) (fdncred) - The
alias
command now has optional type inference (opens new window) (bailey-layzer) - The line editor hinter is now configurable (opens new window) (amitdev)
version
now includes the git hash when built locally (opens new window) (coolshaurya)touch
can now take multiple arguments (opens new window) (jzaefferer)date
now has subcommands (opens new window) (gorogoroumaru)- A new
sleep
command (opens new window) (LhKipp) - Improvements to
ls
and hidden files (opens new window) (mattclarke) sort-by
errors now point to mismatched types (opens new window) (luccasmmg)str
subcommands for various capitalizations (opens new window) (rrichardson)- Time units are now more readable (opens new window) (mattclarke)
- Exit scripts from per-directory environments are now run in the original directory (opens new window) (samhedin)
- We've also got a Portuguese translation of the contributor book(!!) (opens new window) (vpperego)
- Improved RHEL installation instructions (opens new window) (arnaldo2792)
# More cleanup and improvements (gillespiecd, jonathandturner, Marcoleni, andrasio, dmeijboom, thegedge, jzaefferer, ryuichi1208, JosephTLyons)
Cleanups in math commands, extra bits of command help, reformating 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 histogram
and count
,
# Breaking changes
# 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.
Instead of 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 (opens new window).
# Header colors
With the new theming support, header_color
, header_bold
, and header_align
have moved into the [color_config]
section, and out of the root level, of the config.toml
file.
# 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 stable
release.
# Looking forward
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.