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

Today, we're releasing version 0.101.0 of Nu. This release adds a simplified startup configuration, several new commands, and additional tools to introspect the Nushell engine.

Where to get it

Nushell 0.101.0 is available as pre-built binaries or from crates.io. If you have Rust installed, you can also install it using cargo install nu.

As part of this release, we also publish a set of optional plugins you can install and use with Nushell.

Table of contents

  • Highlights and themes of this release
    • Simplified Startup Configuration
      • Related Startup Config Changes
      • Breaking Startup Config Changes
  • Changes
    • Additions
      • path self
      • chunk-by
      • term query
      • merge deep
      • utouch
      • WASM support
      • sys net columns
      • Raw string pattern matching
      • Duration/Date Arithmetic
      • explore keybinds
      • Version in Startup banner
      • input --default
      • PowerShell script invocation on Windows
      • New introspection tools
    • Breaking changes
      • ++ operator
      • Stricter command signature parsing
      • group-by
      • timeit
      • sys cpu
      • from csv and from tsv
      • std/iter scan
      • Completion sorting
      • Import module naming
      • table formatting and the display_output hook
      • du flag changes
      • Code specific environment variables updated during source
    • Deprecations
      • split-by
      • date to-record and date to-table
      • do --ignore-shell-errors and --ignore-program-errors
    • Removals
      • NU_DISABLE_IR
    • Bug fixes and other changes
      • ls
      • SHLVL
      • from commands
      • Completions on custom commands
      • seq char
      • http multipart
      • scope variables
      • help system
  • Notes for plugin developers
  • Hall of fame
  • Full changelog

Highlights and themes of this release [toc]

Simplified Startup Configuration [toc]

With #14249, Nushell now always loads its internal default_env.nu before the user env.nu is loaded, then loads the internal default_config.nu before the user's config.nu is loaded. This allows for a simpler user-configuration experience. Details are in this blog entry along with an updated Configuration Chapter which should go live sometime today.

Related Startup Config Changes [toc]

  • #14345: Hooks fields are non-optional
  • #14341: Hooks now default to an empty value of the proper type (e.g., [] or {}) when not otherwise specified. This means that you can always safely append or merge a new hook without first needing to check if it was a valid list/record.
  • #14435: An $env.config is always created at startup, populated with default values, even when no configuration files are loaded.
  • #14549: The const version of NU_LIB_DIRS is now populated by default instead of $env.NU_LIB_DIRS.
  • #14553: The const version of NU_PLUGIN_DIRS is now populated by default instead of $env.NU_PLUGIN_DIRS.
  • #14566: ENV_CONVERSIONS is now an empty record by default. The PATH/Path conversions are handled internally.
  • #14579: More defaults are set in Rust. Also sets a default, empty TRANSIENT_PROMPT_COMMAND_RIGHT and TRANSIENT_PROMPT_MULTILINE_INDICATOR.

Breaking Startup Config Changes [toc]

There may be (hopefully) minor breaking changes due to the startup configuration handling. Known possible issues include:

  • Cannot merge changes to default menus since their definitions are no longer in config.nu by default. Instead, the entire menu should be redefined.
  • Querying the $env.NU_LIB_DIRS will return an empty result by default. Query the constant $NU_LIB_DIRS instead.

Changes [toc]

Additions [toc]

path self [toc]

Thanks to @Bahex in #14303, this release adds the path self command. path self is a parse-time only command for getting the absolute path of the source file containing it, or any file relative to the source file.

const this_file = path self
const this_directory = path self .

chunk-by [toc]

This release adds a new chunk-by command which will split a list into chunks based on a closure. The closure is applied to each element of the input list, and adjacent elements that share the same closure result value will be chunked together. This command was added in #14410 thanks to @cosineblast.

# chunk by a predicate
[1 3 -2 -2 0 1 2] | chunk-by {|x| $x >= 0 }
# [[1 3] [-2 -2] [0 1 2]]

# chunk duplicate, adjacent elements together
[a b b c a a] | chunk-by { $in }
# [[a] [b b] [c] [a a]]

term query [toc]

Thanks to @Bahex in #14427, this release adds the term query command. term query allows sending a query to your terminal emulator and reading the reply.

# Get cursor position
term query (ansi cursor_position) --prefix (ansi csi) --terminator 'R'

# Get terminal background color.
term query $'(ansi osc)10;?(ansi st)' --prefix $'(ansi osc)10;' --terminator (ansi st)

