Nushell 0.59 (aka 0.60 beta)

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 a beta release of 0.60 of Nu. This is to get early feedback on 0.60 before it's full release in three weeks.

What's new

We'll wait until the full release for the final set of features going into 0.60, but suffice to say it's a lot.

Some of the main things we want to cover for this beta release: the new engine, language improvements, new plugin infrastructure, and more.

New Engine

You can now try out the improvements that came with engine-q as part of a Nushell release. The engine offers a lot of improvements over the previous one. You can now get much better errors, run code in parallel, run code generally faster, and more correctly.

We'll be talking about this more in the full release announcement, but we'd also love your help in testing the engine as you port your code over to it. Crashes, incorrect answers, or just plain weirdness are things we'd like to work on.

Language improvements

We've made a bunch of improvements to the language, from the change to if to allow else, to modules and imports, operator short-circuiting, and much more.

We're working to bring the book up to dateopen in new window, and it's a good place to find explanations of these improvements. Be sure to also look at the updated command documentationopen in new window for more information on the updated commands.

New plugin architecture

The new plugin architecture is now multi-protocol, allowing you to pick the right protocol for your plugin. We currently support json and capnp.

Rather that scanning for all new plugins on startup like we did with 0.44, there is also a new register command you use a plugin for use:

> register -e capnp ~/.cargo/bin/nu_plugin_extra_query

And more

We're still hard at work finishing up the 0.60 release, and we're excited to tell you everything it can do. You'll notice some new chapters in the bookopen in new window on some of these, including: support for exit codes, better stderr support, new language literals for dates and binary data, a whole new line editor with an improved interface, and much more.

One more thing

Before we go, we thought we should mention that Nushell now supports completions for external commands. When you first start up nushell, you'll notice that it asks if you want to create a default configuration. If you say yes, and look at the file, you'll see a few of these:

def "nu-complete git branches" [] {
  ^git branch | lines | each { |line| $line | str find-replace "\* " "" | str trim }
}

def "nu-complete git remotes" [] {
  ^git remote | lines | each { |line| $line | str trim }
}

extern "git checkout" [
  branch?: string@"nu-complete git branches" # name of the branch to checkout
  -b: string                                 # create and checkout a new branch
  -B: string                                 # create/reset and checkout a branch

These are completions for external commands (here git checkout) written all in Nushell. We're already getting contributions for other completionsopen in new window, too!

Looking forward

It's time to polish 0.60 and get it to a nice shine. Your help in testing this beta release is invaluable to help making that happen. If you'd like to help us with docs, samples, code, or anything else that crosses your mind, come join us on the discordopen in new window.