Nushell 0.89.0

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.89.0 of Nu. This release adds spreading of argument lists to command calls, better editor integration, and many bugfixes.

Where to get it

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

Table of content

Themes of this release / New features [toc]

(Update 19.01.2024, Breaking change!) Removal of directory module auto-exports [toc]

Release note gremlin hid this note from us and we forgot to add it. We're sorry!

@amtoineopen in new window in #11157open in new window removed the directory module autoexport of all .nu files inside the directory. This removes the ability to "dump .nu files into a directory" and have them automatically exported. Previously, if you had the following file structure:

spam
├── bar.nu
├── baz.nu
├── foo.nu
└── mod.nu

all you had to do was to call use spam and the .nu files would be added as submodules of spam. Now, to achieve the same effect, you would need to put

export module foo.nu
export module bar.nu
export module baz.nu

to the mod.nu.

This change adds one manual step you need to perform to export submodules from modules, but it gives you more control and confidence. In the previous system, .nu files would be auto-exported even if you didn't want to! For example, to prevent baz.nu from being auto-exported, you would need to put it inside a new directory that doesn't contain mod.nu (and thus is not considered a Nushell module), like this:

spam
├── bar.nu
├── foo.nu
└── utils
    └── baz.nu

We felt like this workaround was quite cumbersome, and the implicit behavior wasn't in the disciplined spirit of Nushell. Rather than having this auto-exporting as an implicit feature of use, we're currently exploring ways to allow doing it explicitly, for example with a separate command.

Spread operator for commands

In #11289open in new window, @ysthakuropen in new window implemented a spread operator for calling commands (previously, it could only be used in list and record literals).

Now, if you have a command with a rest parameter:

def foo [ ...args ] { $args | to nuon }

You can spread arguments to it like this:

> let x = [foo bar baz]
> foo ...[1 2] ...$x
[1, 2, foo, bar, baz]

See the docs for more information.

Editor Improvements

Thanks to @AucaCoyan's #11284open in new window and #11320open in new window, Nushell's VSCode extension and builtin LSP server now show the same command's message on hover as abtained with help in Nushell.

Deprecation of --flag: bool

In the last release, we allowed passing flags dynamically:

def spam [--foo] {
    print $foo
}

let value = false
spam --foo=$value
# prints false

However, it is easy to confuse with --foo: bool. To disambiguate, we are deprecating the setting optional parameters with boolean type (--flag: bool). Doing so will trigger a warning:

def spam [--foo: bool] { $foo }
Error:   × Deprecated: --flag: bool
   ╭─[entry #3:1:1]
 1 def spam [--foo: bool] { $foo }
   ·                  ──┬─
   ·                    ╰── `--flag: bool` is deprecated and will be removed in 0.90. Please use `--flag` instead, more info: https://www.nushell.sh/book/custom_commands.html
   ╰────

Our set of commands is evolving [toc]

As usual, new release rhyms with changes to commands!

New commands [toc]

ulimit for Unix-based systems

The new ulimit command added by @nibon7open in new window can now be used on Unix-based systems for setting or checking the resource limits, such as the stack size or virtual memory size, for the current user.

To list the current limits:

ulimit -a

Setting the limits is done via flags available in help ulimit.

Breaking changes [toc]

Full changelog [toc]

Nushell

Documentation

Nu_Scripts

Reedline