Nushell 0.80

Nushell, or Nu for short, is a new shell that takes a modern, structured approach to your command line. 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 command line pipelines.

Today, we're releasing version 0.80 of Nu. This release adds record type annotations, modules from directories, and improvements to the standard library.

Where to get it

Nu 0.80 is available as pre-built binariesopen in new window or from crates.ioopen in new window. If you have Rust installed you can install it using cargo install nu.

NOTE: The optional dataframe functionality is available by cargo install nu --features=dataframe.

As part of this release, we also publish a set of optional plugins you can install and use with Nu. To install, use cargo install nu_plugin_<plugin name>.

Themes of this release / New features

Record type annotations (@1Kinotiopen in new window)

Starting with this release, you can add more information about the type of a record your command expects. For example:

def okay [person: record<name: string age: int>] {}

The above will require two fields to be present, a name that's a string, and an age that's an int. The current version requires that the record has exactly these fields, though we may loosen this in future releases to allow for structural subtyping.

Modules from directories (@Kubouchopen in new window)

It is now possible to create a module from a directory. The directory must contain and all other .nu files are added as a submodule of the module. This allows some traditional shell patterns such as dumping completion files into a directory to be loaded automatically. Check out the newly updated book chapteropen in new window for more details and examples.

The enabling feature for module directories was organizing modules into submodule structure instead of solely relying on re-importing symbols with export use. module and especially export module have been added as a result of this change. While not immediately visible, the module update allows for cleaner submodule organization without relying on re-exporting symbols with export use. Since modules are now aware of their submodules, in the future we hope to improve discoverability of definitions within modules, enhancing our IDE support (such as our LSPopen in new window).

Stdlib update ([@amtoine, @EmilySeville7cfg, @skelly37, @YummyOreo][std-lib PRs])

3268ecd11FEATURE: add the bench command to the standard library#8969open in new window
155de9f6fAdded log custom command & exported log levels#9055open in new window
edb61fc1dTry to show help pages for external commands w/ help command#9025open in new window
7a945848dswap the date and the log level in the std log format#9138open in new window

other interesting new features

e251f3a0bChange type of parameter default values to Option<Value>#8940open in new window
c422c6cc3Fix completion on $nu to show correct menus#8919open in new window
44493dac5Add extern def which allows raw arguments#8956open in new window
fb10e1dfcadd --ide-ast for a simplistic ast for editors#8995open in new window
4ca47258aAdd --redirect-combine option to run-external#8918open in new window
e590d3587enable history isolation#9063open in new window
d45e9671dSuggest existing variables on not found#8902open in new window
a7c1b363eDon't run .sh files with /bin/sh#8951open in new window
e4625acf2support bracketed paste#8907open in new window
b82e279f9REFACTOR: remove deprecated commands (old-alias)#9056open in new window
10d65b611adds a list subcommand to input (interactive selections)#8963open in new window

Breaking changes

Full changelog