Nushell 0.64

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 version 0.64 of Nu. It's the first to include input overloading, input/output types, and lazy dataframes.

Where to get it

Nu 0.64 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.

If you want all the built-in goodies, you can install cargo install nu --features=extra.

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

Input overloading (elferherrera)

Commands can now declare their input and output typesopen in new window. While this support is still initial and isn't yet available in the syntax, we're already using it for one important improvement: simplifying the commands.

In this release, dataframe commands can now detect the input type in the pipeline and run without needing to be called with dfr before every command. The end result is much cleaner:


> [[a b]; [1 2] [3 4]] | dfr to-df | dfr drop a


> [[a b]; [1 2] [3 4]] | to-df | drop a

This allows dataframe commands to feel more natural and fit more cleanly in with other commands. We're also looking to make similar improvements to the db command. In the future, you'll be able to open a data source and then use the standard nushell commands against it, and Nushell will select the best fit based on the type of data source you're opening.

Lazy dataframes (elferherrera)

Dataframes now have lazy operationsopen in new window. These lazy operations allow users to build up multiple steps of a pipeline and execute them in a much more efficient way against the dataframe.

Future SQLite backed history (phiresky)

The API for storing history entries has changed in the background. This now supports also storing your history in a SQLite database. Currently this adds some metadata such as the current working directory, whether a command succeeded, and execution times. In the future this will enable you to query the history in a more rich and meaningful way.

Currently the simple text based history is still the default. If you want to test out the new history change your config to contain:

let-env config = {
  history_file_format: "sqlite" # "sqlite" or "plaintext"


You can see the full list in the Changelog below.

Looking ahead

The new input/output types and type overloading allows for a simpler, more uniform Nushell language. We're looking forward to continuing to improve this as well as improving the Nushell language around it.

We've also recent shown an experimental graphical version of Nushellopen in new window. This experiment is something you can use today across the platforms that Nushell supports.