Nushell 0.90.1

Nushell, or Nu for short, is a new shell that takes a modern, structured approach to your command line. 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 command line pipelines.

Today, we're releasing version 0.90.1 of Nu. This release adds new completion menu improvements, unifies how globbing works across commands, and improves many existing commands.

Where to get it

Nu 0.90.1 is available as pre-built binariesopen in new window or from crates.ioopen in new window. If you have Rust installed you can install it using cargo install nu.

Note

The optional dataframe functionality is available by cargo install nu --features=dataframe.

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

Table of content

Themes of this release / New features [toc]

New Reedline coolness

We have some exciting new improvements in our line editor, thanks to unprecedented number of contributionsopen in new window since the last release.

First, the matching prefix of a completion is now highlighted (note that this doesn't work with fuzzy completions yet):

image

Second, completion menus now have more of an IDE feel to them (activated by Ctrl+N) #11593open in new window

image

Third, shift navigation (#11535open in new window) now allows selecting and pasting text by holding the Shift key:

select2

All the new changes are configurable: See the changes to the default config fileopen in new window (if the link does not bring you to the default_config.nu file, click the "Files changed" tab, then search for "default_config.nu" and open the diff) to see what has changed.

(Breaking Change!) Handling globs

From this release, we unified glob rules for the following commands: open, rm, cp, umv, mv, du, ls (#11621open in new window).

The general rules is: If given parameter is quoted by single quote(') or double quote("), don't auto-expand the glob pattern (#11569open in new window). If not quoted (or using backtick quote`), the glob pattern is auto-expanded.

So if you have the following files: aac.txt, abc.txt, a[ab]c.txt, then:

  • ls a[ab]c.txt matches aac.txt, abc.txt
  • rm "a[bc]c.txt" removes a file named a[bc]c.txt
  • ls C:\Program Files\a[ab]c.txt matches aac.txt, abc.txt

But if you save a file name in a variable, e.g: let f = "a[ab]c.txt", then ls $f matches aac.txt, abc.txt. To escape the glob pattern to match a file named a[bc]c.txt, str escape-glob comes to play: ls ($f | str escape-glob).

The new str escape-glob command (#11663open in new window) is useful when you want to prevent globs from expanding, for example when using a closure: ls | str escape-glob name | each {|it| ls $it.name }, so you won't get error occasionally.

(Breaking Change!) For existing plugin

Nushell allows plugins to receive configuration from the nushell configuration #10955open in new window, the communication protocol between nushell and plugin have changed to achieve the behavior. So plugins need to update nu-plugin dependency version and recompile it to make plugin works again.

Starting a new Language Referenceopen in new window

Recently, we started a new reference page for Nushell language and its features. For years, we have used the current bookopen in new window as both a reference point for Nushell's features and a tutorial. The result is that it is too verbose to be used as a quick reference page, and due to its exhaustiveness it is also hard to keep concise as a tutorial. The story-like writing style makes it also harder to keep up to date. Over time, we hope to offload content from the book to the reference page that should be less verbose and easier to update. At the same time, we aim to refactor the book into more of a tutorial style and make it more coherent. Practical recipes for solving common problems continue being collected in the cookbookopen in new window.

Parse-time evaluation

String interpolation can be now performed at parse time #11562open in new window. This gives you another way to, for example, compose files for importing or sourcing, for example:

const name = "spam"
use ($nu.default-config-dir | path join $"($name).nu")

The ansi commands now can also be evaluated at parse time: #11682open in new window

Integration of more uutilsopen in new window commands

Continuing our cooperation with uutils, we now have a new umv command, implemented by uutils, which will replace our current mv #10822open in new window.

Our old-cp was also removed #11622open in new window and now we rely solely on cp from uutils

Dataframes: allow specifying schema (#11634open in new window)

The dfr into-df command can now accept a schema. A new dfr schema command can be used to view the schema:

> {a:1, b:{a:2}} | dfr into-df -s {a: u8, b: {a: i32}} | dfr schema
╭───┬─────────────╮
│ a │ u8          │
│   │ ╭───┬─────╮ │
│ b │ │ a │ i32 │ │
│   │ ╰───┴─────╯ │
╰───┴─────────────╯

New CLI flag: --no-history (#11550open in new window)

If nushell is launched with the --no-history CLI flag, then command history file will not be read from or written to. You can check whether history is enabled using $nu.history-enabled. It will be false if --no-history was provided and true otherwise.

Strict JSON parsing (#11592open in new window)

The from json command now has a --strict flag which will error on invalid JSON. For example, comments and trailing commas are not allowed in JSON, and so will trigger an error with the --strict flag.

Our set of commands is evolving [toc]

As usual, new release rhyms with changes to commands!

New commands [toc]

Apart from commands already mentioned above, into cell-pathopen in new window can now be used to create cell paths dynamically.

Breaking changes [toc]

Full changelog [toc]

authortitlepr
@kubouchopen in new windowBump to dev version 0.89.1#11513open in new window
@cridesopen in new windowpath exists: Empty path shouldn't be marked as exists#11515open in new window
@NotLebedevopen in new windowFix incorrect handling of boolean flags for builtin commands#11492open in new window
@fdncredopen in new windowbump to reedline latest main#11520open in new window
@ysthakuropen in new windowMake only_buffer_difference: true work#11488open in new window
@schrieveslaachopen in new windowFix "Char index out of bounds" Error#11526open in new window
@fdncredopen in new windowupdate nushell to latest reedline main after pr revert#11528open in new window
@WindSoilderopen in new windowadd type check during eval time#11475open in new window
@NotLebedevopen in new windowAdd file attribute handling flag to cp#11491open in new window
@fdncredopen in new windowupdate query web param --as-table from Table to List#11531open in new window
@abuschopen in new windowFix commandline --cursor-end#11504open in new window
@SUPERCILEXopen in new windowShow last command and running commands in title with shell_integration#11532open in new window
@atahabakiopen in new windowcheck existence w/o traversing symlinks#10872open in new window
@NotLebedevopen in new windowSupport for disabling automatic escaping in to xml#11536open in new window
@nibon7open in new windowApply nightly clippy fixes#11508open in new window
@WindSoilderopen in new windowadjust some commands input_output type#11436open in new window
@drbrainopen in new windowAllow plugins to receive configuration from the nushell configuration#10955open in new window
@IanManskeopen in new windowDo not block signals for child processes#11402open in new window
@dead10ckopen in new windowFix memory consumption of into sqlite#10232open in new window
@flying-sheepopen in new windowFix deprecation in default_config.nu#11547open in new window
@DonSheddowopen in new windowAllow tables and records as input to math commands#11496open in new window
@h7kannaopen in new windowFix tarpaulin skip attribute to latest#11552open in new window
@IanManskeopen in new windowAdd CLI flag to disable history#11550open in new window
@abuschopen in new windowfix: items doesn't support lazy records#11567open in new window
@dmatos2012open in new windowInitial implementation of umv from uutils#10822open in new window
@michel-slmopen in new windowReplace htmlescape with v_htmlescape#11572open in new window
@WindSoilderopen in new windowSend only absolute paths to uu_mv#11576open in new window
@NotLebedevopen in new windowAdd self-closed tag support for to xml#11577open in new window
@MarikaChlebowskaopen in new windowFix parsing of strings with special characters#11030open in new window
@fdncredopen in new windowupdate deps calamine and quick-xml#11582open in new window
@Tastaturtasteopen in new windowAdd shift + navigation functionality through reedline#11535open in new window
@maxomatic458open in new windowupdate reedline#11589open in new window
@maxomatic458open in new windowIDE style completion#11593open in new window
@stormasmopen in new windowupdate Cargo.lock with the latest reedline#11594open in new window
@yukitomodaopen in new windowAllow string to copmpare with another string#11590open in new window
@fdncredopen in new windowallow math avg to work with durations#11598open in new window
@WindSoilderopen in new windowdo not attempt to glob expand if the file path is wrapped in quotes#11569open in new window
@ysthakuropen in new windowUpgrade byte-unit from 4.0 to 5.1#11584open in new window
@ysthakuropen in new windowEvaluate string interpolation at parse time#11562open in new window
@ysthakuropen in new windowFix regression in help menu introduced by #11488#11608open in new window
@nibon7open in new windowRemove duplicate which 4.4.2#11613open in new window
@NotLebedevopen in new windowPlugin explicit flags#11581open in new window
@fdncredopen in new windowremove cp-old#11622open in new window
@cridesopen in new windowresolving external highlight should take current PATH into account#11618open in new window
@nibon7open in new windowBump polars from 0.35 to 0.36#11624open in new window
@Hofer-Julianopen in new windowAdapt tests for internationalization#11628open in new window
@andrei-27open in new windowAdded --index flag to input list#11580open in new window
@drbrainopen in new windowAdd into cell-path for dynamic cell-path creation#11322open in new window
@stormasmopen in new windowupdate nu-ansi-term to 0.50, lscolors to 0.17, and add the Style attribute to Suggestion#11635open in new window
@WindSoilderopen in new windowRemove --flag: bool support#11541open in new window
@cridesopen in new windowproperly convert env for buffer editor#11636open in new window
@amtoineopen in new windowhide std testing#11331open in new window
@fdncredopen in new windowcleanup hide testing PR#11638open in new window
@rsteubeopen in new windowexternal completer: support style#11442open in new window
@amtoineopen in new windowfix spreading of arguments to externals in toolkit#11640open in new window
@davehorneropen in new windowfix panic caused by ls \\.\pipe#10558open in new window
@WindSoilderopen in new windowUnify glob behavior on open, rm, cp-old, mv, umv, cp and du commands#11621open in new window
@WindSoilderopen in new windowmaking empty list matches list<int> types#11596open in new window
@fdncredopen in new windowmake the input_output_types match on each and par-each#11645open in new window
@stormasmopen in new windowupdate Reedline so we can begin testing the menu refactor#11647open in new window
@amtoineopen in new windowadd $.extra_usage to modules#11649open in new window
@WindSoilderopen in new windowfix force rm: should suppress error if directory is not found#11656open in new window
@stormasmopen in new windowBump Reedline for the Menu Refactor#11658open in new window
@KAAtheWiseGitopen in new windowFix wrong error for raw streams in into record#11668open in new window
@WindSoilderopen in new windowadd str escape-glob command#11664open in new window
@maxomatic458open in new windowadd match-text style + config setting for ide menu#11670open in new window
@davehorneropen in new windowuse constant instead of <0 for ls fix#11642open in new window
@fdncredopen in new windowupdate to latest reedline for the quick completions fix#11673open in new window
@ayax79open in new windowThe ability to specify a schema when using dfr open and dfr into-df#11634open in new window
@sophiajtopen in new windowFix precedence of 'not' operator#11672open in new window
@ayax79open in new window"[11611] fixing dataframe column comparisons"#11676open in new window
@ysthakuropen in new windowRespect SyntaxShape when parsing spread operator#11674open in new window
@Geox644open in new windowHighlights find upgrade#11509open in new window
@IanManskeopen in new windowStrict JSON parsing#11592open in new window
@WindSoilderopen in new windowfix exit_code handling when running a scripts with ctrlc#11466open in new window
@IanManskeopen in new windowRefactor lines command#11685open in new window
@fdncredopen in new windowmake the ansi command const#11682open in new window
@fdncredopen in new windowchange update cells column param from Table to List#11691open in new window
@nibon7open in new windowBump wayland#11694open in new window
@fdncredopen in new windowrollback polars 0.37.0#11695open in new window
@rtpgopen in new windowTidy up the REPL main loop#11655open in new window
@richardwesthaveropen in new windowAllow 'url join' to print username without password#11697open in new window
@WindSoilderopen in new windowcp: expand target path before checking#11692open in new window
@hustceropen in new windowDisable riscv64 build target temporarily to make release and nightly-build work#11700open in new window
@fdncredopen in new windowupdate query web wiki example#11709open in new window
@fdncredopen in new windowupdate to latest reedline after column menu fix#11715open in new window
@kik4444open in new windowquery web --query should return list<list<string>> like the scraper crate's ElementRef::text()#11705open in new window
@kubouchopen in new windowTighten def body parsing#11719open in new window
@kubouchopen in new windowFix panic in rotate; Add safe record creation function#11718open in new window
@fdncredopen in new windowallow strings with thousands separators to be converted to filesize or ints#11724open in new window