Nushell
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub

Nushell 0.67

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.67 of Nu. This is release includes a new variable naming convention, improvements to module imports and file sourcing, and more.

Where to get it

Nu 0.67 is available as pre-built binaries or from crates.io. 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

We have a new welcome banner (fdncred)

New Nushell banner

You can disable the banner using the config nu command to modify the config.nu file, just set show_banner to false:

let-env config {
    show_banner: false
    ...
}

New variable naming convention (sophiajt)

WARNING! Breaking change!

In this release, we cleaned up some of the syntax parsing. The major implication of it is that variable names can no longer contain - characters in it. Make sure to rename your variables from kebab-case to snake_case. This is true also for variables created from command flags. For example, a --foo-bar flag in a command signature will be referenced by a $foo_bar variable.

Relative paths in scripts are file-relative (kubouch)

When you use source, use, or overlay add with a relative path in a script or a module file, the path is assumed to be relative to the file, not the current working directory.

Example:

# script.nu

use foo.nu *  # foo.nu is assumed to be relative to script.nu

Writing SQLite files (fdncred)

We added a fun way to create SQLite databases:

# create a database with a single table named `main`
ls | into sqlite my_ls.db

# same, but name the table `foo`
ls | into sqlite my_ls.db -t foo

Previously Nushell was limited to reading SQLite database files. Now we allow you to take tables or lists and create database files like ls | into sqlite my_ls.db. Currently this functionality works with regular table output from commands, table literals like [[col1 col2]; [a b] [c d]] and lists like [one 10mib 20sec 2 2.5].

Shell integration (fdncred and Tyriar)

@fdncred worked with @Tyriar from the Visual Studio Code team on shell integration. Now Nushell will display round blue/red/gray decorations indicating the start of commands in the VS Code terminal:

VS Code decorations

Error Messages (rgwood)

new command not found error message

The error message when an external command is not found has been improved. Nu now displays fancy miette errors on all platforms including Windows, and it offers helpful suggestions for typos and mistaken command names.

Windows cmd.exe changes (rgwood)

Potentially breaking change: Nu no longer "shells out" to cmd.exe for any command that can't be found - only a few known cmd.exe internal commands. This change improves error handling and error messages, but let us know if it causes you any trouble.

Bits and Bytes (hustcer and WindSoilder)

Nushell now has a full array of bits and bytes commands for working with binary data. @hustcer and @WindSoilder implemented the following:

  • bits ror and bits rol
  • bits shl and bits shr
  • bits or and bits xor
  • bits root command and bits and
  • bits not

Hiding Environment Variables (kubouch)

A new hide-env command is added that can hide environment variables in the current scope. hide still retains this functionality, but in the future, we expect hide to be able to hide only parser definitions (commands and aliases). It is therefore recommended to change your hide calls to hide-env when dealing with environment variables.

Unlike hide, hide-env has a slightly different signature: It accepts multiple arguments and the arguments can be constructed dynamically:

> load-env {
    ENV_FOO: 'foo'
    ENV_BAR: 'bar'
}

> let prefix = 'ENV_'

> hide-env ($prefix + 'FOO') ($prefix + 'BAR')

Prefixed Overlays (kubouch)

The overlay add spam command would take all commands and aliases from the module and put them directly into the current namespace. Sometimes, however, you might want them behind a prefix. That's what --prefix is for. Here is an example:

> module spam {
    export def foo [] { "foo" }
}

> overlay add --prefix spam

> spam foo
foo

Customize Added Overlay Name (kubouch)

You can now change the name of the added overlay using the new as keyword:

> module spam { export def foo [] { "foo" } }

> overlay add spam as eggs

> overlay list | last
eggs

> foo
foo

> overlay remove eggs

This can be useful if you have a generic script name, such as virtualenv's activate.nu but you want some more descriptive name for your overlay.

It is also compatible with the --prefix flag introduced above.

Next Steps

Time for a new engine!

We've been looking through the fixes we'd need for some of the issues we're seeing and decided Nushell's core needs a thorough refactor. On this Notion page we started gathering ideas and design notes about features that we think should make it to the update. You can click the cards and they should expand into more detailed notes.

Many (most?) ideas are not polished yet and we need to work on the full design before we start the implementation. Therefore, we would like you to invite you to participate in the discussion. If you have questions, comments and ideas, please channel them to our #design-discussion channel on our Discord. We especially welcome thorough design writeups. You can even "adopt" a topic and specialize in it, if you wish. And of course, later, we'll need help implementing everything.

By the end of this, we'll be heading towards 0.80 which should have all, or most of, the features we want for 1.0 and the work from 0.80 to 1.0 is expected to be mostly polish, bugfixes, IDE integrations, stabilizing the language, etc.

Oh, and if you're scared this will turn into another engine-q, this time our goal is to try to make the updates incrementally instead of building a new Nushell on the side and then replacing everything.

Full changelog

