Home Explore Blog CI



nushell

blog/2022-05-24-nushell_0_63.md
ed03d5b1be5d6aa5f40cb3c5617af5f45b16b8b96d5123a800000003000052f0
---
title: Nushell 0.63
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 version 0.63 of Nu. This release is the first to include the 'overlays' feature, hooks, lazy dataframes, and more.
---

# Nushell 0.63

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.63 of Nu. This release is the first to include the 'overlays' feature, hooks, lazy dataframes, and more.

<!-- more -->

# Where to get it

Nu 0.63 is available as [pre-built binaries](https://github.com/nushell/nushell/releases/tag/0.63.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 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

## Overlays (kubouch)

We've added a new concept into this release that merges a few of our previous design ideas together: overlays. You can think of overlays like layers in a paint program. They work together to give you a set of commands, environment variables, and more that you can turn on and off as needed.

For example, we can create an overlay to work in:

```
(zero) > module code { export env BAZ { "baz" } }
(zero) > overlay add code
(code) > $env.BAZ
baz
(code) > let-env BAGR = "bagr"
(code) > $env.BAGR
bagr
(code) > overlay remove code
(zero) > # environment back to what we started with
```

Just like layers in a paint program, changes you make (like the update to the environment above) are part of the layer. You can use `--keep-custom` to keep the changes you have made even after you hide the overlay. Using `add` and `remove` are effectively like `show` and `hide`, allowing you to quickly switch into a new context, do some work, and switch out with little effort.

## Hooks (sophiajt)

Starting with 0.63, you can now set up hooks that will run code under certain conditions. These hooks run after your code has finished evaluating.

Let's look first at how to set up the hooks, and then see what the hooks output. To set up a hook, you pick the kind of hook and then configure a block of code to run when that hook fires:

```
hooks: {
    pre_prompt: [{
        print "pre_prompt hook"
    }]
    pre_execution: [{
        print "pre_execution hook"
    }]
    env_change: {
        PWD: [{|before, after|
            print $"PWD environment variable changed from ($before) to ($after)"
        }]
    }
}
```

Using this example, we can watch the hooks fire:

```
/home/sophiajt/Source/nushell〉cd ..
pre_execution hook
pre_prompt hook
PWD environment variable changed from /home/sophiajt/Source/nushell to /home/sophiajt/Source
/home/sophiajt/Source〉
```

Used together with the "overlays" feature above, we hope to open up the possibility for a lot of powerful interactions with the shell while still keeping the workflow that makes Nushell special.

## Lazy dataframe support (elferherrera)

We are starting to support a new way to query dataframes by using lazyframes. This new concept will allow users to build logical plans for the data operations which will result in a reduction of the dataframe processing time.

Lazy dataframes are accessed through the same `dfr` command and give you a way to build up a pipeline to execute in a more optimal way than the previous eager dataframes. For example, you can perform your aggregations and group-bys lazily, and then work on the results instead of paying for the processing time of having two separate steps.

# New commands

- (Returned from the engine rewrite) `histogram` for checking distributions right inside nushell (WindSoilder)
- `config nu` and `config env` to easily edit your nushell configuration files with your editor of choice (Kangaxx-0/vFrankZhang)
- `str title-case` (krober)
  ```
  > 'this is a test case' | str title-case
  This Is A Test Case
  ```
- Many new `db` subcommands (elferherrera)

# Quality-of-life Improvements

- More commands contain additional search terms to find them if you don't remember their exact name. (victormanueltn, LawlietLi) This is a great way to help out by contributing! More information can be found [here](https://github.com/nushell/nushell/issues/5093).
- `print -n` option to print output without an additional new-line (fdncred)
- `flatten` now has a more consistent behavior for nested records and tables. (WindSoilder) This now more closely matches the pre-0.60 flatten, and should help create more predictable output.

- We now support octal binary literals `0o[777]` similar to the hexadecimal `0x[FF]` and binary `0b[11111111]` literals (toffaletti)
- `cd` accepts abbreviation of paths to quickly jump to nested directories based on unique prefixes (fdncred)
  ```
  > $env.PWD
  ~/some/path
  > cd d/s/9
  > $env.PWD
  ~/some/path/deep/space/9
  ```
- Various improvements make the completions feel more polished (herlon214, PurityLake)
- If `$config.buffer_editor` is not set rely on the `$env.EDITOR` and `$env.VISUAL` environment variables to find a text editor to edit longer pipelines or your `config ...` (Kangaxx-0/vFrankZhang, sholderbach)
- When invoking `nu` to run a script you can now pass the `--config` flag to load your `config.nu` and have the definitions available when running the script (WindSoilder)
- Similarly you can change the table appearance with the `--table-mode` flag when invoking `nu` (fdncred)

**Note:** this is a shortened list. For the full list, see the "Changelog" section below

# Breaking changes

## Changed default keybindings:

| Old binding | New binding | Action                     | Reason for the change                                                                                                                                                          |
| ----------- | ----------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Ctrl-x`    | `Ctrl-r`    | Visual history search menu | We replaced the simple history search (previously bound to `Ctrl-r`, `cmd: SearchHistory`) with the menu that supports previewing several entries at once for quick navigation |
| `Ctrl-q`    | `F1`        | Interactive help menu      | `F1` is generally the convention for help information, with this menu you can search for commands browse through their documentation and pick examples to include/run          |

# Looking ahead

Here are a few of the things we're working on:

SQLite based history. This will maintain a larger number of entries that can searched using date, usage or text.

Input/output types. These will allow commands to be specialized based on the input they're given as we well as allow the typechecker to check that commands can connect on the pipeline together.

And more - we're still looking ahead to IDE support, better database support, and more.

# Changelog

## Nushell

- kubouch created [Overlay keep](https://github.com/nushell/nushell/pull/5629), and [Add Nushell REPL simulator; Fix bug in overlay add](https://github.com/nushell/nushell/pull/5478), and created [Overlays](https://github.com/nushell/nushell/pull/5375)
- sophiajt created [Bump to 0.63](https://github.com/nushell/nushell/pull/5627), and [Add environment change hook](https://github.com/nushell/nushell/pull/5600), and [Revert "Try to do less work during capture discovery"](https://github.com/nushell/nushell/pull/5561), and [Try to do less work during capture discovery](https://github.com/nushell/nushell/pull/5560), and [Try removing debuginfo for ci builds](https://github.com/nushell/nushell/pull/5549), and [Allow hooks to be lists of blocks](https://github.com/nushell/nushell/pull/5480), and [Add hooks to cli/repl](https://github.com/nushell/nushell/pull/5479), and [Bump to the 0.62.1 dev version](https://github.com/nushell/nushell/pull/5473)
- sholderbach created [Pin reedline v0.6.0 for the nushell v0.63.0 release](https://github.com/nushell/nushell/pull/5620), and [Add meta command for the config subcommands](https://github.com/nushell/nushell/pull/5616), and [Fallback for `config.buffer_editor` from `EDITOR`](https://github.com/nushell/nushell/pull/5614), and [Refer to the span of `error make` if not given](https://github.com/nushell/nushell/pull/5599), and [Use bleeding edge reedline, with fix for #5593](https://github.com/nushell/nushell/pull/5598), and [Change miette theme based on ANSI config](https://github.com/nushell/nushell/pull/5588), and [Use effectively unlimited history size if not set](https://github.com/nushell/nushell/pull/5587), and [Move help menu to canonical `F1` binding](https://github.com/nushell/nushell/pull/5510)
- WindSoilder created [fix date format](https://github.com/nushell/nushell/pull/5619), and [load config when required](https://github.com/nushell/nushell/pull/5618), and [Make flatten works better and predictable](https://github.com/nushell/nushell/pull/5611), and [adjust flatten default behavior](https://github.com/nushell/nushell/pull/5606), and [Don't report error when cwd is not exists.](https://github.com/nushell/nushell/pull/5590), and [Fix flatten behavior](https://github.com/nushell/nushell/pull/5584), and [add quantile column in histogram ](https://github.com/nushell/nushell/pull/5583), and [fix select tests](https://github.com/nushell/nushell/pull/5577), and [fix move test](https://github.com/nushell/nushell/pull/5576), and [Make format support nested column and use variable](https://github.com/nushell/nushell/pull/5570), and [use reverse iter on value search](https://github.com/nushell/nushell/pull/5553), and [Fix Value::Record compare logic, and pass uniq tests.](https://github.com/nushell/nushell/pull/5541), and [fix zip test](https://github.com/nushell/nushell/pull/5536), and [add rename](https://github.com/nushell/nushell/pull/5534), and [Implement histogram command](https://github.com/nushell/nushell/pull/5518), and [keep metadata while format filesize](https://github.com/nushell/nushell/pull/5502), and [add format filesize](https://github.com/nushell/nushell/pull/5498), and [complete some commands tests](https://github.com/nushell/nushell/pull/5464), and [Document out positional argument type in help message](https://github.com/nushell/nushell/pull/5461), and created [make cd recornize symbolic link](https://github.com/nushell/nushell/pull/5454), and [implement seq char command to generate single character sequence](https://github.com/nushell/nushell/pull/5453)
- hustcer created [fix typo for `version` command](https://github.com/nushell/nushell/pull/5610), and [Fix #5578, assume pipe file be zero-sized](https://github.com/nushell/nushell/pull/5594), and [feat: add `tutor list` support, remove tutor `engine-q`, fix: #4950](https://github.com/nushell/nushell/pull/5511), and [Fix #3899, make `mv` and `rm` to be quiet by default](https://github.com/nushell/nushell/pull/5501), and [opt: improve ls by call get_file_type only one time](https://github.com/nushell/nushell/pull/5500), and [Improve #4975 of filtering `ls` output by size issue](https://github.com/nushell/nushell/pull/5494), and [Fix #5469, making $nothing or null convert to filesize of 0B](https://github.com/nushell/nushell/pull/5485), and [Fix `to csv` and `to tsv` for simple list, close: #4780](https://github.com/nushell/nushell/pull/5483), and [feat: add disable field type inferencing for `from csv` and `from tsv`, fix: #3485 and #4217](https://github.com/nushell/nushell/pull/5467)
- merelymyself created [Allow for test_iteration_errors to work when run as root](https://github.com/nushell/nushell/pull/5609), and [Allows the test `commands::ls::fails_with_ls_to_dir_without_permission` to work when run as root](https://github.com/nushell/nushell/pull/5601), and [Allowing for flags with '=' in them to register as flags.](https://github.com/nushell/nushell/pull/5579), and [Adds fix for when multiple flags are in one line.](https://github.com/nushell/nushell/pull/5493), and created [Fixing the flag issue](https://github.com/nushell/nushell/pull/5447), and [Adds flags and optional arguments to view-source](https://github.com/nushell/nushell/pull/5446)
- Kangaxx-0 created [Add config command](https://github.com/nushell/nushell/pull/5607), and [Add verbose](https://github.com/nushell/nushell/pull/5512), and [Add feedback to cp](https://github.com/nushell/nushell/pull/5482)
- toffaletti created [Add octal binary literals](https://github.com/nushell/nushell/pull/5604)
- victormanueltn created [Add search term to str substring command.](https://github.com/nushell/nushell/pull/5603), and [Add search terms to build-string command.](https://github.com/nushell/nushell/pull/5557)
- LawlietLi created [feat: add search terms to network](https://github.com/nushell/nushell/pull/5602)
- IanManske created [Fix help menu panic.](https://github.com/nushell/nushell/pull/5581)
- jaeheonji created [feat: apply the `--numbered` option to acc in `reduce` command.](https://github.com/nushell/nushell/pull/5575)
- krober created [Add str title-case](https://github.com/nushell/nushell/pull/5573), and [Str casings reorganization &amp; description updates](https://github.com/nushell/nushell/pull/5572)
- fdncred created [move items to showcase](https://github.com/nushell/nushell/pull/5569), and [refactor all `write_all`s to ensure flushing](https://github.com/nushell/nushell/pull/5567), and [make print flush](https://github.com/nushell/nushell/pull/5566), and [table refactor for readability](https://github.com/nushell/nushell/pull/5555), and [add the ability to change table mode when running script](https://github.com/nushell/nushell/pull/5520), and [add `--table_mode` `-m` parameter](https://github.com/nushell/nushell/pull/5513), and [refactor for legibility](https://github.com/nushell/nushell/pull/5503), and [adjust where prompt markers go](https://github.com/nushell/nushell/pull/5491), and [add -n flag to print to print without a newline](https://github.com/nushell/nushell/pull/5458), and [enable cd to work with directory abbreviations](https://github.com/nushell/nushell/pull/5452), and [fix bug in shell_integration](https://github.com/nushell/nushell/pull/5450)
- rgwood created [Revert "Enable backtraces by default (#5562)"](https://github.com/nushell/nushell/pull/5568), and [Upgrade trash dependency](https://github.com/nushell/nushell/pull/5563), and [Enable backtraces by default](https://github.com/nushell/nushell/pull/5562), and [Remove doctests CI action](https://github.com/nushell/nushell/pull/5556), and [CI: bust caches](https://github.com/nushell/nushell/pull/5550), and [Look up git commit hash ourselves, drop libgit2 dependency](https://github.com/nushell/nushell/pull/5548), and [More CI work](https://github.com/nushell/nushell/pull/5527), and [Change history menu keybinding from ctrl+x to ctrl+r](https://github.com/nushell/nushell/pull/5507), and [Enable converting dates to ints](https://github.com/nushell/nushell/pull/5489), and [Parse timestamps as UTC by default](https://github.com/nushell/nushell/pull/5488), and [Display range values better](https://github.com/nushell/nushell/pull/5487), and [Handle int input in `into datetime`](https://github.com/nushell/nushell/pull/5484), and [Enable string interpolation for environment shorthand](https://github.com/nushell/nushell/pull/5463)
- efugier created [feat(errors): more explicit module_or_overlay_not_found_error help me…](https://github.com/nushell/nushell/pull/5564)
- ocitrev created [Sync resources version](https://github.com/nushell/nushell/pull/5554)
- elferherrera created [Lazy dataframes](https://github.com/nushell/nushell/pull/5546), and [join and from derived tables](https://github.com/nushell/nushell/pull/5477), and [Database commands](https://github.com/nushell/nushell/pull/5466)
- herlon214 created [nu-cli/completions: add custom completion test](https://github.com/nushell/nushell/pull/5543), and [nu-glob: add fs::symlink_metadata to detect broken symlinks](https://github.com/nushell/nushell/pull/5537), and [nu-command/filesystem: fix rm .sock file](https://github.com/nushell/nushell/pull/5524), and [nu-cli/completions: verify case for matching dir, .nu, file and command](https://github.com/nushell/nushell/pull/5506), and [nu-cli/completions: add variable completions test + refactor tests](https://github.com/nushell/nushell/pull/5504), and [nu-cli/completions: add tests for flag completions](https://github.com/nushell/nushell/pull/5468), and [nu-cli/completions: add tests for dotnu completions](https://github.com/nushell/nushell/pull/5460), and [nu-cli/completions: send original line to custom completer](https://github.com/nushell/nushell/pull/5459)
- njbull4 created [cp, mv, and rm commands need to support -i flag](https://github.com/nushell/nushell/pull/5523)
- CozyPenguin created [bump umask crate to 2.0.0](https://github.com/nushell/nushell/pull/5514)
- jmoore34 created [Update comment in default_config.nu [skip ci]](https://github.com/nushell/nushell/pull/5496)
- pejato created [Make $nothing | into string == ""](https://github.com/nushell/nushell/pull/5490)
- onthebridgetonowhere created [Fix cp bug](https://github.com/nushell/nushell/pull/5462)
- PurityLake created [Made a change to completion resolution order](https://github.com/nushell/nushell/pull/5440)
- gipsyh created [Add split number flag in `split row`](https://github.com/nushell/nushell/pull/5434)

## Documentation

- sholderbach created [Remove outdated reference to `open` pager](https://github.com/nushell/nushell.github.io/pull/446), and [Document the octal binary literals](https://github.com/nushell/nushell.github.io/pull/445), and [Mention default values for command parameters.](https://github.com/nushell/nushell.github.io/pull/434)
- unional created [docs: add `pwd` to `coming_from_bash.md`](https://github.com/nushell/nushell.github.io/pull/444)
- hustcer created [Update zh-CN home page and keep the Chinese and English docs in sync](https://github.com/nushell/nushell.github.io/pull/443), and [Update some zh-CN translations from commit: 008c89fc26](https://github.com/nushell/nushell.github.io/pull/442), and [Update some zh-CN translatons from commit: 6f61fadb69](https://github.com/nushell/nushell.github.io/pull/438)
- rgwood created [Update front page](https://github.com/nushell/nushell.github.io/pull/441)
- mdmundo created [Update windows_terminal_default_shell.sh](https://github.com/nushell/nushell.github.io/pull/440)
- kubouch created [Add env.nu to env conversions section](https://github.com/nushell/nushell.github.io/pull/439), and [Document config as environment variable](https://github.com/nushell/nushell.github.io/pull/437)
- TaKO8Ki created [Translate `/ja/README.md` to Japanese](https://github.com/nushell/nushell.github.io/pull/436)
- flying-sheep created [Document $in](https://github.com/nushell/nushell.github.io/pull/435)

## Nu_Scripts

- thibran created [Misc tools](https://github.com/nushell/nu_scripts/pull/229)
- Suyashtnt created [feat(custom-completions): add yarn completion](https://github.com/nushell/nu_scripts/pull/228)
- sophiajt created [update nu weekly script](https://github.com/nushell/nu_scripts/pull/227)
- fdncred created [add html colors](https://github.com/nushell/nu_scripts/pull/226), and [add progress bar examples + some benchmarks](https://github.com/nushell/nu_scripts/pull/224), and [help with pr](https://github.com/nushell/nu_scripts/pull/220), and [remove title because it breaks kitty](https://github.com/nushell/nu_scripts/pull/215)
- Yethal created [Update remoting.nu](https://github.com/nushell/nu_scripts/pull/225), and [Added remoting.nu](https://github.com/nushell/nu_scripts/pull/222)
- Jacobious52 created [Auto generation completion help parser](https://github.com/nushell/nu_scripts/pull/223)
- kurokirasama created [added maths, defs and weather scripts](https://github.com/nushell/nu_scripts/pull/217)
- drbrain created [Allow relative entries in CDPATH](https://github.com/nushell/nu_scripts/pull/216)

## reedline

- sholderbach created [Prepare the v0.6.0 release](https://github.com/nushell/reedline/pull/430), and [Do not allocate eagerly for full history capacity](https://github.com/nushell/reedline/pull/427), and [Start developer documentation](https://github.com/nushell/reedline/pull/424)
- petrisch created [Typo](https://github.com/nushell/reedline/pull/429)
- ahkrr created [fix: list_menu not accounting for index + indicator](https://github.com/nushell/reedline/pull/428)
- sadmac7000 created [Fix vi-mode word motions](https://github.com/nushell/reedline/pull/425)
- DhruvDh created [Use a default terminal size if reported terminal size is 0, 0](https://github.com/nushell/reedline/pull/402)

Chunks
5d248d11 (1st chunk of `blog/2022-05-24-nushell_0_63.md`)
0533d77f (2nd chunk of `blog/2022-05-24-nushell_0_63.md`)
cae89d4e (3rd chunk of `blog/2022-05-24-nushell_0_63.md`)
55f7098e (4th chunk of `blog/2022-05-24-nushell_0_63.md`)
9400d850 (5th chunk of `blog/2022-05-24-nushell_0_63.md`)
f0d9c347 (6th chunk of `blog/2022-05-24-nushell_0_63.md`)
0d4d1659 (7th chunk of `blog/2022-05-24-nushell_0_63.md`)
dfd12bd2 (8th chunk of `blog/2022-05-24-nushell_0_63.md`)