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

Today, we're releasing version 0.111.0 of Nu. This release adds smoother select menus, command group aliasing so you can type less, proper finally support that really always runs, let right inside pipelines, and an experimental native clipboard that talks straight to your OS.

Where to get it

Nu 0.111.0 is available as pre-built binaries or from crates.io. If you have Rust installed you can 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 [toc]

Select menus are smooth now [toc]

@jlcrochet went in and reworked how input list behaves in #17420. It feels a lot nicer now. Scrolling is smooth, the weird flicker is basically gone, and there are some really useful new flags along the way.

If you use interactive lists often, this one is easy to appreciate.

We even have a video of it, check it out!

Type polars less now [toc]

@ayax79 got tired of typing polars x again and again. So in #17359 he added support for aliasing command groups.

# no more polars all the time
alias pl = polars

It is not just for polars.

# for the quick maths
alias m = math

Shorter commands, same result. Hard to complain about that.

Take a look how much shorter the example got.

Try-Catch-Finally! [toc]

For a long time Nushell had try and catch, but no finally. We got asked about it. Thanks to @WindSoilder and #17397, that is fixed now.

finally runs no matter what happened before. If try worked, it runs. If catch ran, it still runs. So your cleanup code actually gets to do its job.

This even works with a return:

> def aa [] {
    try {
        return 10
    } finally {
        print 'aa'
    }
}
> aa
aa
10

The aa got printed even though the function returned early with a 10. So even an early exit does not skip the final step.

And with #17451 this also works with exit.

try { exit } finally { print 'aa' }  # aa is printed.

So even when you really mean "stop", finally still runs.

Take a look at the main entry and the exit entry.

Pipe-let-line [toc]

Last release gave us let at the end of a pipeline. Now, thanks to @fdncred in #17446, you can drop let right into the middle of one too.

You can grab a value, name it, and just keep the pipeline moving.

> "hello" | let msg | str length
5
> $msg
hello

See, very nice. No need to break things apart just to stash a value.

Assign variables anywhere, read more here.

Experimental Native Clipboard [toc]

Experimental option

This feature is behind an experimental option. Run Nushell with --experimental-option=native-clip or set before running Nushell the environment variable to NU_EXPERIMENTAL_OPTIONS=native-clip.

@fmotalleb built the plugin nu_plugin_clipboard. We liked it enough that we asked to bring it into Nushell itself. That landed in #17572.

With clip copy and clip paste, Nushell now talks directly to your system clipboard instead of going through OSC52 codes. That means it does not depend on your terminal supporting those escape sequences.

There are some tradeoffs, so it is behind the native-clip experimental option for now. But in practice it behaves very similar to std/clip copy and std/clip paste, just using the OS API directly.

If you are curious how it works across platforms, check the examples here.

Changes [toc]

Breaking changes [toc]

Updated input list command [toc]

PR #17420 by @jlcrochet

The underlying implementation of input list changed a lot. This comes with some changes to the usage of it but also improved UI to be less flickery.

Four selection modes

  • Single (default): Select one item with arrow keys, confirm with Enter
  • Multi (--multi): Select multiple items with Space, toggle all with 'a'
  • Fuzzy (--fuzzy): Type to filter with highlighted matches
  • Fuzzy Multi (--fuzzy --multi): Filter and select multiple items with Tab, toggle all with Alt+A

Table rendering

When piping a table (list of records), items display with aligned columns matching Nushell's table styling:

  • Type-based colors and alignment (inherits from color_config)
  • Header row with separator line (matches table.mode theme)
  • Horizontal scrolling with Left/Right (Shift+Left/Right in fuzzy mode)
  • Ellipsis (…) indicators for hidden columns, highlighted when matches exist there
  • Auto-scrolls horizontally when filter matches are only in hidden columns
  • --no-table flag to disable and show records as single lines
  • --per-column flag to match filter text against each column independently (prevents false positives from cross-column matches)
  • --display accepts either a cell path or a closure to determine what to show for each record in the list (returns full record when selected)

Multi mode features

  • Footer always shows selection count: [1-5 of 10, 3 selected]
  • Ctrl+R to refine: Narrow list to selected items only, keeping them selected so you can deselect unwanted ones. Can be used multiple times.

Fuzzy mode features

  • Footer displays current settings: [smart], [CASE], [nocase], or [smart col] for per-column mode
  • Alt+C: Cycle case sensitivity (smart → CASE → nocase)
  • Alt+P: Toggle per-column matching in table mode

Keyboard shortcuts

  • Vim-style navigation: j/k in single/multi modes
  • h/l for horizontal scrolling in table mode
  • Readline-style editing in fuzzy mode (Ctrl+A/E, Ctrl+B/F, Ctrl+U/K, Ctrl+W, Alt+B/F, etc.)
  • Home/End, PageUp/PageDown for fast navigation
  • a to toggle all (multi mode), Alt+A (fuzzy multi mode)
  • Alt+C to cycle case sensitivity (fuzzy modes)
  • Alt+P to toggle per-column matching (fuzzy table mode)

Configuration via $env.config.input_list

Styles (under .style):

  • match_text: Fuzzy match highlighting (inherits from color_config.search_result)
  • footer: Footer text (default: dark_gray)
  • separator: Separator line (inherits from color_config.separator)
  • prompt_marker: Prompt marker in fuzzy mode (default: green)
  • selected_marker: Selection marker (default: green)
  • table_header: Column headers (inherits from color_config.header)
  • table_separator: Column separators (inherits from color_config.separator)

Other options:

  • separator_char: Separator line character (default: "─")
  • prompt_marker_text: Prompt marker text (default: "> ")
  • selected_marker_char: Selection marker character (default: ">")
  • table_column_separator: Column separator character (inherits from table.mode)
  • case_sensitive: "smart" (default), true, or false

New flags

  • --no-footer / -n: Hide the footer
  • --no-separator: Hide the separator line between search and results
  • --no-table / -t: Disable table rendering
  • --per-column / -c: Match filter against each column independently
  • --case-sensitive / -s: Override case sensitivity ("smart", true, false)

is-empty and is-not-empty return expected values from empty pipelines [toc]

PR #17594 by @fdncred

The is-empty command and is-not-empty command now return a boolean value when the pipeline is Pipeline::Empty.

> def get_null [] {}
> get_null | is-empty
true
> get_null | is-not-empty
false