Nushell

  • sophiajt created bump to 0.67, and Fix intermittent test crash, and bump dev version ahead of language changes, and Move ls back to last-known-good state, and Revert cp and mv back to last-known-good state
  • skelly37 created Bug issue template
  • sholderbach created Update to reedline 0.10.0, and Update reedline to improved undo-system, and Clippy fix for Rust 1.63, and Reduce dev-deps by narrowing rstest features, and Make open test independent of locale, and Patch lscolors to not blink, and Update crossterm to version 0.24
  • elferherrera created lazy dataframe reader, and Polars upgrade 0.23, and sqlite query without collect, and use from table to remove into-db command, and maintain quotes for arguments
  • amtep created Add repository info to all workspace crates
  • rgwood created Bump chrono dependency to fix panic, and run_external: only suggest alternatives when file not found, and Clarify external command error, and Fix unused import warning on Linux+Mac, and Temporary: ignore Windows tests that fail on a local machine, and Support running batch files without typing their extension, and Clean up deprecated commands, and Suggest alternative when command not found, and Windows: only shell out to cmd for specific commands, and Faster SQLite reads, and Change query command to query db, and Add $OLDPWD example for cd
  • kubouch created Add 'as' keyword to 'overlay add', and Add hide-env to hide environment variables, and Fix environment merging in hooks, and Allow overlays to import prefixed definitions, and Fix file lookup in parser keywords; Refactor nu_repl, and Quickly patch wrong 'export' command name, and Allow modules to use other modules
  • andrasio created cmd(df/first): returns the first row by default.
  • WindSoilder created make date format supports locale, and not resolve symlink, and when spawned process during register plugin, pass env to child process, and add -n for path expand, so it doesn't follow symlink, and fix python plugin example, and In unix like system, set foreground process while running external command, and Make default env works better with bash style PATH, and Add bits not command
  • fdncred created make ci use rust-toolchain.toml, and add rust toolchain file to pin rust version, and update build scripts, and Revert "Allow using the system's copy of zstd for Polars", and update a few nushell dependencies, and remove sharkdp's lscolors repo again, and add search terms to ignore command, and bump lscolors to v12.0, and escape single quotes and remove ansi escape sequences, and new command into sqlite allows you to take lists and create a sqlite database, and add more verbose error messages to mv, and point to the latest main branch for lscolors, and remove the nana filename string, add some exclusions to gitignore, and replace the regex crate with the fancy-regex crate, and allow uppercase chars to be captured during suppressed input, and add a new welcome banner to nushell, and move application reset mode ansi sequence after cmdline execute
  • nibon7 created Add custom log target to debugging tips, and Fix panic when building without git, and Fix color settings for logger, and Return error when moving a source directory to a target directory whi…, and Replace pretty_env_logger with simplelog, and Refactor shell listing related code, and Refactor shell switching related code, and Make g - switch to the last used shell , and export get_shells and get_current_shell, and Fix color parsing, and Return error early if seconds part of timestamp is invalid, and Fix touch panics when using invalid timestamp, and Fix path_contains_hidden_folder, and Prevent mv panic again, and Prevent mv panic
  • merelymyself created fix examples and let into decimal convert bools too, and make cd, cp, ls, mv, open and rm automatically strip ansi codes, and allow -h flags for export subcommands, and adds a config reset command
  • Kangaxx-0 created Fix issue 6223, and Tweak how nu identifies custom command
  • hustcer created upgrade chrono to v0.4.20, and Some code refactor for shells related commands, and add bits ror and bits rol commands, and Add bits shl and bits shr command, and Add bits or and bits xor command, and Add bits root command and bits and command, and bump to 0.66.3 dev version
  • winterqt created Allow using the system's copy of zstd for Polars
  • x3rAx created Add decimals to int when using into string --decimals

Extension

  • fdncred created one last tweak before release, and prepare for new release, and update gitignore
  • Yethal created Updated patterns and added generation script

Documentation

  • amtoine created FIX: there is a minor typo in the modules page, and FIX: update the links to the default config files
  • johnae created Update direnv.md, and Update config.js/cookbook with direnv example, and Create direnv.md
  • azzamsa created docs: fix grammar error, and docs: contributing workflow is outdated, and fix: all clickable items should have the same color
  • kubouch created Document hide-env and overlay additions
  • willemneal created chore: small edit
  • jeremiahpslewis created Update links to config template
  • rgwood created Document SQLite data loading, and Explain how to launch Nu after installing
  • petrisch created DE Translation for Coloring and Theming
  • fdncred created update gitignore

Nu_Scripts

  • johnae created Update direnv example to run in pre_prompt rather than env_change, and Add direnv config example.
  • fantasyzhjk created add rbenv script
  • fdncred created update some scripts from dash to underscore, add 20k_club script, and update gitignore, and winget: switch kebab case parameters to snake case
  • WindSoilder created Migrate some scripts to fit new variable and arguments naming style
  • skelly37 created Unspanned error

reedline

  • sholderbach created Prepare 0.10.0 release, and Clippy fix for tests, and Reduce dev-deps by narrowing rstest features, and Export the crossterm key types, and Update crossterm to 0.24
  • morzel85 created Ctrl+h edit binding moved from emacs to common
  • bnprks created Improve undo functionality, and Vi mode add support for d0, d^, c0, and c^
  • fdncred created update gitignore
Edit this page on GitHub
Contributors: Jakub Žádník, fdncred, Reilly Wood, hustcer, Stefan Holderbach, jntrnr, Justin Ma, sophiajt