# Read clipboard content on terminals supporting OSC-52.
term query $'(ansi osc)52;c;?(ansi st)' --prefix $'(ansi osc)52;c;' --terminator (ansi st)

merge deep [toc]

To merge nested record structures we now have merge deep as a subcommand of merge which only operates on the flat structure of tables.

Here you can see how it is used to update a record with fields from a given record, by either adding the fields or replacing those leaf nodes that share a common cellpath.

{a: {foo: 123 bar: "overwrite me"}, b: [1, 2, 3]} | merge deep {a: {bar: 456, baz: 789}, b: [4, 5, 6]}
# => ╭───┬───────────────╮
# => │   │ ╭─────┬─────╮ │
# => │ a │ │ foo │ 123 │ │
# => │   │ │ bar │ 456 │ │
# => │   │ │ baz │ 789 │ │
# => │   │ ╰─────┴─────╯ │
# => │   │ ╭───┬───╮     │
# => │ b │ │ 0 │ 4 │     │
# => │   │ │ 1 │ 5 │     │
# => │   │ │ 2 │ 6 │     │
# => │   │ ╰───┴───╯     │
# => ╰───┴───────────────╯

While the record entries get updated based on the path, by default lists at a given path are updated by replacement.

merge deep also has different strategies for merging inner lists and tables. For example, you can use the append strategy to merge the inner b list instead of overwriting it.

{a: {foo: 123 bar: "overwrite me"}, b: [1, 2, 3]} | merge deep --strategy=append {a: {bar: 456, baz: 789}, b: [4, 5, 6]}
# => ╭───┬───────────────╮
# => │   │ ╭─────┬─────╮ │
# => │ a │ │ foo │ 123 │ │
# => │   │ │ bar │ 456 │ │
# => │   │ │ baz │ 789 │ │
# => │   │ ╰─────┴─────╯ │
# => │   │ ╭───┬───╮     │
# => │ b │ │ 0 │ 1 │     │
# => │   │ │ 1 │ 2 │     │
# => │   │ │ 2 │ 3 │     │
# => │   │ │ 3 │ 4 │     │
# => │   │ │ 4 │ 5 │     │
# => │   │ │ 5 │ 6 │     │
# => │   │ ╰───┴───╯     │
# => ╰───┴───────────────╯

This command is the work of a productive collaboration by @132ikl and @Bahex.

utouch [toc]

This release adds the new utouch command, utilizing uutils/coreutils! In addition to all the flags of touch, utouch also has a --timestamp and --date flag to specify the timestamp to use. Eventually, the utouch command will replace the touch command.

WASM support [toc]

Nushell used to have WASM support a while back, but at some point became incompatible with WASM. Thanks to the amazing work of @cptpiepmatz in #14418, Nushell can now be compiled to WASM again! In order to do so, certain (cargo) features have to be disabled meaning certain commands (like filesystem commands) will not be available.

sys net columns [toc]

Thanks to @rfaulhaber in #14389, the sys net command now has two additional columns. One is the mac column which lists mac address. The other is the ip column which lists the address(es) for each network interface.

Raw string pattern matching [toc]

With this release, raw strings can now be used as match patterns thanks to @sgvictorino in #14573.

match 'foo' {
    r#'foo'# => true
    _ => false
}

Duration/Date Arithmetic [toc]

With #14295, dates can now be added to durations. Previously only durations could be added to dates.

explore keybinds [toc]

In #14468 thanks to @paulie4, more default keybindings were added to explore to better match less.

Version in Startup banner [toc]

With #14625, the Nushell version now displays at startup in the banner.

input --default [toc]

Thanks to @WindSoilder in #14374, the input command now has a --default parameter to set a default value when none is provided in the input.

PowerShell script invocation on Windows [toc]

With #14379 by @fdncred we now launch PowerShell scripts with a .ps1 extension directly through powershell.exe. This behavior follows the same logic we offer for scripts launched by cmd.exe.

New introspection tools [toc]

@fdncred added a series of new tools permitting you to inspect internals of Nushell's engine for better understanding or debugging. We hope you can put them to good use to drill down into bugs or to learn more how the Nushell engine understands a piece of code or represents your current state. As they refer to the engine internals we still want to actively evolve their output or behavior may change as we continue development. So don't depend on them in scripts but feel free to use them to diagnose issues or learn about the behavior of the current version.

view source now supports internal IDs