Other breaking changes [toc]

  • Using std repeat with no pipeline input, or nothing type input, now generates a list of null items with the provided length. (#17332)
  • nushell will use pipefail by default, so something like ^false | lines returns an empty list, with a failure exit status code (#17449)
  • Running mktemp without template will now create tmp files in tmpdir instead of current dir. (#17549)
  • Removed $env.config.input_list config, instead sensible defaults are inherited from color_config. (#17550)

Additions [toc]

Aliasing now works with parent commands [toc]

PR #17359 by @ayax79

When applying an alias, to a parent commands, the sub commands will use the alias.

> alias pl = polars
> ps | pl into-df | pl select [(pl col name) (pl col pid)] | pl collect
╭─────┬─────────────────────┬───────╮
│   # │        name         │  pid  │
├─────┼─────────────────────┼───────┤
│   0 │ nvcontainer.exe     │ 44560 │
│   1 │ svchost.exe         │ 26772 │
│   2 │ sihost.exe          │ 10176 │
│   3 │ svchost.exe         │ 23924 │
│   4 │ svchost.exe         │ 28120 │
│   5 │ taskhostw.exe       │ 32172 │
│   6 │ itype.exe           │ 43200 │
│   7 │ ipoint.exe          │ 42440 │
│   8 │ Explorer.EXE        │ 46052 │
│   9 │ ShellHost.exe       │ 41144 │
│ ... │ ...                 │ ...   │
│ 138 │ WindowsTerminal.exe │ 32588 │
│ 139 │ OpenConsole.exe     │ 44248 │
│ 140 │ nu.exe              │ 34792 │
│ 141 │ VCTIP.EXE           │ 48988 │
│ 142 │ vivaldi.exe         │ 32476 │
│ 143 │ vivaldi.exe         │ 18724 │
│ 144 │ vivaldi.exe         │ 10148 │
│ 145 │ cargo.exe           │ 36868 │
│ 146 │ cargo.exe           │ 13460 │
│ 147 │ nu.exe              │ 32912 │
╰─────┴─────────────────────┴───────╯

Introducing polars entropy [toc]

PR #17377 by @ayax79

Introduces the command polars entropy used to compute the entropy as -sum(pk * log(pk)) where pk are discrete probabilities.

> [[a]; [1] [2] [3]] | polars into-df | polars select (polars col a | polars entropy --base 2) | polars collect
╭───┬──────╮
│ # │  a   │
├───┼──────┤
│ 0 │ 1.46 │
╰───┴──────╯

Content types for to ndjson | jsonl | ndnuon are now set properly [toc]

PR #17398 by @cablehead

The to ndjson, to jsonl, and to ndnuon commands in std/formats now set appropriate content_type metadata:

CommandContent Type
to ndjsonapplication/x-ndjson
to jsonlapplication/jsonl
to ndnuonapplication/x-ndnuon
> use std/formats *
> [{a: 1}] | to ndjson | metadata | get content_type
application/x-ndjson

Allow custom/external completers to override display value [toc]

PR #17330 by @ysthakur

Custom and external completers will now be able to set a display value for their suggestions that's separate from the value that will be filled into the buffer. They can do this by creating suggestions with the display_override field set. The display_override field is allowed to contain ANSI escapes for styling suggestions more extensively than the style field allows.

def completer [] {
  [{
    value: "foobarbaz",
    display_override: $"(ansi red)foo(ansi green)bar(ansi blue)baz"
  }]
}

Polars: Allow polars join key expressions for more advanced column expressions [toc]

PR #17436 by @pyz4

Loosen constraint on polars join key expressions to allow more advanced column expressions. See example below.

This feature was originally enabled for right_on but not left_on.

> let df1 = [[a b]; ["2025-01-01 01:00:00+0000" 1] ["2025-01-02 05:36:42+0000" 2]] | polars into-df --schema {a: "datetime<ms,UTC>", b: i8}
> let df2 = [[a c]; ["2025-01-01 00:00:00+0000" a] ["2025-01-02 00:00:00+0000" b]] | polars into-df --schema {a: "datetime<ms,UTC>", c: str}
> $df1 | polars join $df2 [(polars col a | polars truncate 1d)] [a]
╭───┬────────────┬───┬────────────┬───╮
│ # │     a      │ b │    a_x     │ c │
├───┼────────────┼───┼────────────┼───┤
│ 0 │ a year ago │ 1 │ a year ago │ a │
│ 1 │ a year ago │ 2 │ a year ago │ b │
╰───┴────────────┴───┴────────────┴───╯

Users can use finally after try .. catch .. [toc]

PR #17397 by @WindSoilder

finally always run whatever the error is happened inside try block or catch block.

> try { 1 / 0 } finally { print 'aa' }
aa
> try { 1 / 0 } catch { 1 / 0 } finally { print 'aa' }
aa

If users return something inside a custom command, finally still run, and respect that return value.

> def aa [] {
    try {
        return 10
    } finally {
        print 'aa'
    }
}
> aa
aa
10

It prints aa and returns value 10.

finally can also accept an argument, which can be different value depends on running result.

It allows message passing from try..catch to finally.

try { 111 } finally {|v| print $v }  # here $v is the return value inside `try` block.
try { 1 / 0 } finally {|v| print $v.msg }  # here $v is the error generated by `1 / 0`.
try { 1 / 0 } catch { 33 } finally {|v| print $v}  # here $v is the return value inside `catch` block.
try { 1 / 0 } catch { error make "bad"  } finally {|v| print $v.msg}  # here $v is the error generated inside `catch` block.

Given that, the value of try..catch..finally will always be the result of finally block. Except if there is a return statement inside try or catch.

Added nulls-equal argument to polars join [toc]

PR #17435 by @pyz4

Introducing a nulls-equal argument in polars join, which allows joins to match on null values. See example:

Join on nulls
> [[col1 col2]; [2 a] [3 b] [null c]]
| polars into-df
| polars join (
    [[col1 col3]; [2 x] [3 y] [null z]] | polars into-df
  ) [col1] [col1] --nulls-equal
| polars collect
╭───┬──────┬──────┬──────╮
│ # │ col1 │ col2 │ col3 │
├───┼──────┼──────┼──────┤
│ 0 │    2 │ a    │ x    │
│ 1 │    3 │ b    │ y    │
│ 2 │      │ c    │ z    │
╰───┴──────┴──────┴──────╯

Deserialize spans in ast --json command [toc]

PR #17452 by @fdncred

Add the ability to see ast span contents when used with --json flag.

> ast 'let a = ls | first 3' --json | get block | from json | get pipelines.0.elements.0.expr.expr | table -e
╭──────┬────────────────────────────────────────────────────────────────────────╮
│      │ ╭─────────────┬──────────────────────────────────────────────────────╮ │
│ Call │ │ decl_id     │ 36                                                   │ │
│      │ │             │ ╭─────────────┬────────╮                             │ │
│      │ │ head        │ │ start       │ 150652 │                             │ │
│      │ │             │ │ end         │ 150655 │                             │ │
│      │ │             │ │ span_source │ let    │                             │ │
│      │ │             │ ╰─────────────┴────────╯                             │ │
│      │ │             │ ╭───┬──────────────────────────────────────────────╮ │ │
│      │ │ arguments   │ │ # │                  Positional                  │ │ │
│      │ │             │ ├───┼──────────────────────────────────────────────┤ │ │
│      │ │             │ │ 0 │ ╭─────────┬──────────────────────────╮       │ │ │
│      │ │             │ │   │ │         │ ╭─────────┬────╮         │       │ │ │
│      │ │             │ │   │ │ expr    │ │ VarDecl │ 75 │         │       │ │ │
│      │ │             │ │   │ │         │ ╰─────────┴────╯         │       │ │ │
│      │ │             │ │   │ │         │ ╭─────────────┬────────╮ │       │ │ │
│      │ │             │ │   │ │ span    │ │ start       │ 150656 │ │       │ │ │
│      │ │             │ │   │ │         │ │ end         │ 150657 │ │       │ │ │
│      │ │             │ │   │ │         │ │ span_source │ a      │ │       │ │ │
│      │ │             │ │   │ │         │ ╰─────────────┴────────╯ │       │ │ │
│      │ │             │ │   │ │ span_id │ 7027                     │       │ │ │
│      │ │             │ │   │ │ ty      │ Any                      │       │ │ │
│      │ │             │ │   │ ╰─────────┴──────────────────────────╯       │ │ │
│      │ │             │ │ 1 │ ╭─────────┬────────────────────────────────╮ │ │ │
│      │ │             │ │   │ │         │ ╭───────┬─────╮                │ │ │ │
│      │ │             │ │   │ │ expr    │ │ Block │ 352 │                │ │ │ │
│      │ │             │ │   │ │         │ ╰───────┴─────╯                │ │ │ │
│      │ │             │ │   │ │         │ ╭─────────────┬──────────────╮ │ │ │ │
│      │ │             │ │   │ │ span    │ │ start       │ 150660       │ │ │ │ │
│      │ │             │ │   │ │         │ │ end         │ 150672       │ │ │ │ │
│      │ │             │ │   │ │         │ │ span_source │ ls | first 3 │ │ │ │ │
│      │ │             │ │   │ │         │ ╰─────────────┴──────────────╯ │ │ │ │
│      │ │             │ │   │ │ span_id │ 7026                           │ │ │ │
│      │ │             │ │   │ │ ty      │ Any                            │ │ │ │
│      │ │             │ │   │ ╰─────────┴────────────────────────────────╯ │ │ │
│      │ │             │ ╰───┴──────────────────────────────────────────────╯ │ │
│      │ │ parser_info │ {record 0 fields}                                    │ │
│      │ ╰─────────────┴──────────────────────────────────────────────────────╯ │
╰──────┴────────────────────────────────────────────────────────────────────────╯

finally runs even after exit [toc]

PR #17451 by @WindSoilder

If user runs exit inside try, the finally block will be run before nushell exits.

try { exit } finally { print 'aa' }  # aa is printed.

To avoid the behavior, you can use --abort flag to exit anyway.

try { exit --abort } finally { print 'aa' }  # aa is not printed.

MCP: HTTP transport and cancellation [toc]

PR #17161 by @andrewgazelka

Adds HTTP transport for MCP via --mcp-transport http and a --mcp-port flag to set the port, default 8080. Long running requests can now be cancelled safely. External commands no longer hang on stdin, sessions clean up after 30 minutes idle, and error reporting is clearer with proper error codes and line and column details.

New linewise and non-blank start edit commands [toc]

PR #17508 by @Juhan280

The following new emacs mode keybinds have been added:

  • Alt <: Move the cursor to the start of the buffer.
  • Alt >: Move the cursor to the end of the buffer.

The following new vi mode motions have been added:

  • gg: Move the cursor to the start of the buffer.
  • G: Move the cursor to the end of the buffer.
  • ^: Move the cursor to first non-whitespace character of line. (Previously it used to move to the start of the line)

The following new edit commands have been added to Reedline:

  • cutfromstartlinewise / cuttoendlinewise: Delete lines from the start or to the end of the buffer. The required value parameter controls whether to leave a blank line (true to leave a blank line).
  • copyfromstartlinewise / copytoendlinewise: Copy from the cursor line to the start/end of the buffer.
  • movetolinenonblankstart: Move the cursor to first non-whitespace character of line.
  • cutfromlinenonblankstart / copyfromlinenonblankstart: Cut/copy from cursor position to the first non-whitespace character of the line.

let now behaves differently inside pipelines [toc]

PR #17446 by @fdncred

Change let to allow assignment values to be passed through when let is used in the middle of a pipeline. When let is used on the beginning of the pipeline the value is assigned but no value is output. When let is used at the end of the pipeline the value is assigned and output. We chose to output the value at the end of the pipeline because it could easily be ignored with | ignore if the user didn't want to see it.

Normal let still works

> let x = 5
> $x
5

let at end of the pipeline

> ls | length | let y
36
> $y
36

let pass-thru values (used mid pipeline)

> "hello" | let msg | str length
5
> $msg
hello

> [2 3 4] | let nums | first
2

> [2 3 4] | let nums | last
4
> $nums
╭───┬───╮
│ 0 │ 2 │
│ 1 │ 3 │
│ 2 │ 4 │
╰───┴───╯

let used with $in mid pipeline

> 10 | let x | $in + 5
15
> $x
10

let not using pass-thru

> 10 | let a | $a + 5
15
> $a
10

New flag --path-columns for metadata set to specify columns as file paths [toc]

PR #17540 by @Juhan280

metadata set --path-columns can be used to specify which columns of a table contains file paths and the table command will render those cells as file paths and will even include icons if table --icons is used.

Example usage:

glob * | wrap path | metadata set --path-columns [path]

New flag --keep-last for uniq-by [toc]

PR #17564 by @Juhan280

Added --keep-last flag for the uniq-by command. This lets you keep the last row for each key instead of the first. It is handy when later entries should override earlier ones, like when reading a log of state changes.

Example:

> [[fruit count]; [apple 9] [apple 2] [pear 3] [orange 7]] | uniq-by fruit --keep-last
╭───┬────────┬───────╮
│ # │ fruit  │ count │
├───┼────────┼───────┤
│ 0 │ apple  │     2 │
│ 1 │ pear   │     3 │
│ 2 │ orange │     7 │
╰───┴────────┴───────╯

Cross-platform native clipboard commands [toc]

PR #17572 by @fmotalleb

Experimental option

This feature is behind an experimental option. Run Nushell with --experimental-option=native-clip or set before running Nushell the environment variable to NU_EXPERIMENTAL_OPTIONS=native-clip.

Two new commands were added clip copy and clip paste. They replace the implementation of std/clip with a native implementation and are now built-in commands that are available all the time.

# Copy data to the clipboard
"data" | clip copy

# Pass through the copied data
"data" | clip copy --show | save out.txt

# Retrieve data from the clipboard
clip paste

More flexible INI parsing options [toc]

PR #17600 by @teddygood

from ini now supports rust-ini ParseOption flags (--no-quote, --no-escape, --indented-multiline-value, --preserve-key-leading-whitespace) for better compatibility with INI variations.

In particular, from ini --no-escape allows Windows-style paths with backslashes (including \x) to be parsed literally.

New $env.config.clip configuration options [toc]

PR #17616 by @fmotalleb

Adds clip to $env.config with two flags

$env.config.clip.default_raw # Forces to raw pasting instead of nu object (default: false)
$env.config.clip.daemon_mode # Enables daemon mode in Linux (default: true)

Show source file location with view source | metadata [toc]

PR #17635 by @fdncred

The view source command will show that file location of the source code when piped through the metadata command.

> def l [] { ls -am | sort-by type name }
> view source l
def l [] { ls -am | sort-by type name }
> view source l | metadata
╭──────────────┬────────────────────────╮
│              │ ╭───────┬────────╮     │
│ span         │ │ start │ 149684 │     │
│              │ │ end   │ 149695 │     │
│              │ ╰───────┴────────╯     │
│ source       │ repl_entry #2          │
│ content_type │ application/x-nuscript │
╰──────────────┴────────────────────────╯

Show the path for different command types when using the which command [toc]

PR #17643 by @fdncred

Custom Command

> def custom [] { }
> which custom
╭───┬─────────┬───────────────┬────────╮
│ # │ command │     path      │  type  │
├───┼─────────┼───────────────┼────────┤
│ 0 │ custom  │ repl_entry #8 │ custom │
╰───┴─────────┴───────────────┴────────╯

Escaped Binaries

> which ^git
╭───┬─────────┬────────────────────┬──────────╮
│ # │ command │        path        │   type   │
├───┼─────────┼────────────────────┼──────────┤
│ 0 │ git     │ D:\Git\cmd\git.exe │ external │
╰───┴─────────┴────────────────────┴──────────╯

Known Externals (extern declarations)

> use ../nu_scripts/custom-completions/git/git-completions.nu *
> which "git reset"
╭───┬───────────┬──────────────────────────────────────────────────────────────────┬──────────╮
│ # │  command  │                               path                               │   type   │
├───┼───────────┼──────────────────────────────────────────────────────────────────┼──────────┤
│ 0 │ git reset │ D:\Projects\nu_scripts\custom-completions\git\git-completions.nu │ external │
╰───┴───────────┴──────────────────────────────────────────────────────────────────┴──────────╯

Built-In

> which "str replace"
╭───┬─────────────┬──────┬──────────╮
│ # │   command   │ path │   type   │
├───┼─────────────┼──────┼──────────┤
│ 0 │ str replace │      │ built-in │
╰───┴─────────────┴──────┴──────────╯

Plugins

> which polars
╭───┬─────────┬───────────────────────────────────────────────────────┬────────╮
│ # │ command │                         path                          │  type  │
├───┼─────────┼───────────────────────────────────────────────────────┼────────┤
│ 0 │ polars  │ D:\Projects\nushell\target\debug\nu_plugin_polars.exe │ plugin │
╰───┴─────────┴───────────────────────────────────────────────────────┴────────╯

Aliases

> alias gcm = git checkout (git_main_branch)
> which gcm
╭───┬─────────┬───────────────┬───────┬────────────────────────────────╮
│ # │ command │     path      │ type  │           definition           │
├───┼─────────┼───────────────┼───────┼────────────────────────────────┤
│ 0 │ gcm     │ repl_entry #4 │ alias │ git checkout (git_main_branch) │
╰───┴─────────┴───────────────┴───────┴────────────────────────────────╯

All Commands

> use ../nu_scripts/custom-completions/git/git-completions.nu *
> which git -a
╭───┬─────────┬──────────────────────────────────────────────────────────────────┬──────────╮
│ # │ command │                               path                               │   type   │
├───┼─────────┼──────────────────────────────────────────────────────────────────┼──────────┤
│ 0 │ git     │ D:\Projects\nu_scripts\custom-completions\git\git-completions.nu │ external │
│ 1 │ git     │ D:\Git\cmd\git.exe                                               │ external │
╰───┴─────────┴──────────────────────────────────────────────────────────────────┴──────────╯

Other additions [toc]

  • join now supports --prefix and --suffix to disambiguate columns from the right table when joining tables with overlapping column names, making it easier to chain multiple joins without losing columns. (#17393)
  • Added tutor for closure (and updated block tutor). (#17178)
  • This release adds the umask command, which lets you control the default permissions for newly-created files and directories. (#17386)
  • External command tab completion on Windows now includes PowerShell .ps1 scripts that are available in PATH. (#17362)
  • Enabling shell_integration.osc133 now also enables click-to-cursor in supported terminals. (#17491)
  • Added --all and -a to rm to make it consistent with mv, du, cp commands. (#17509)
  • Added --left flag to drop column command to drop columns on the left side instead of the right side. (#17526)
  • Ctrl+C now immediately interrupts http get (and other HTTP commands) when waiting for slow or streaming responses. Previously, Ctrl+C was ignored until data arrived. This makes it practical to wrap long-polling HTTP APIs with nushell pipelines. (#17507)
  • du command will now also show colorful paths and icons like ls (#17560)
  • Add user id to sys users output (#17577)
  • Added input listen --timeout flag that returns an error if no input was provided before the timeout. (#17595)

Deprecations [toc]

metadata set should now be used with closures instead of the --merge flag [toc]

PR #17537 by @cablehead

metadata set --merge is now deprecated and will be removed in 0.112.0. Use the closure form instead:

# before
"data" | metadata set --merge {key: value}

# after
"data" | metadata set {|| merge {key: value} }

metadata set --datasource-ls has been deprecated in favor of metadata set --path-columns. [toc]

PR #17562 by @Juhan280

# before
[[name color]; [Cargo.lock '#ff0000'] [Cargo.toml '#00ff00'] [README.md '#0000ff']] | metadata set --datasource-ls

# after
[[name color]; [Cargo.lock '#ff0000'] [Cargo.toml '#00ff00'] [README.md '#0000ff']] | metadata set --path-columns [name]

Other changes [toc]

Display the help for the aliased command when calling help <alias> [toc]

PR #17365 by @ayax79

When aliasing a command, the help for that command is also displayed:

> alias psl = ps --long
> help psl
Alias for ps --long

Alias: ps

Expansion:
  ps --long

View information about system processes.

Search terms: procedures, operations, tasks, ops

Usage:
  > ps {flags}

Flags:
  -h, --help: Display the help message for this command
  -l, --long: List all available columns for each entry.

Input/output types:
  ╭───┬─────────┬────────╮
  │ # │  input  │ output │
  ├───┼─────────┼────────┤
  │ 0 │ nothing │ table  │
  ╰───┴─────────┴────────╯

Examples:
  List the system processes
  > ps

  List the top 5 system processes with the highest memory usage
  > ps | sort-by mem | last 5

  List the top 3 system processes with the highest CPU usage
  > ps | sort-by cpu | last 3

  List the system processes with 'nu' in their names
  > ps | where name =~ 'nu'

  Get the parent process id of the current nu process
  > ps | where pid == $nu.pid | get ppid

Update how $NU_LIB_DIRS / $env.NU_LIB_DIRS is handled at startup time [toc]

PR #17563 by @fdncred

Changes how (really where) NU_LIB_DIRS and $env.NU_LIB_DIRS gets set. Specifically. so they can be used with:

  • nu -c like NU_LIB_DIRS=/some/path nu -c 'print $env.NU_LIB_DIRS;use some_module *;some_module main'
  • nu -I /some/path -c 'print $env.NU_LIB_DIRS;use some_module *;some_module main'

Details

  • It synchronizes $NU_LIB_DIRS and $env.NU_LIB_DIRS at startup
  • Both $NU_LIB_DIRS and $env.NU_LIB_DIRS contain defaults and user-specified paths and provided paths append to the list
  • Allows backwards compatibility with -I '\x1e for path separation as well as allows traditional /some/path1:/some/path2 or /some/path1;/some/path2 for Windows.
  • A little refactor to consolidate code and adjusted some tests

table command will now also respect path_columns metadata when rendering records [toc]

PR #17602 by @Juhan280

D:\Projects\nushell> ls | get 26
╭──────────┬─────────────────────╮
│ name     │ rust-toolchain.toml │
│ type     │ file                │
│ size     │ 956 B               │
│ modified │ 2 weeks ago         │
╰──────────┴─────────────────────╯

Cell path completion now works at a slightly broader range [toc]

PR #17598 by @blindFS

let foo = {a: b}
# ($foo).<tab>

Additional changes [toc]

  • The configuration file paths are no longer canonicalized. (#17369)
  • Disable ANSI coloring if TERM is set to "dumb" when $env.config.use_ansi_coloring is set to "auto". (#17368)
  • select is now documented as the retain operation, help --find retain points to it, and reject help directs users to select for the inverse behavior. (#17460)
  • Fixed an inconsistency where http commands with --pool flag were not applying TLS certificate verification. Pooled HTTPS connections now properly validate certificates, matching the behavior of regular (non-pooled) requests. (#17458)
  • format filesize now uses $env.config.float_precision to control decimal places for fractional values. (#17462)
    • Help: Clearer, more consistent help text for core language commands (def, let, mut, const, module, overlay, scope, extern, export *, control flow, and attribute commands). Example and parameter descriptions now end with periods and use clearer wording. (#17489)
  • Improves command and flag descriptions in crates/nu-cmd-extra so they follow the project's help-text style: start with a capital letter and end with a period. (#17490)
  • Improves help text for filter commands (e.g. each, select, where) with clearer, consistent descriptions. (#17494)
  • Help text for format commands (from csv, from json, to json, to nuon, to text, and related from/to commands) is now more consistent and easier to read: example and flag descriptions use consistent capitalization and punctuation, and a few command descriptions are clearer. Behavior of these commands is unchanged. (#17522)
  • This is PR 5 (out of 10 total smaller PRs for issue 5066) improves command descriptions, flag descriptions, and example descriptions for bytes, conversions, database, and date commands in crates/nu-command/src/, as part of Issue #5066 — "Help us with better command and parameter/flag descriptions." (#17523)
  • Help text for filesystem, path, and platform commands (cd, ls, open, rm, path join, path exists, clear, term size, whoami, and related commands) is now more consistent and easier to read: command, flag, and example descriptions use consistent capitalization and punctuation. Behavior of these commands is unchanged. (#17528)
  • This PR 9 (of 10 for Issue 5066) improves command descriptions, flag descriptions, and example descriptions for string-related commands in crates/nu-command/src/strings/, as part of Issue #5066 — "Help us with better command and parameter/flag descriptions." (#17545)
  • All environment variable names are now case-insensitive for lookups and case-preserving for storage on all operating systems. (#17558)
  • More informative error for format date with dates outside the 0-9999 year range. (#17589)
  • Improves command and parameter/flag descriptions for the network, system, and viewers modules (Issue #5066). (#17546)
  • Improved command and parameter/flag descriptions for consistency. (#17639)
  • ls now escapes control characters in filenames instead of passing them through to the terminal. (#17580)
  • history | last x will be in ascending order. (#17645)
  • The new built-in commands clip copy and clip paste are now behind the experimental option native-clip. (#17664)

Bug fixes [toc]

error make might now be used in a match statement [toc]

PR #17323 by @KaiSforza

Fix error make input when used in a match statement, example:

# Match inputs that
[{foo: bar} {foo: baz}]
| where foo == bar
| match $in {
    [] => []
    $x => {error make {msg: 'works'}}
}

Nushell allows ansi structured colors to use codes or names now. [toc]

PR #17514 by @fdncred

Now correctly applies strike-through without color reversal
> ansi --escape { fg: "#ff0000" bg: "#000000" attr: "strike" }
Invalid attribute codes now show helpful errors
> ansi --escape { fg: "#ff0000" attr: "x" }
Error: nu::shell::error

  × Invalid ANSI attribute code
  help: Valid codes are: b (bold), i (italic), u (underline), s (strike), d (dimmed), r (reverse), h (hidden), l
        (blink), n (normal)
Invalid attribute codes now show helpful errors
> ansi --escape { fg: "#ff0000" attr: "invalid" }
Error: nu::shell::error

  × Invalid ANSI attribute name
  help: Valid names are: bold, italic, underline, strike, dimmed, reverse, hidden, blink, normal
Multiple attributes as codes
> ansi --escape { fg: "#ff0000" attr: "biu" }  # bold + italic + underline
Multiple attributes as names
> ansi --escape { fg: "#00ff00" attr: [bold italic] }
Mixed codes and names
> ansi --escape { fg: "#0000ff" attr: [b, underline] }

Fixed math median returning incorrect results when NaN values are present in the input [toc]

PR #17521 by @cuiweixie

math median did include NaN values for its calculation, this is fixed now.

Before:

> [NaN NaN 1 2 3 4] | math median
3.5

After:

> [NaN NaN 1 2 3 4] | math median
2.5

Consistent variable expansion in path arguments [toc]

PR #17547 by @evolvomind

Path arguments that use variable interpolation (e.g. mkdir dir/($name)) now behave consistently across commands. Previously, some commands (like print) expanded these expressions correctly while others (like mkdir) treated them as literal text and created paths such as dir/($name). Commands that accept path-like arguments (including mkdir) now expand variables in path expressions the same way.

Example: [ a b c ] | each { mkdir out/($in) } now creates out/a, out/b, and out/c instead of a single directory named out/($in).

Switch flags in custom commands are properly typed as bool [toc]

PR #17118 by @Bahex

Switch flags (named flags without a type or default value) are typed bool, previously this information was not available to the parse-time type checking.

Fix hang when capturing large external command output [toc]

PR #17571 by @WindSoilder

In pipefail, nushell no longer hang when assigning too many output of a external command to a variable, for example:

> use std
> "a" | std repeat (1 * 1024 * 1024) o> ttt.txt
> let x = (bat ttt.txt)

Globs now work at assignment time. [toc]

PR #17596 by @fdncred

Before

> let g: glob = "*.toml"
> ls $g
Error: nu::shell::error

  × No matches found for DoNotExpand("*.toml")
   ╭─[entry #3:1:4]
 1 │ ls $g
   ·    ─┬
   ·     ╰── Pattern, file or folder not found
   ╰────
  help: no matches found

After

D:\Projects\nushell> let g: glob = "*.toml"
D:\Projects\nushell> ls $g
╭───┬─────────────────────┬──────┬─────────┬──────────────╮
│ # │        name         │ type │  size   │   modified   │
├───┼─────────────────────┼──────┼─────────┼──────────────┤
│ 0 │ Cargo.toml          │ file │ 11,4 kB │ a day ago    │
│ 1 │ Cross.toml          │ file │   684 B │ 6 months ago │
│ 2 │ rust-toolchain.toml │ file │   956 B │ 2 weeks ago  │
│ 3 │ typos.toml          │ file │   732 B │ 3 days ago   │
╰───┴─────────────────────┴──────┴─────────┴──────────────╯

Still working

> let g = "*.toml" | into glob
> ls $g
╭───┬─────────────────────┬──────┬─────────┬──────────────╮
│ # │        name         │ type │  size   │   modified   │
├───┼─────────────────────┼──────┼─────────┼──────────────┤
│ 0 │ Cargo.toml          │ file │ 11,4 kB │ a day ago    │
│ 1 │ Cross.toml          │ file │   684 B │ 6 months ago │
│ 2 │ rust-toolchain.toml │ file │   956 B │ 2 weeks ago  │
│ 3 │ typos.toml          │ file │   732 B │ 3 days ago   │
╰───┴─────────────────────┴──────┴─────────┴──────────────╯
> glob $g
╭───┬─────────────────────────────────────────╮
│ 0 │ D:\Projects\nushell\Cargo.toml          │
│ 1 │ D:\Projects\nushell\Cross.toml          │
│ 2 │ D:\Projects\nushell\rust-toolchain.toml │
│ 3 │ D:\Projects\nushell\typos.toml          │
╰───┴─────────────────────────────────────────╯
> ls ...(glob $g)
╭───┬─────────────────────────────────────────┬──────┬─────────┬──────────────╮
│ # │                  name                   │ type │  size   │   modified   │
├───┼─────────────────────────────────────────┼──────┼─────────┼──────────────┤
│ 0 │ D:\Projects\nushell\Cargo.toml          │ file │ 11,4 kB │ a day ago    │
│ 1 │ D:\Projects\nushell\Cross.toml          │ file │   684 B │ 6 months ago │
│ 2 │ D:\Projects\nushell\rust-toolchain.toml │ file │   956 B │ 2 weeks ago  │
│ 3 │ D:\Projects\nushell\typos.toml          │ file │   732 B │ 3 days ago   │
╰───┴─────────────────────────────────────────┴──────┴─────────┴──────────────╯

Normalize paths for which command. [toc]

PR #17653 by @fdncred

Windows users will notice this more.

Before

> use std\clip copy # or use std/clip copy
> which copy
╭───┬─────────┬─────────────────┬────────╮
│ # │ command │      path       │  type  │
├───┼─────────┼─────────────────┼────────┤
│ 0 │ copy    │ std/clip\mod.nu │ custom │
╰───┴─────────┴─────────────────┴────────╯

After

> use std\clip copy # or use std/clip copy
> which copy
╭───┬─────────┬─────────────────┬────────╮
│ # │ command │      path       │  type  │
├───┼─────────┼─────────────────┼────────┤
│ 0 │ copy    │ std/clip/mod.nu │ custom │
╰───┴─────────┴─────────────────┴────────╯

Changed source of REPL entries [toc]

PR #17655 by @fdncred

Changed entry # to repl_entry # so that it's easier to understand that the source is from the repl.

> def l [] { ls -am | sort-by type name }
> which l
╭───┬─────────┬────────────────┬────────╮
│ # │ command │      path      │  type  │
├───┼─────────┼────────────────┼────────┤
│ 0 │ l       │ repl_entry #39 │ custom │
╰───┴─────────┴────────────────┴────────╯

Collecting a pipeline checks external command status [toc]

PR #17579 by @132ikl

Previously, if an external command failed and was piped into collect, the pipeline would still output a value:

> $env.config.display_errors.exit_code = true
> debug experimental-options | where identifier == pipefail | get enabled.0
true
> nu -c 'print meow; exit 1' | lines | length | collect
1
Error: nu::shell::non_zero_exit_code

  × External command had a non-zero exit code
   ╭─[entry #7:1:1]
 1 │ nu -c 'print meow; exit 1' | lines | length | collect
   · ─┬
   ·  ╰── exited with code 1
   ╰────

Now, the error occurs before the pipeline outputs anything:

> $env.config.display_errors.exit_code = true
> debug experimental-options | where identifier == pipefail | get enabled.0
true
> nu -c 'print meow; exit 1' | lines | length | collect
Error: nu::shell::non_zero_exit_code

  × External command had a non-zero exit code
   ╭─[repl_entry #10:1:1]
 1 │ nu -c 'print meow; exit 1' | lines | length | collect
   · ─┬
   ·  ╰── exited with code 1
   ╰────

Note that this only occurs for explicit collects, and not implicit collects.

Built-in clip copy now behaves like std/clip copy [toc]

PR #17663 by @fdncred

Experimental option

This feature is behind an experimental option. Run Nushell with --experimental-option=native-clip or set before running Nushell the environment variable to NU_EXPERIMENTAL_OPTIONS=native-clip.

Copy nushell tables to the clipboard without ansi escape sequences.

ls | clip copy

Other fixes [toc]

  • it is now a reserved variable name. If you had scripts which assigned let $it or mut $it, the variable name must be changed. (#17381)
  • Remove unlet variables from completions. (#17383)
  • Allow Swiss German keyboard, specifically AltGr keys, with explore regex (#17382)
  • Allows view source to see if --wrapped or --env was used in the custom command and reconstruct it properly. (#17423)
  • Fixed reading old plugin files to migrate. (#17437)
  • Fix issue where drilling into a large dataset in explore opened on the last page instead of the top. (#17532)
  • Fixes panics caused by referencing $in in aliases (#17553)
  • Fixed a crash when nushell exits after its terminal has already been torn down (e.g. closing an editor with an embedded nushell terminal). (#17581)
  • Fixed a crash when nushell tries to report an error after its terminal has already been torn down (e.g. the terminal emulator crashes). (#17606)
  • Fixes a panic with detect columns --ignore-box-chars by adjusting character boundary indexes. (#17627)
  • view span now allows zero-length spans and rejects spans that are out-of-bounds. (#17637)

Hall of fame [toc]

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

authorchangelink
@fdncredAdd an opaque popup windows that shows the keybindings for explore regex#17384
@ChrisDentonReplace more canonicalize with absolute#17412
@fdncredRefactor cli arg passing to make it more robust and testable#17405
@fdncredThis PR introduces some pushdown optimizations with last, first, select, and length when used with the history command and sqlite databases.#17415
@fdncredFixup cargo semver-checks with history#17457
@smartcoder0777input --reedline --default now pre-fills the editable input buffer with the default value, making interactive flows like renaming files faster while keeping the existing “empty submit returns default” behavior.#17400
@fdncredFixup bugs and keybindings in explore regex#17456
@fennewaldMade umask detection threadsafe#17471
@mooooojiRemove unreachable short-flag empty-group check#17492
@hustcerTerminal emulators with semantic prompt support (like Ghostty) can now properly distinguish between primary prompts, right prompts, and continuation prompts. This improves prompt navigation and other shell integration features. It also enables click_events in Kitty and Ghostty so that you can click on the repl line and it moves your cursor.#17468
@weirdanFix poll/pool typo for http pool#17519
@fdncredAdd nu to the ignore_list for :try in explore#17533
@maxim-uvarovFix a panic when typing expressions like pathopens.d | vd $in in the REPL. The panic occurred during syntax highlighting when replace_in_variable tried to mutate a block in the permanent (immutable) engine state.#17539
@monigarrPR 8 (of 10) Issue 5066 help text nu-command math random#17544
@fdncredCleanup ansi command pr.md#17555
@ysthakurN/A, users don't need to do anything, and it's a minor visual change.#17424
@it-education-mdFixed: pipeline let now errors when attempting to assign to builtin variables like $in, $it, $env, and $nu.#17525
@hustcerTry to fix "TLS required, but transport is unsecured" error#17568
@fdncredThe sys host command and the uname command are now const commands.#17593
@amaanqN/A I think, this is solely about avoiding one allocation when writing to stderr.#17613
@fmotallebAndroid builds fail using arboard clipboard#17619
@Juhan280Fix compilation on targets other than linux, windows and macos#17626
@BahexReduce object churn by reusing closures#17617
@veeceeyStrip ANSI escape codes from custom completion values#17607
@fdncredCustom subcommand help#17610
@hustcerIncrease help indention to fix the docs build error#17659

Full changelog [toc]

authortitlelink
@132iklMake collect a keyword command, check pipefail on Instruction::Collect#17579
@Ady0333Allow .ps1 files in command completion on Windows#17362
@Bahexfix: switch parameters are now typed bool#17118
@Bahexrefactor(par-each): reduce object churn by reusing closures#17617
@BluewyDiamondMake rm also like mv, du, cp#17509
@ChrisDentonDon't canonicalize config path#17369
@ChrisDentonReplace more canonicalize with absolute#17412
@ChrisDentonFix old plugin file migration#17437
@InnocentZeroSkip columns#17526
@Juhan280feat: add linewise and non-blank start edit commands#17508
@Juhan280feat: add path_columns to PipelineMetadata for flexible path rendering#17540
@Juhan280fix(mktemp): make --tmpdir behaviour aligned with coreutils/uutils#17549
@Juhan280feat(commands): add path_columns metadata for du command#17560
@Juhan280refactor: deprecate datasource-ls in favor of path-columns#17562
@Juhan280feat(nu-command): add --keep-last flag for uniq-by command#17564
@Juhan280feat(table): make record render also respect path_columns metadata#17602
@Juhan280fix compilation on targets other than linux, windows and macos#17626
@KaiSforzaerror_make: Add Type::Any to input type#17323
@NotTheDr01dsFix history | last 10 being in descending order#17645
@NotTheDr01dsUpdated metadata-set example to use --path-columns syntax#17667
@NotTheDr01dsReworked another deprecated metadata set example#17672
@WindSoilderSupport try {} finally {}#17397
@WindSoilderupdate assert_cmd to 2.1.1#17426
@WindSoilderpipefail: enable by default#17449
@WindSoildertry..finally: finally block still runs even if exit is used inside try.#17451
@WindSoilderupdate dependencies#17497
@WindSoilderupdate uu libs to 0.6.0#17551
@WindSoilderpipefail: fixing freeze when assigning a large result of an external command to a variable.#17571
@amaanqfix(ls): escape control characters in filenames to prevent terminal corruption#17580
@amaanqfix: use write_all instead of eprintln! to avoid double-panic on stderr teardown#17581
@amaanqfix: replace eprintln! with writeln! in error reporting to prevent double-panic#17606
@amaanqfix: use writeln! instead of format! and write_all#17613
@andrewgazelkafeat(mcp): add HTTP streaming transport and cancellation support#17161
@app/dependabotbuild(deps): bump data-encoding from 2.9.0 to 2.10.0#17344
@app/dependabotbuild(deps): bump quick-xml from 0.38.3 to 0.39.0#17347
@app/dependabotbuild(deps): bump crate-ci/typos from 1.42.0 to 1.42.1#17388
@app/dependabotbuild(deps): bump shadow-rs from 1.5.0 to 1.6.0#17390
@app/dependabotbuild(deps): bump lsp-textdocument from 0.4.2 to 0.5.0#17391
@app/dependabotbuild(deps): bump crate-ci/typos from 1.42.1 to 1.42.3#17439
@app/dependabotbuild(deps): bump uuid from 1.19.0 to 1.20.0#17440
@app/dependabotbuild(deps): bump sysinfo from 0.37.2 to 0.38.0#17442
@app/dependabotbuild(deps): bump shadow-rs from 1.6.0 to 1.7.0#17443
@app/dependabotbuild(deps): bump crate-ci/typos from 1.42.3 to 1.43.1#17483
@app/dependabotbuild(deps): bump git2 from 0.20.0 to 0.20.4#17495
@app/dependabotbuild(deps): bump crate-ci/typos from 1.43.1 to 1.43.4#17541
@app/dependabotbuild(deps): bump crate-ci/typos from 1.43.4 to 1.43.5#17582
@app/dependabotbuild(deps): bump quickcheck from 1.0.3 to 1.1.0#17584
@app/dependabotbuild(deps): bump rmcp from 0.14.0 to 0.16.0#17585
@app/dependabotbuild(deps): bump uuid from 1.20.0 to 1.21.0#17587
@astral-lfix std repeat returning empty list on null input#17332
@astral-luse RFC 3339 formatting for displaying dates with year > 9999#17589
@astral-ladd --timeout flag to input listen#17595
@ayax79allow aliasing to work on sub commands#17359
@ayax79Display the help for the aliased command when calling help &lt;alias&gt;#17365
@ayax79Polars: introducing polars entropy#17377
@ayax79bumped rmcp lib: 0.8 -> 0.13#17392
@benblankAdd a umask command#17386
@blindFSfix: block duplication for aliased ones only in replace_in_variable#17553
@blindFSfeat(completion): cellpath completion now fallback to type based when value is unknown#17598
@cableheadfeat(std/formats): set content-type metadata for ndjson, jsonl, ndnuon#17398
@cableheadAllow Ctrl+C to interrupt HTTP requests#17507
@cableheadrefactor: deprecate metadata set --merge in favor of closure form#17537
@cptpiepmatzMove native clip commands behind an experimental option#17664
@cuiweixiefix: median should use sorted len#17521
@evolvomindFix variable expansion inconsistency in path arguments for commands using GlobPattern (Issue #17505)#17547
@fdncredUpdate UseAnsiColoring with TERM=dumb#17368
@fdncredUpdate explore regex to use AltGr keys#17382
@fdncredremove unlet vars from completions#17383
@fdncredadd explore regex help popup#17384
@fdncredbump rust toolchain to 1.91.1#17395
@fdncredadd short params to join#17396
@fdncredRefactor cli lexopt#17405
@fdncredadd special handling for sqlite dbs with last, first, select, length#17415
@fdncredupdate view source to show flags on custom commands#17423
@fdncredupdate to ratatui 0.30#17430
@fdncredmake let pass-thru in mid pipeline, output no values when assigned at beginning of the pipeline, output values at the end of the pipeline#17446
@fdncredDeserialize spans in ast --json command#17452
@fdncredadd more rules to agents.md#17453
@fdncredfixup bugs and keybindings in explore regex#17456
@fdncredfixup cargo semver-checks with history#17457
@fdncredUpdate formats mod.nu#17459
@fdncredupdate nushell to reedline to 4c16687#17511
@fdncredupdate structured ansi to support attr names and codes#17514
@fdncredupdate to latest reedline commit bdcc842#17516
@fdncreddisable auto tail and track previous row count in push_layer in explore#17532
@fdncredadd nu to the ignore_list for :try in explore#17533
@fdncredcleanup ansi command pr.md#17555
@fdncredabstract env var names so they're insensitive on windows and sensitive on other operating systems#17558
@fdncredUpdate how $NU_LIB_DIRS / $env.NU_LIB_DIRS is handled at startup time#17563
@fdncredadd user id to sys users#17577
@fdncredupdate nushell to latest reedline cefb611#17578
@fdncredmake sys host and uname const commands#17593
@fdncredfix is-empty / is-not-empty on Empty Pipelines#17594
@fdncredfix let and ensure glob variables expand correctly in runtime and tests#17596
@fdncredCustom subcommand help#17610
@fdncredfix detect columns panic with unicode chars#17627
@fdncredallow view source to store file location in metadata#17635
@fdncredadd more standardization to command arguments#17639
@fdncredallow which to show where the file resides#17643
@fdncrednormalize slashes for which output#17653
@fdncredupdate nushell to latest reedline commit 4ad0d0cb#17654
@fdncredupdate entry to repl_entry for better understanding#17655
@fdncredAllow clip copy to copy tables without ansi escapes#17663
@fennewaldMake Umask detection threadsafe.#17471
@fmotallebFeat: native clipboard (using arboard)#17572
@fmotallebFeat: clip config#17616
@fmotallebfix: android builds fail using arboard clipboard#17619
@hovancikUpdate closures-related tutors#17178
@hustcerAdd OSC 133 P (k=) markers for semantic prompts#17468
@hustcerfix: pin libc and interprocess to fix cross-platform build failures#17506
@hustcerUpgrade interprocess to 2.3.1#17517
@hustcerTry to fix "TLS required, but transport is unsecured" error#17568
@hustcerIncrease help indention to fix the docs build error#17659
@it-education-mdFix pipeline let builtin var validation#17525
@jlcrochetcrossterm-based input list#17420
@jlcrochetinput list: remove $env.config.input_list#17550
@kaathewisegitMake it a reserved variable name#17381
@maxim-uvarovfix(http): apply TLS certificate verification to connection pool#17458
@maxim-uvarovfix: avoid panic in replace_in_variable for permanent blocks#17539
@monigarrImprove help text in nu-cmd-lang (core commands)#17489
@monigarrImprove help text in nu-cmd-extra (Issue 5066)#17490
@monigarr5066 help text pr3 nu command filters#17494
@monigarrIssue 5066 PR 4 (of 10 total) Improve help text for format commands.#17522
@monigarrImprove help text for bytes, conversions, database, date commands (Is…#17523
@monigarrIssue 5066 PR 7 (of 10) Improve help text for filesystem, path, and p…#17528
@monigarrPR 8 (of 10) Issue 5066 help text nu-command math random#17544
@monigarrPR 9 (of 10) Issue 5066 nu-command strings#17545
@monigarrPR 10 (of 10) Issue 5066 help text nu command network system viewers#17546
@mooooojichore(cli): remove unreachable short-flag empty-group check#17492
@pickxfix(view span): allow zero-length spans, reject spans that are out-of-bounds#17637
@pyz4feat(polars): add nulls-equal argument to polars join#17435
@pyz4feat(polars): join on advanced column expressions#17436
@sgvictorinoupdate eml-parser to 0.1.5#17417
@smartcoder0777Added --prefix/--suffix to join to disambiguate columns#17393
@smartcoder0777Prefill input --reedline buffer from --default#17400
@smartcoder0777docs: mention 'retain' in select/reject help#17460
@smartcoder0777Fix format filesize to respect .config.float_precision#17462
@stuartcarniefeat: enable OSC133 click events via reedline#17491
@teddygoodFix ParseOption handling in from ini#17600
@veeceeyStrip ANSI escape codes from custom completion values#17607
@weirdanFix poll/pool typo for http pool#17519
@ysthakurAllow custom/external completers to override display value#17330
@ysthakurBump to dev version 0.110.1#17370
@ysthakurSet display_override and match_indices for file completions#17424
Edit this page on GitHub
Contributors: Piepmatz