---
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)