To access the content of closures or other code view source can now accept an integer ID which represents the internal BlockId to access the code stored there. This is useful whenever our output provided you with <Closure {BlockID}>. For closures stored in a variable you can still access it directly via view source.

view blocks

This new commands lists the raw code blocks as stored in the engine after parsing including block_id, source code, and spans.

ast --flatten

The ast command can now also output the flattened and simplified representation of the AST used by syntax highlighting and some of the completion logic. This is accessible through the --flatten flag.

config flatten

To see the whole configuration in a simplified representation, especially to spot differences between different user configurations, config flatten provides a simplified view that is not nested like $env.config. Note that this output is not directly compatible with the config record and may not have the correct types.

Breaking changes [toc]

++ operator [toc]

The ++ operator previously performed both appending and concatenation.

# Appending
[1 2 3] ++ 4 == [1 2 3 4]

# Concatenation
[1 2 3] ++ [4 5 6] == [1 2 3 4 5 6]

This created ambiguity when operating on nested lists:

[[1 2] [3 4]] ++ [5 6]
# Should this be [[1 2] [3 4] [5 6]] or [[1 2] [3 4] 5 6] ?

Additionally, the ++= operator was able to change the type of a mutable a due to its dual role:

mut str: string = 'hello '
($str | describe) == string

$str ++= ['world']
($str | describe) == list<string>

After #14344, the ++ operator now only performs concatenation (between lists, strings, or binary values). To append a value to a list, either wrap the value in a list or use the append command.

mut list = [1 2]
$list ++= [3]
$list = $list | append 4

Stricter command signature parsing [toc]

Input/output types

Previous versions of Nushell would fail to parse input/output types on custom commands in some cases. However, a parse error would not be shown, making these silent parse errors.

# These input/output types are not valid, but no error would be shown:
def some_cmd [] -> string { '' }
def some_cmd [] : string { '' }

# Since the input/output types failed to parse, then this code would fail only at runtime:
(some_cmd) + 1

Thanks to @ratherforky, this has been fixed in #14510. Invalid input/output types will now cause an error to be shown at parse-time.

# The custom commands above will now cause a parse error and should instead be:
def some_cmd []: any -> string { '' }
def some_cmd [] : any -> string { '' }

# This will now fail at parse-time due to type checking, before any user code is run:
(some_cmd) + 1

Custom command arguments

This release also makes the parsing for custom command arguments more strict thanks to @sgvictorino in #14309. For example, a colon (:) without a corresponding type is now an error. Below are some more examples of code snippets which are now parse errors.

# expected parameter or flag
def foo [ bar: int: ] {}

# expected type
def foo [ bar: =  ] {}
def foo [ bar: ] {}

# expected default value
def foo [ bar = ] {}

group-by [toc]

Thanks to @Bahex in #14337, the group-by command now supports grouping by multiple criteria (henceforth referred to as a grouper). When using multiple groupers, the output is in the form of nested records.

let data = [
    [category color name];
    [fruit red apple]
    [fruit red strawberry]
    [vegetable red tomato]
    [fruit orange orange]
    [vegetable orange carrot]
    [vegetable orange pumpkin]
]

$data | group-by color category
╭────────┬───────────────────────────────────────────────────────╮
│        │ ╭───────────┬───────────────────────────────────────╮ │
│ red    │ │           │ ╭───┬──────────┬───────┬────────────╮ │ │
│        │ │ fruit     │ │ # │ category │ color │    name    │ │ │
│        │ │           │ ├───┼──────────┼───────┼────────────┤ │ │
│        │ │           │ │ 0 │ fruit    │ red   │ apple      │ │ │
│        │ │           │ │ 1 │ fruit    │ red   │ strawberry │ │ │
│        │ │           │ ╰───┴──────────┴───────┴────────────╯ │ │
│        │ │           │ ╭───┬───────────┬───────┬────────╮    │ │
│        │ │ vegetable │ │ # │ category  │ color │  name  │    │ │
│        │ │           │ ├───┼───────────┼───────┼────────┤    │ │
│        │ │           │ │ 0 │ vegetable │ red   │ tomato │    │ │
│        │ │           │ ╰───┴───────────┴───────┴────────╯    │ │
│        │ ╰───────────┴───────────────────────────────────────╯ │
│        │ ╭───────────┬──────────────────────────────────────╮  │
│ orange │ │           │ ╭───┬──────────┬────────┬────────╮   │  │
│        │ │ fruit     │ │ # │ category │ color  │  name  │   │  │
│        │ │           │ ├───┼──────────┼────────┼────────┤   │  │
│        │ │           │ │ 0 │ fruit    │ orange │ orange │   │  │
│        │ │           │ ╰───┴──────────┴────────┴────────╯   │  │
│        │ │           │ ╭───┬───────────┬────────┬─────────╮ │  │
│        │ │ vegetable │ │ # │ category  │ color  │  name   │ │  │
│        │ │           │ ├───┼───────────┼────────┼─────────┤ │  │
│        │ │           │ │ 0 │ vegetable │ orange │ carrot  │ │  │
│        │ │           │ │ 1 │ vegetable │ orange │ pumpkin │ │  │
│        │ │           │ ╰───┴───────────┴────────┴─────────╯ │  │
│        │ ╰───────────┴──────────────────────────────────────╯  │
╰────────┴───────────────────────────────────────────────────────╯

