Home Explore Blog CI



nushell

blog/2021-04-20-nushell_0_30.md
858e343637b228fb910973cecb3bdfcdbd82668010871fc60000000300001d7f
---
title: Nushell 0.30
author: The Nu Authors
author_site: https://twitter.com/nu_shell
author_image: https://www.nushell.sh/blog/images/nu_logo.png
excerpt: Today, we're releasing 0.30 of Nu. This release adds big improvements to performance and simplicity of the engine.
---

# Nushell 0.30

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.30 of Nu. This release adds big improvements to performance and simplicity of the engine.

<!-- more -->

# Where to get it

Nu 0.30 is available as [pre-built binaries](https://github.com/nushell/nushell/releases/tag/0.30.0) or from [crates.io](https://crates.io/crates/nu). 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`.

If you'd like to try the experimental paging feature in this release, you can install with `cargo install nu --features=table-pager`.

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

## Performance improvements (sophiajt)



_Nu, now noticeably faster_

The 0.30 release is the first to include the engine-p experimental approaches that we mentioned in the last release. These changes streamline the engine, moving it from [async streams to iterators](https://github.com/nushell/nushell/pull/3270), [simplifying how commands handle their arguments](https://github.com/nushell/nushell/pull/3281), and how [outputs are passed from one command to the next](https://github.com/nushell/nushell/pull/3304).

The end result is an engine that is both simpler and much faster. In the above example we run two different benchmarks. The first is a run of [this script](https://github.com/nushell/nu_scripts/blob/main/coloring/gradient.nu) in the Nushell script repo. The second is a tight processing loop over many 10 million small records: `echo 1..10000000 | prepend 777 | append 555 | where $it > 7 | length`.

Though the performance numbers are still early, they're extremely promising.

## New built-in variable `$scope` (stevenbarragan, fdncred)

We're experimenting with a new built-in variable called `$scope`. This gives you access to definitions in scope, including variables.

## New Commands

- [`math sqrt`](https://github.com/nushell/nushell/pull/3239) (luccasmmg)
- [`any?` and `all?`](https://github.com/nushell/nushell/pull/3253) (andrasio)
- [`path parse`, `path join`, and `path split`](https://github.com/nushell/nushell/pull/3256) (kubouch)
- [`into int`](https://github.com/nushell/nushell/pull/3279) (efx)
- [`query json`](https://github.com/nushell/nushell/pull/3327) (fdncred). This is a new experimental query function as we explore how we'd like to do data querying in nushell.

## Documentation (andrasio)

We have a new [guide on how to create Nushell commands](https://github.com/nushell/nushell/pull/3326).

## Improvements (LhKipp, luccasmmg, waldyrious, ilius, fdncred, andrasio, DonnutPanic, ammrkn, sophiajt, schrieveslaach, daschl, nightscape)

- Lots of internal optimization updates: [1](https://github.com/nushell/nushell/pull/3289), [2](https://github.com/nushell/nushell/pull/3292), [3](https://github.com/nushell/nushell/pull/3300), [4](https://github.com/nushell/nushell/pull/3301), [5](https://github.com/nushell/nushell/pull/3306)
- Now [appends to the history instead of replacing it](https://github.com/nushell/nushell/pull/3314)
- API improvements to [allow embedded nushell to have custom commands](https://github.com/nushell/nushell/pull/3309)
- Internal implementation [improvements to `which`](https://github.com/nushell/nushell/pull/3310), [to `all`](https://github.com/nushell/nushell/pull/3312), [to `math` commands](https://github.com/nushell/nushell/pull/3315), [to `to` and `from` commands](https://github.com/nushell/nushell/pull/3320), [to `compact`](https://github.com/nushell/nushell/pull/3325)
- Updated [`echo ..` to no longer prints integers](https://github.com/nushell/nushell/pull/3322)
- Removed [help flags from the `$scope.commands` display](https://github.com/nushell/nushell/pull/3311)
- Removed the [dupes in get_commands/get_command_names](https://github.com/nushell/nushell/pull/3308)
- Fixes to [viewing Value as a filepath](https://github.com/nushell/nushell/pull/3305)
- Move [arg deserialization out of `str`](https://github.com/nushell/nushell/pull/3294)
- Cleaned up [error handling](https://github.com/nushell/nushell/pull/3297)
- Fixes to how [rest arguments are handled](https://github.com/nushell/nushell/pull/3303)
- Fixes to [`ansi rgb fg`](https://github.com/nushell/nushell/pull/3293)
- Updated [the default prompt](https://github.com/nushell/nushell/pull/3291)
- Autoview and table now [read from the in-memory config](https://github.com/nushell/nushell/pull/3287)
- Do not [store whitespace entries in the history](https://github.com/nushell/nushell/pull/3286)
- Simplified [internal handling of the runnable context](https://github.com/nushell/nushell/pull/3283)
- Fixed [external output busy-waiting](https://github.com/nushell/nushell/pull/3280)
- Remove [`rm`'s trash flag if it's not supported](https://github.com/nushell/nushell/pull/3278)
- Fixed a [panic when timestamp is out of range](https://github.com/nushell/nushell/pull/3271)
- Sysinfo dependency has been [updated](https://github.com/nushell/nushell/pull/3267)
- Config commands [are now more unified internally](https://github.com/nushell/nushell/pull/3265)
- Added [TiB and PiB units](https://github.com/nushell/nushell/pull/3257)
- Improved [auto-suggestion for aliases and custom commands](https://github.com/nushell/nushell/pull/3249)
- More [logging and tests](https://github.com/nushell/nushell/pull/3247)
- Now [parses decimal units](https://github.com/nushell/nushell/pull/3243)
- Use [one main function to run scripts](https://github.com/nushell/nushell/pull/3242)
- Fixed [errors when deleting a FIFO](https://github.com/nushell/nushell/pull/3235)
- Fixed [capitalizations of Unicode](https://github.com/nushell/nushell/pull/3234)
- Fixes to [path sync'ing](https://github.com/nushell/nushell/pull/3335), [more path fixes](https://github.com/nushell/nushell/pull/3336), and [improvements to dynamic blocks](https://github.com/nushell/nushell/pull/3339)

## Breaking changes

### Removed help shell

We have removed the [help shell](https://github.com/nushell/nushell/pull/3258) to simplify code.

### Removed ambiguous units

We've also removed [`yr` and `mon` units](https://github.com/nushell/nushell/pull/3262) because their meaning was too confusing.

### New set of default features

The [default feature list is now simpler](https://github.com/nushell/nushell/pull/3288). This means that doing a `cargo install` will give you fewer of the plugins than previously. We're still working to refine this list. Please do give feedback if these changes negatively impact you.

# Looking ahead

The new engine and performance improvements should open the door for even more improvements in the future. These improvements also make it easier to explore adding more sophisticated completion logic in the future, as that logic could be written in Nushell itself.

Chunks
e3824109 (1st chunk of `blog/2021-04-20-nushell_0_30.md`)
39470b2d (2nd chunk of `blog/2021-04-20-nushell_0_30.md`)
c84ba871 (3rd chunk of `blog/2021-04-20-nushell_0_30.md`)
a1c20fe6 (4th chunk of `blog/2021-04-20-nushell_0_30.md`)