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 = polarsIt is not just for polars.
# for the quick maths
alias m = mathShorter 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
10The 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
helloSee, 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.modetheme) - 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-tableflag to disable and show records as single lines--per-columnflag to match filter text against each column independently (prevents false positives from cross-column matches)--displayaccepts 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/kin single/multi modes h/lfor 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
ato 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 fromcolor_config.search_result)footer: Footer text (default: dark_gray)separator: Separator line (inherits fromcolor_config.separator)prompt_marker: Prompt marker in fuzzy mode (default: green)selected_marker: Selection marker (default: green)table_header: Column headers (inherits fromcolor_config.header)table_separator: Column separators (inherits fromcolor_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 fromtable.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]
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
falseOther breaking changes [toc]
- Using
std repeatwith no pipeline input, ornothingtype input, now generates a list ofnullitems with the provided length. (#17332) - nushell will use
pipefailby default, so something like^false | linesreturns an empty list, with a failure exit status code (#17449) - Running
mktempwithout template will now create tmp files in tmpdir instead of current dir. (#17549) - Removed
$env.config.input_listconfig, instead sensible defaults are inherited fromcolor_config. (#17550)
Additions [toc]
Aliasing now works with parent commands [toc]
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]
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:
| Command | Content Type |
|---|---|
to ndjson | application/x-ndjson |
to jsonl | application/jsonl |
to ndnuon | application/x-ndnuon |
> use std/formats *
> [{a: 1}] | to ndjson | metadata | get content_type
application/x-ndjsonAllow custom/external completers to override display value [toc]
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]
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' }
aaIf 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
10It 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]
Introducing a nulls-equal argument in polars join, which allows joins to match on null values. See example:
> [[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]
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]
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 requiredvalueparameter controls whether to leave a blank line (trueto 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]
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
5let at end of the pipeline
> ls | length | let y
36
> $y
36let 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
10let not using pass-thru
> 10 | let a | $a + 5
15
> $a
10New flag --path-columns for metadata set to specify columns as file paths [toc]
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]
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 pasteMore 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]
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]
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]
joinnow supports--prefixand--suffixto 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 updatedblocktutor). (#17178) - This release adds the
umaskcommand, which lets you control the default permissions for newly-created files and directories. (#17386) - External command tab completion on Windows now includes PowerShell
.ps1scripts that are available inPATH. (#17362) - Enabling
shell_integration.osc133now also enables click-to-cursor in supported terminals. (#17491) - Added
--alland-atormto make it consistent withmv,du,cpcommands. (#17509) - Added
--leftflag todrop columncommand 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) ducommand will now also show colorful paths and icons likels(#17560)- Add user id to
sys usersoutput (#17577) - Added
input listen --timeoutflag 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]
# 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]
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 ppidUpdate how $NU_LIB_DIRS / $env.NU_LIB_DIRS is handled at startup time [toc]
Changes how (really where) NU_LIB_DIRS and $env.NU_LIB_DIRS gets set. Specifically. so they can be used with:
nu -clikeNU_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_DIRSand$env.NU_LIB_DIRSat startup - Both
$NU_LIB_DIRSand$env.NU_LIB_DIRScontain defaults and user-specified paths and provided paths append to the list - Allows backwards compatibility with
-I'\x1efor path separation as well as allows traditional/some/path1:/some/path2or/some/path1;/some/path2for Windows. - A little refactor to consolidate code and adjusted some tests
table command will now also respect path_columns metadata when rendering records [toc]
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]
let foo = {a: b}
# ($foo).<tab>Additional changes [toc]
- The configuration file paths are no longer canonicalized. (#17369)
- Disable ANSI coloring if
TERMis set to"dumb"when$env.config.use_ansi_coloringis set to"auto". (#17368) selectis now documented as the retain operation,help --find retainpoints to it, andreject helpdirects users to select for the inverse behavior. (#17460)- Fixed an inconsistency where
httpcommands with--poolflag 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)
- Help: Clearer, more consistent help text for core language commands (
- Improves command and flag descriptions in
crates/nu-cmd-extraso 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 relatedfrom/tocommands) 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 datewith 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)
lsnow escapes control characters in filenames instead of passing them through to the terminal. (#17580)history | last xwill be in ascending order. (#17645)- The new built-in commands
clip copyandclip pasteare now behind the experimental optionnative-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]
> ansi --escape { fg: "#ff0000" bg: "#000000" attr: "strike" }> 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)> 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
> ansi --escape { fg: "#ff0000" attr: "biu" } # bold + italic + underline> ansi --escape { fg: "#00ff00" attr: [bold italic] }> 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.5After:
> [NaN NaN 1 2 3 4] | math median
2.5Consistent 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]
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]
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 foundAfter
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]
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]
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]
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]
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 copyOther fixes [toc]
itis now a reserved variable name. If you had scripts which assignedlet $itormut $it, the variable name must be changed. (#17381)- Remove
unletvariables from completions. (#17383) - Allow Swiss German keyboard, specifically
AltGrkeys, withexplore regex(#17382) - Allows
view sourceto see if--wrappedor--envwas 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
exploreopened on the last page instead of the top. (#17532) - Fixes panics caused by referencing
$inin 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-charsby adjusting character boundary indexes. (#17627) view spannow 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! 🙏
| author | change | link |
|---|---|---|
| @fdncred | Add an opaque popup windows that shows the keybindings for explore regex | #17384 |
| @ChrisDenton | Replace more canonicalize with absolute | #17412 |
| @fdncred | Refactor cli arg passing to make it more robust and testable | #17405 |
| @fdncred | This PR introduces some pushdown optimizations with last, first, select, and length when used with the history command and sqlite databases. | #17415 |
| @fdncred | Fixup cargo semver-checks with history | #17457 |
| @smartcoder0777 | input --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 |
| @fdncred | Fixup bugs and keybindings in explore regex | #17456 |
| @fennewald | Made umask detection threadsafe | #17471 |
| @moooooji | Remove unreachable short-flag empty-group check | #17492 |
| @hustcer | Terminal 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 |
| @weirdan | Fix poll/pool typo for http pool | #17519 |
| @fdncred | Add nu to the ignore_list for :try in explore | #17533 |
| @maxim-uvarov | Fix 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 |
| @monigarr | PR 8 (of 10) Issue 5066 help text nu-command math random | #17544 |
| @fdncred | Cleanup ansi command pr.md | #17555 |
| @ysthakur | N/A, users don't need to do anything, and it's a minor visual change. | #17424 |
| @it-education-md | Fixed: pipeline let now errors when attempting to assign to builtin variables like $in, $it, $env, and $nu. | #17525 |
| @hustcer | Try to fix "TLS required, but transport is unsecured" error | #17568 |
| @fdncred | The sys host command and the uname command are now const commands. | #17593 |
| @amaanq | N/A I think, this is solely about avoiding one allocation when writing to stderr. | #17613 |
| @fmotalleb | Android builds fail using arboard clipboard | #17619 |
| @Juhan280 | Fix compilation on targets other than linux, windows and macos | #17626 |
| @Bahex | Reduce object churn by reusing closures | #17617 |
| @veeceey | Strip ANSI escape codes from custom completion values | #17607 |
| @fdncred | Custom subcommand help | #17610 |
| @hustcer | Increase help indention to fix the docs build error | #17659 |
Full changelog [toc]
| author | title | link |
|---|---|---|
| @132ikl | Make collect a keyword command, check pipefail on Instruction::Collect | #17579 |
| @Ady0333 | Allow .ps1 files in command completion on Windows | #17362 |
| @Bahex | fix: switch parameters are now typed bool | #17118 |
| @Bahex | refactor(par-each): reduce object churn by reusing closures | #17617 |
| @BluewyDiamond | Make rm also like mv, du, cp | #17509 |
| @ChrisDenton | Don't canonicalize config path | #17369 |
| @ChrisDenton | Replace more canonicalize with absolute | #17412 |
| @ChrisDenton | Fix old plugin file migration | #17437 |
| @InnocentZero | Skip columns | #17526 |
| @Juhan280 | feat: add linewise and non-blank start edit commands | #17508 |
| @Juhan280 | feat: add path_columns to PipelineMetadata for flexible path rendering | #17540 |
| @Juhan280 | fix(mktemp): make --tmpdir behaviour aligned with coreutils/uutils | #17549 |
| @Juhan280 | feat(commands): add path_columns metadata for du command | #17560 |
| @Juhan280 | refactor: deprecate datasource-ls in favor of path-columns | #17562 |
| @Juhan280 | feat(nu-command): add --keep-last flag for uniq-by command | #17564 |
| @Juhan280 | feat(table): make record render also respect path_columns metadata | #17602 |
| @Juhan280 | fix compilation on targets other than linux, windows and macos | #17626 |
| @KaiSforza | error_make: Add Type::Any to input type | #17323 |
| @NotTheDr01ds | Fix history | last 10 being in descending order | #17645 |
| @NotTheDr01ds | Updated metadata-set example to use --path-columns syntax | #17667 |
| @NotTheDr01ds | Reworked another deprecated metadata set example | #17672 |
| @WindSoilder | Support try {} finally {} | #17397 |
| @WindSoilder | update assert_cmd to 2.1.1 | #17426 |
| @WindSoilder | pipefail: enable by default | #17449 |
| @WindSoilder | try..finally: finally block still runs even if exit is used inside try. | #17451 |
| @WindSoilder | update dependencies | #17497 |
| @WindSoilder | update uu libs to 0.6.0 | #17551 |
| @WindSoilder | pipefail: fixing freeze when assigning a large result of an external command to a variable. | #17571 |
| @amaanq | fix(ls): escape control characters in filenames to prevent terminal corruption | #17580 |
| @amaanq | fix: use write_all instead of eprintln! to avoid double-panic on stderr teardown | #17581 |
| @amaanq | fix: replace eprintln! with writeln! in error reporting to prevent double-panic | #17606 |
| @amaanq | fix: use writeln! instead of format! and write_all | #17613 |
| @andrewgazelka | feat(mcp): add HTTP streaming transport and cancellation support | #17161 |
| @app/dependabot | build(deps): bump data-encoding from 2.9.0 to 2.10.0 | #17344 |
| @app/dependabot | build(deps): bump quick-xml from 0.38.3 to 0.39.0 | #17347 |
| @app/dependabot | build(deps): bump crate-ci/typos from 1.42.0 to 1.42.1 | #17388 |
| @app/dependabot | build(deps): bump shadow-rs from 1.5.0 to 1.6.0 | #17390 |
| @app/dependabot | build(deps): bump lsp-textdocument from 0.4.2 to 0.5.0 | #17391 |
| @app/dependabot | build(deps): bump crate-ci/typos from 1.42.1 to 1.42.3 | #17439 |
| @app/dependabot | build(deps): bump uuid from 1.19.0 to 1.20.0 | #17440 |
| @app/dependabot | build(deps): bump sysinfo from 0.37.2 to 0.38.0 | #17442 |
| @app/dependabot | build(deps): bump shadow-rs from 1.6.0 to 1.7.0 | #17443 |
| @app/dependabot | build(deps): bump crate-ci/typos from 1.42.3 to 1.43.1 | #17483 |
| @app/dependabot | build(deps): bump git2 from 0.20.0 to 0.20.4 | #17495 |
| @app/dependabot | build(deps): bump crate-ci/typos from 1.43.1 to 1.43.4 | #17541 |
| @app/dependabot | build(deps): bump crate-ci/typos from 1.43.4 to 1.43.5 | #17582 |
| @app/dependabot | build(deps): bump quickcheck from 1.0.3 to 1.1.0 | #17584 |
| @app/dependabot | build(deps): bump rmcp from 0.14.0 to 0.16.0 | #17585 |
| @app/dependabot | build(deps): bump uuid from 1.20.0 to 1.21.0 | #17587 |
| @astral-l | fix std repeat returning empty list on null input | #17332 |
| @astral-l | use RFC 3339 formatting for displaying dates with year > 9999 | #17589 |
| @astral-l | add --timeout flag to input listen | #17595 |
| @ayax79 | allow aliasing to work on sub commands | #17359 |
| @ayax79 | Display the help for the aliased command when calling help <alias> | #17365 |
| @ayax79 | Polars: introducing polars entropy | #17377 |
| @ayax79 | bumped rmcp lib: 0.8 -> 0.13 | #17392 |
| @benblank | Add a umask command | #17386 |
| @blindFS | fix: block duplication for aliased ones only in replace_in_variable | #17553 |
| @blindFS | feat(completion): cellpath completion now fallback to type based when value is unknown | #17598 |
| @cablehead | feat(std/formats): set content-type metadata for ndjson, jsonl, ndnuon | #17398 |
| @cablehead | Allow Ctrl+C to interrupt HTTP requests | #17507 |
| @cablehead | refactor: deprecate metadata set --merge in favor of closure form | #17537 |
| @cptpiepmatz | Move native clip commands behind an experimental option | #17664 |
| @cuiweixie | fix: median should use sorted len | #17521 |
| @evolvomind | Fix variable expansion inconsistency in path arguments for commands using GlobPattern (Issue #17505) | #17547 |
| @fdncred | Update UseAnsiColoring with TERM=dumb | #17368 |
| @fdncred | Update explore regex to use AltGr keys | #17382 |
| @fdncred | remove unlet vars from completions | #17383 |
| @fdncred | add explore regex help popup | #17384 |
| @fdncred | bump rust toolchain to 1.91.1 | #17395 |
| @fdncred | add short params to join | #17396 |
| @fdncred | Refactor cli lexopt | #17405 |
| @fdncred | add special handling for sqlite dbs with last, first, select, length | #17415 |
| @fdncred | update view source to show flags on custom commands | #17423 |
| @fdncred | update to ratatui 0.30 | #17430 |
| @fdncred | make 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 |
| @fdncred | Deserialize spans in ast --json command | #17452 |
| @fdncred | add more rules to agents.md | #17453 |
| @fdncred | fixup bugs and keybindings in explore regex | #17456 |
| @fdncred | fixup cargo semver-checks with history | #17457 |
| @fdncred | Update formats mod.nu | #17459 |
| @fdncred | update nushell to reedline to 4c16687 | #17511 |
| @fdncred | update structured ansi to support attr names and codes | #17514 |
| @fdncred | update to latest reedline commit bdcc842 | #17516 |
| @fdncred | disable auto tail and track previous row count in push_layer in explore | #17532 |
| @fdncred | add nu to the ignore_list for :try in explore | #17533 |
| @fdncred | cleanup ansi command pr.md | #17555 |
| @fdncred | abstract env var names so they're insensitive on windows and sensitive on other operating systems | #17558 |
| @fdncred | Update how $NU_LIB_DIRS / $env.NU_LIB_DIRS is handled at startup time | #17563 |
| @fdncred | add user id to sys users | #17577 |
| @fdncred | update nushell to latest reedline cefb611 | #17578 |
| @fdncred | make sys host and uname const commands | #17593 |
| @fdncred | fix is-empty / is-not-empty on Empty Pipelines | #17594 |
| @fdncred | fix let and ensure glob variables expand correctly in runtime and tests | #17596 |
| @fdncred | Custom subcommand help | #17610 |
| @fdncred | fix detect columns panic with unicode chars | #17627 |
| @fdncred | allow view source to store file location in metadata | #17635 |
| @fdncred | add more standardization to command arguments | #17639 |
| @fdncred | allow which to show where the file resides | #17643 |
| @fdncred | normalize slashes for which output | #17653 |
| @fdncred | update nushell to latest reedline commit 4ad0d0cb | #17654 |
| @fdncred | update entry to repl_entry for better understanding | #17655 |
| @fdncred | Allow clip copy to copy tables without ansi escapes | #17663 |
| @fennewald | Make Umask detection threadsafe. | #17471 |
| @fmotalleb | Feat: native clipboard (using arboard) | #17572 |
| @fmotalleb | Feat: clip config | #17616 |
| @fmotalleb | fix: android builds fail using arboard clipboard | #17619 |
| @hovancik | Update closures-related tutors | #17178 |
| @hustcer | Add OSC 133 P (k=) markers for semantic prompts | #17468 |
| @hustcer | fix: pin libc and interprocess to fix cross-platform build failures | #17506 |
| @hustcer | Upgrade interprocess to 2.3.1 | #17517 |
| @hustcer | Try to fix "TLS required, but transport is unsecured" error | #17568 |
| @hustcer | Increase help indention to fix the docs build error | #17659 |
| @it-education-md | Fix pipeline let builtin var validation | #17525 |
| @jlcrochet | crossterm-based input list | #17420 |
| @jlcrochet | input list: remove $env.config.input_list | #17550 |
| @kaathewisegit | Make it a reserved variable name | #17381 |
| @maxim-uvarov | fix(http): apply TLS certificate verification to connection pool | #17458 |
| @maxim-uvarov | fix: avoid panic in replace_in_variable for permanent blocks | #17539 |
| @monigarr | Improve help text in nu-cmd-lang (core commands) | #17489 |
| @monigarr | Improve help text in nu-cmd-extra (Issue 5066) | #17490 |
| @monigarr | 5066 help text pr3 nu command filters | #17494 |
| @monigarr | Issue 5066 PR 4 (of 10 total) Improve help text for format commands. | #17522 |
| @monigarr | Improve help text for bytes, conversions, database, date commands (Is… | #17523 |
| @monigarr | Issue 5066 PR 7 (of 10) Improve help text for filesystem, path, and p… | #17528 |
| @monigarr | PR 8 (of 10) Issue 5066 help text nu-command math random | #17544 |
| @monigarr | PR 9 (of 10) Issue 5066 nu-command strings | #17545 |
| @monigarr | PR 10 (of 10) Issue 5066 help text nu command network system viewers | #17546 |
| @moooooji | chore(cli): remove unreachable short-flag empty-group check | #17492 |
| @pickx | fix(view span): allow zero-length spans, reject spans that are out-of-bounds | #17637 |
| @pyz4 | feat(polars): add nulls-equal argument to polars join | #17435 |
| @pyz4 | feat(polars): join on advanced column expressions | #17436 |
| @sgvictorino | update eml-parser to 0.1.5 | #17417 |
| @smartcoder0777 | Added --prefix/--suffix to join to disambiguate columns | #17393 |
| @smartcoder0777 | Prefill input --reedline buffer from --default | #17400 |
| @smartcoder0777 | docs: mention 'retain' in select/reject help | #17460 |
| @smartcoder0777 | Fix format filesize to respect .config.float_precision | #17462 |
| @stuartcarnie | feat: enable OSC133 click events via reedline | #17491 |
| @teddygood | Fix ParseOption handling in from ini | #17600 |
| @veeceey | Strip ANSI escape codes from custom completion values | #17607 |
| @weirdan | Fix poll/pool typo for http pool | #17519 |
| @ysthakur | Allow custom/external completers to override display value | #17330 |
| @ysthakur | Bump to dev version 0.110.1 | #17370 |
| @ysthakur | Set display_override and match_indices for file completions | #17424 |