With the --to-table flag, instead of nested records, the output is in the form of a table with columns corresponding to each grouper and the items column. Each column corresponding to a grouper is named after it. For closure groupers, the columns are named with the scheme closure_{i}.

$data | group-by color category --to-table
╭───┬────────┬───────────┬───────────────────────────────────────╮
│ # │ color  │ category  │                 items                 │
├───┼────────┼───────────┼───────────────────────────────────────┤
│ 0 │ red    │ fruit     │ ╭───┬──────────┬───────┬────────────╮ │
│   │        │           │ │ # │ category │ color │    name    │ │
│   │        │           │ ├───┼──────────┼───────┼────────────┤ │
│   │        │           │ │ 0 │ fruit    │ red   │ apple      │ │
│   │        │           │ │ 1 │ fruit    │ red   │ strawberry │ │
│   │        │           │ ╰───┴──────────┴───────┴────────────╯ │
│ 1 │ red    │ vegetable │ ╭───┬───────────┬───────┬────────╮    │
│   │        │           │ │ # │ category  │ color │  name  │    │
│   │        │           │ ├───┼───────────┼───────┼────────┤    │
│   │        │           │ │ 0 │ vegetable │ red   │ tomato │    │
│   │        │           │ ╰───┴───────────┴───────┴────────╯    │
│ 2 │ orange │ fruit     │ ╭───┬──────────┬────────┬────────╮    │
│   │        │           │ │ # │ category │ color  │  name  │    │
│   │        │           │ ├───┼──────────┼────────┼────────┤    │
│   │        │           │ │ 0 │ fruit    │ orange │ orange │    │
│   │        │           │ ╰───┴──────────┴────────┴────────╯    │
│ 3 │ orange │ vegetable │ ╭───┬───────────┬────────┬─────────╮  │
│   │        │           │ │ # │ category  │ color  │  name   │  │
│   │        │           │ ├───┼───────────┼────────┼─────────┤  │
│   │        │           │ │ 0 │ vegetable │ orange │ carrot  │  │
│   │        │           │ │ 1 │ vegetable │ orange │ pumpkin │  │
│   │        │           │ ╰───┴───────────┴────────┴─────────╯  │
╰───┴────────┴───────────┴───────────────────────────────────────╯

timeit [toc]

The timeit command previously had a special behavior where expressions passed as arguments would have their evaluation deferred in order to later be timed. This lead to an interesting bug (14401) where the expression would be evaluated twice, since the new IR evaluator eagerly evaluates arguments passed to commands.

To make the deferred evaluation more explicit, the timeit command can now only take a closure as an argument instead of any expression or value (#14483). Additionally, blocks are no longer supported by timeit, so any changes to the environment will be isolated to inside the closure.

sys cpu [toc]

The cpu_usage column outputted by sys cpu works by sampling the CPU over a 400ms period. This wait long time is unhelpful if you are only interested in other information about the CPU like the number of cores (i.e., sys cpu | length). With #14485, the cpu_usage column is now gated behind the --long flag. This way, sys cpu will take around 0-2ms instead of 400ms by default.

from csv and from tsv [toc]

Thanks to @Bahex in #14399, parsing csv and tsv content with the --flexible flag is more flexible than before. Previously, the first row of csv or tsv content would determine the number of columns, and rows containing more values than the determined columns would be truncated, losing those extra values.

With this release, that is no longer the case. Now, --flexible flag means the number of columns aren't limited by the first row and can have not just less but also more values than the first row.

value
1,aaa
2,bbb
3
4,ddd
5,eee,extra
.. | from csv --flexible --noheaders
╭─#─┬─column0─┬─column1─┬─column2─╮
│ 0 │ value   │   ❎    │   ❎    │
│ 1 │       1 │ aaa     │   ❎    │
│ 2 │       2 │ bbb     │   ❎    │
│ 3 │       3 │   ❎    │   ❎    │
│ 4 │       4 │ ddd     │   ❎    │
│ 5 │       5 │ eee     │ extra   │
╰─#─┴─column0─┴─column1─┴─column2─╯

std/iter scan [toc]

Thanks to @Bahex in #14596, the order of scan's closure's parameters are flipped to be consistent with reduce. The closure now also receives the accumulator value as pipeline input as well.

> [a b c d] | iter scan "" {|x, y| [$x, $y] | str join} -n
# To keep its behavior same, this command should be changed to either of the following
> [a b c d] | iter scan "" {|it, acc| [$acc, $it] | str join} -n
> [a b c d] | iter scan "" {|it| append $it | str join} -n

Completion sorting [toc]

In #14424, some changes were made to completion sorting. If you have a custom completer that returns a record with an options field, then this may affect you.

  • If options contains sort: true, then completions will be sorted according to $env.config.completions.sort. Previously, they would have been sorted in alphabetical order.
  • If options contains sort: false, completions will not be sorted.
  • If options does not have a sort column, then that will be treated as sort: true. Previously, this would have been treated as sort: false.

Import module naming [toc]

Thanks to @sgvictorino in #14353, modules with special characters in their name will be normalized by converting these special characters to underscores (_). Previously, it was not possible to use these modules after importing them.

table formatting and the display_output hook [toc]

With #14361 by @132ikl our machinery to format structured now follows a simpler logic. If a $env.config.hooks.display_output hook is set, it is fully responsible for formatting the structured data, e.g. by invoking table with custom settings. Only if it is not set by null will table without arguments be run by default. Previously the output logic would invoke table regardless on top of the formatting by your display_output hook. This avoids some spurious formatting attempts.

du flag changes [toc]

Thanks to @WindSoilder in #14407, the du command shows a more condensed output by default. The files and (recursive) directories are not shown by default. Use du --long (-l) to show these columns. The --all (-a) switch has been removed -- Files and directories will both be shown with --long (-l).

Code specific environment variables updated during source [toc]

The variables $env.CURRENT_FILE and $env.FILE_PWD had already been set to the respective file paths whenever a script was executed or module loaded. Similarly $env.PROCESS_PATH is set for the execution of a script or module but unset when a module is simply used.

With #14486 by @fdncred $env.CURRENT_FILE and $env.FILE_PWD will now also be updated when a particular file is included via source. Similarly $env.PROCESS_PATH will be unset.

# test_source.nu
print $"$env.CURRENT_FILE = ($env.CURRENT_FILE?)"
print $"$env.FILE_PWD = ($env.FILE_PWD?)"
print $"$env.PROCESS_PATH = ($env.PROCESS_PATH?)"
source test_source.nu
# => $env.CURRENT_FILE = /Users/fdncred/src/nushell/test_source.nu
# => $env.FILE_PWD = /Users/fdncred/src/nushell
# => $env.PROCESS_PATH =

Deprecations [toc]

split-by [toc]

In #14019, the split-by command was deprecated. Instead, please use group-by with multiple groupers as shown above.

date to-record and date to-table [toc]

In #14319:

  • date to-record has been deprecated and will be removed in a future release. Please use into record in its place.
  • date to-table has been deprecated and will be removed in a future release. Please use into record | transpose | transpose -r in its place.

do --ignore-shell-errors and --ignore-program-errors [toc]

Thanks to @WindSoilder in #14385, --ignore-shell-errors and --ignore-program-errors for the do command have been deprecated. Use --ignore-errors (-i) instead.

Removals [toc]

NU_DISABLE_IR [toc]

With #14293, the NU_DISABLE_IR environment variable is no longer used. Nushell will now always use the new IR evaluator instead of previous AST based evaluator.

Bug fixes and other changes [toc]

ls [toc]

The ls command used to have deterministic output order, but this was broken in 0.94.0. Thanks to @userwiths in #13875, ls output will now be sorted by the name column. Future changes to the order of ls will be a breaking change.

Additionally, thanks to @sgvictorino in #14310, ls will now error if there are insufficient permissions to list the current working directory. Previously, ls would return empty output.

SHLVL [toc]

When starting Nushell as an interactive REPL, Nushell will now increment the SHLVL environment variable. This change was made in #14404 thanks to @rikukiix. (Note that it is a known issue that SHLVL is still incremented on exec.)

from commands [toc]

After #14602, the from commands now remove the content_type pipeline metadata thanks to @Bahex.

Completions on custom commands [toc]

Thanks to @RobbingDaHood in #14481, file completions are now triggered once again on custom commands after the first parameter. This was a regression due to the 0.99.x release.

seq char [toc]

Thanks to @anomius in #14261, seq char now works on any ASCII characters instead of only alphabetical ASCII characters.

http multipart [toc]

The http commands now use CRLF when joining headers to match the HTTP specification. This change was made in #14417 thanks to @Beinsezii.

scope variables [toc]

scope variables now lists constant variables in scope (when using the IR evaluator) thanks to [@sgvictorino](https://github.com/sgvictorino in #14577.

help system [toc]

@132ikl fixed a long standing issue in the help system, where commands with the same name but different module paths clashed. Now the help <name> correctly refers to the name of a command like it is visible in the scope through the definitions or use imports thanks to #14490.

Notes for plugin developers [toc]

As part of cleaning up we removed several enum variants actually unused in the core codebase:

  • Type::ListStream as the engine represents PipelineData::ListStream more consistently as Type::List
  • FlatShape::And/FlatShape::Or as they are never populated.

Furthermore Value::Filesize now stores its value in its own Filesize type instead of a bare i64 to avoid confusion about the particular unit.

Hall of fame [toc]

Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! 🙏

authortitlelink
@132iklChange tests which may invoke externals to use non-conflicting names#14516
@132iklMake glob stream#14495
@Bahexdocs(reduce): add example demonstrating accumulator as pipeline input#14593
@Bahextest(path self): Add tests#14607
@DziubaMaksymfix: sample_config#14465
@Jasha10enable test_cp_recurse on macos#14358
@KissakiFix doc and code comment typos#14366
@PegasusPlusUSFix unstable test case: One time my windows report drive letter as lowercase#14451
@PerchunPakFix issues in the example configs#14601
@alex-kattathra-johnsonShorten --max-time in tests and use a more stable error check#14494
@cptpiepmatzFix missing installed_plugins field in version command#14488
@cptpiepmatzFix commands::network::http::*::*_timeout tests on non-english system#14640
@maxim-uvarovrewrite error message to not use the word function#14533
@sgvictorinoskip test_iteration_errors if /root is missing#14299
@sgvictorinoreturn accurate type errors from blocks/expressions in type unions#14420
@zhiburtnu-table/ Do footer_inheritance by accounting for rows rather then a f…#14380

Full changelog [toc]

authortitlelink
@132iklRely on display_output hook for formatting values from evaluations#14361
@132iklMake length only operate on supported input types#14475
@132iklAdd label rendering to try/catch rendered errors#14477
@132iklChange help commands to use name from scope instead of the name from the declaration#14490
@132iklMake glob stream#14495
@132iklChange tests which may invoke externals to use non-conflicting names#14516
@132iklAdd merge deep command#14525
@132iklRemove grid icons deprecation warning#14526
@BahexAdd path self command for getting absolute paths to files at parse time#14303
@Bahexadd multiple grouper support to group-by#14337
@Bahexfix(group-by): re #14337 name collision prevention#14360
@Bahextruly flexible csv/tsv parsing#14399
@BahexAdd term query, for querying information from terminals.#14427
@Bahexterm query: refactor, add --prefix flag#14446
@BahexPropagate existing errors in insert and merge#14453
@Bahexlsp and --ide-check fix for path self related diagnostics#14538
@Bahexdocs(reduce): add example demonstrating accumulator as pipeline input#14593
@Bahexremove the deprecated index argument from filter commands' closure signature#14594
@Bahexstd/iter scan: change closure signature to be consistent with reduce#14596
@Bahexremove content_type metadata from pipeline after from ... commands#14602
@Bahextest(path self): Add tests#14607
@Beinseziicommand/http/client use CRLF for headers join instead of LF#14417
@DziubaMaksymfix: sample_config#14465
@IanManskeDeprecate split-by command#14019
@IanManskeChange append operator to concatenation operator#14344
@IanManskeMake Hooks fields non-optional to match the new config defaults#14345
@IanManskeAdd Filesize type#14369
@IanManskeRemove ListStream type#14425
@IanManskeMake timeit take only closures as an argument#14483
@IanManskeRemove duplicate implementations of CallExt::rest#14484
@IanManskeAdd --long flag for sys cpu#14485
@Jasha10enable test_cp_recurse on macos#14358
@KissakiFix doc and code comment typos#14366
@NotTheDr01dsLoad default_env.nu/default_config.nu before user env.nu/config.nu#14249
@NotTheDr01dsAllow date to be added to duration#14295
@NotTheDr01dsDeprecate date to-record and date to-table#14319
@NotTheDr01dsAdd proper config defaults for hooks#14341
@NotTheDr01dsFix small typos in std/dirs#14422
@NotTheDr01dsAlways populate config record during startup#14435
@NotTheDr01dsRemove long-unused autoenv tests#14436
@NotTheDr01dsAdd example for PROMPT_COMMAND_RIGHT#14439
@NotTheDr01dsBump reedline to current main#14455
@NotTheDr01dsUpdate default-files README#14461
@NotTheDr01dsAllow inherited environment variables#14467
@NotTheDr01dsOnly run from_string conversion on strings#14509
@NotTheDr01dsUse const NU_LIB_DIRS in startup#14549
@NotTheDr01dsAllow both NU_PLUGIN_DIRS const and env at the same time#14553
@NotTheDr01dsSet empty ENV_CONVERSIONS record by default#14566
@NotTheDr01dsUpdate sample and scaffold files#14568
@NotTheDr01dsMoves additional env vars out of default_env and updates some transient prompt vars#14579
@NotTheDr01dsAdd missing color_config settings#14603
@NotTheDr01dsDoc file fixes#14608
@NotTheDr01dsRemove duplicate version line#14611
@NotTheDr01dsAdd version info to startup banner#14625
@NotTheDr01dsAdd shape_garbage#14626
@NotTheDr01dsSet split-by doc category to "deprecated"#14633
@PegasusPlusUSFeature: PWD-per-drive to facilitate working on multiple drives at Windows#14411
@PegasusPlusUSFix unstable test case: One time my windows report drive letter as lowercase#14451
@PerchunPakFix issues in the example configs#14601
@RobbingDaHood#14238 Now the file completion is triggered on a custom command after the first parameter.#14481
@RobbingDaHoodFor # to start a comment, then it either need to be the first chara…#14562
@WindSoilderTests: add a test to make sure that function can't use mutable variable#14314
@WindSoildermake std help more user friendly#14347
@WindSoilderadd --default flag to input command#14374
@WindSoilderdeprecate --ignore-shell-errors and --ignore-program-errors in do#14385
@WindSoilderremove deprecated warnings#14386
@WindSoilderraise ParseError if assign to a non-variable or non-mutable-variable#14405
@WindSoilderdu: add -l/--long flag, remove -a/--all flag#14407
@WindSoilderupdate miette to 7.3#14454
@WindSoilderupdate unicode-width to 0.2#14456
@WindSoilderrun cargo update manually to update dependencies#14569
@WindSoilderupdate shadow-rs to 0.37#14617
@WindSoilderRemove -a/-all flag in du.#14618
@alex-kattathra-johnsonShorten --max-time in tests and use a more stable error check#14494
@amtoineadd from ndnuon and to ndnuon to stdlib#14334
@amtoinefix multiline strings in NDNUON#14519
@anomiusSeq char update will work on all char#14261
@app/dependabotBump crate-ci/typos from 1.27.0 to 1.27.3#14321
@app/dependabotBump serial_test from 3.1.1 to 3.2.0#14325
@app/dependabotBump tempfile from 3.13.0 to 3.14.0#14326
@app/dependabotBump mockito from 1.5.0 to 1.6.1#14336
@app/dependabotBump terminal_size from 0.3.0 to 0.4.0#14393
@app/dependabotBump thiserror from 1.0.69 to 2.0.3#14394
@app/dependabotBump shadow-rs from 0.35.2 to 0.36.0#14396
@app/dependabotBump crate-ci/typos from 1.27.3 to 1.28.1#14447
@app/dependabotBump crate-ci/typos from 1.28.1 to 1.28.2#14503
@app/dependabotBump indexmap from 2.6.0 to 2.7.0#14505
@app/dependabotBump multipart-rs from 0.1.11 to 0.1.13#14506
@app/dependabotBump ureq from 2.10.1 to 2.12.0#14507
@app/dependabotBump bytes from 1.8.0 to 1.9.0#14508
@app/dependabotBump scraper from 0.21.0 to 0.22.0#14557
@app/dependabotBump crate-ci/typos from 1.28.2 to 1.28.4#14614
@ayax79Add support for converting polars decimal values to nushell values#14343
@ayax79Upgrading to polars 0.44#14478
@ayax79Convert Filesize to Int#14491
@ayax79Documentation and error handling around polars with-column --name#14527
@ayax79Improve handling of columns with null values#14588
@ayax79Added flag --coalesce-columns to allow columns to be coalesced on full joins#14578
@cosineblastImplement chunk_by operation#14410
@cptpiepmatzStart to Add WASM Support Again#14418
@cptpiepmatzFix missing installed_plugins field in version command#14488
@cptpiepmatzFix table command when targeting WASM#14530
@cptpiepmatzExpose "to html" command#14536
@cptpiepmatzFix commands::network::http::*::*_timeout tests on non-english system#14640
@devynRemove the NU_DISABLE_IR option#14293
@devynTurn compile errors into fatal errors#14388
@fdncredallow nuscripts to be run again on windows with assoc/ftype#14318
@fdncredfix ansi bleed over on right prompt#14357
@fdncredupdate uutils crates#14371
@fdncredallow ps1 files to be executed without pwsh/powershell -c file.ps1#14379
@fdncredadd function to make env vars case-insensitive#14390
@fdncredadd new --flatten parameter to the ast command#14400
@fdncredremove terminal_size crate everywhere it makes sense#14423
@fdncredupdate rust toolchain to rust 1.81.0#14473
@fdncredAdd environment variables for sourced files#14486
@fdncredallow select to stream more#14492
@fdncredadd file column to scope modules output#14524
@fdncredupdate to reedline 9eb3c2d#14541
@fdncredfix 64-bit hex number parsing#14571
@fdncredtweak polars join for better cross joins#14586
@fdncredallow view source to take int as a parameter#14609
@fdncredadd view blocks command#14610
@fdncredadd config flatten command#14621
@fdncredbetter error handling for view source#14624
@fdncredlookup closures/blockids and get content in config flatten#14635
@fdncredtweaks to config flatten#14639
@hustcerBump to dev version 0.100.1#14328
@hustcerFix the document CI error for polars profile command#14642
@maxim-uvarovrewrite error message to not use the word function#14533
@michel-slmBump quick-xml to 0.37.0#14354
@michel-slmBump titlecase dependency#14502
@musicinmybrainUpdate rstest from 0.18 to 0.23 (the current version)#14350
@musicinmybrainUpdate procfs and which dependencies to their latest releases#14489
@musicinmybrainUpdate roxmltree from 0.19 to 0.20, the latest version#14513
@paulie4explore: add more less key bindings and add Transition::None#14468
@ratherforkyFix silent failure of parsing input output types#14510
@rfaulhaberAdd mac and IP address entries to sys net#14389
@rikukiixUpdate SHLVL (only when interactive) on startup#14404
@schrieveslaachBump Calamine#14403
@sgvictorinoskip test_iteration_errors if /root is missing#14299
@sgvictorinomake command signature parsing more strict#14309
@sgvictorinomake ls return "Permission denied" for CWD instead of empty results#14310
@sgvictorinonormalize special characters in module names to allow variable access#14353
@sgvictorinoreturn accurate type errors from blocks/expressions in type unions#14420
@sgvictorinosupport raw strings in match patterns#14573
@sgvictorinoreturn const values from scope variables#14577
@sholderbachCut down unnecessary lint allows#14335
@sholderbachRemove unused FlatShapes And/Or#14476
@sholderbachAdd remove as a search term on drop commands#14493
@sholderbachImprove sleep example using multiple durations#14520
@sholderbachRemove unused sample_login.nu file#14632
@sholderbachRemove pub on some command internals#14636
@sholderbachPin reedline to 0.38.0 release#14651
@userwithsFix inconsistency in ls sort-order#13875
@ysthakurAdd utouch command from uutils/coreutils#11817
@ysthakurAvoid recomputing fuzzy match scores#13700
@ysthakurfix: Respect sort in custom completions#14424
@zhiburtnu-table/ Do footer_inheritance by accounting for rows rather then a f…#14380
Edit this page on GitHub
Contributors: Ian Manske, NotTheDr01ds, Bahex, Stefan Holderbach