diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a194dd5e604..8e4e681a422 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -15,6 +15,4 @@ jobs:
- run: npm install
# - run: npm run build
- name: Build Static Docs
- env:
- NODE_OPTIONS: '--max_old_space_size=8192'
run: npm run build
diff --git a/.vuepress/client.js b/.vuepress/client.js
index 7508dd0b4ff..30391c6b5d8 100755
--- a/.vuepress/client.js
+++ b/.vuepress/client.js
@@ -5,6 +5,7 @@
*/
import { defineClientConfig } from 'vuepress/client';
+import AsciinemaPlayer from './components/AsciinemaPlayer.vue';
import BlogPosts from './components/BlogPosts.vue';
import JumpToc from './components/JumpToc.vue';
import PrBy from './components/PrBy.vue';
@@ -12,6 +13,7 @@ import ReleaseToc from './components/ReleaseToc.vue';
export default defineClientConfig({
enhance({ app }) {
+ app.component('AsciinemaPlayer', AsciinemaPlayer);
app.component('BlogPosts', BlogPosts);
app.component('JumpToc', JumpToc);
app.component('PrBy', PrBy);
diff --git a/.vuepress/components/AsciinemaPlayer.vue b/.vuepress/components/AsciinemaPlayer.vue
new file mode 100644
index 00000000000..a936754e1b9
--- /dev/null
+++ b/.vuepress/components/AsciinemaPlayer.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/.vuepress/styles/index.scss b/.vuepress/styles/index.scss
index 0542df0c611..28b4b55c90e 100755
--- a/.vuepress/styles/index.scss
+++ b/.vuepress/styles/index.scss
@@ -1,3 +1,5 @@
+@import '../../node_modules/asciinema-player/dist/bundle/asciinema-player.css';
+
@font-face {
font-family: 'Fira Code';
src:
diff --git a/blog/2026-02-28-nushell_v0_111_0.md b/blog/2026-02-28-nushell_v0_111_0.md
new file mode 100644
index 00000000000..e46b71447c1
--- /dev/null
+++ b/blog/2026-02-28-nushell_v0_111_0.md
@@ -0,0 +1,1274 @@
+---
+title: Nushell 0.111.0
+author: The Nu Authors
+author_site: https://www.nushell.sh/blog
+author_image: https://www.nushell.sh/blog/images/nu_logo.png
+excerpt: 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.
+---
+
+# 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](https://github.com/nushell/nushell/releases/tag/0.111.0) or from [crates.io](https://crates.io/crates/nu). 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](https://www.nushell.sh/book/plugins.html) you can install and use with Nushell.
+
+# Table of contents
+
+
+
+# Highlights and themes of this release
+
+## Select menus are smooth now
+
+[@jlcrochet](https://github.com/jlcrochet) went in and reworked how `input list` behaves in [#17420](https://github.com/nushell/nushell/pull/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!](#updated-input-list-command)
+
+## Type `polars` less now
+
+[@ayax79](https://github.com/ayax79) got tired of typing `polars x` again and again. So in [#17359](https://github.com/nushell/nushell/pull/17359) he added support for aliasing command groups.
+
+```nushell
+# no more polars all the time
+alias pl = polars
+```
+
+It is not just for `polars`.
+
+```nushell
+# 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.](#aliasing-now-works-with-parent-commands)
+
+## Try-Catch-Finally!
+
+For a long time Nushell had `try` and `catch`, but no `finally`. We got asked about it. Thanks to [@WindSoilder](https://github.com/WindSoilder) and [#17397](https://github.com/nushell/nushell/pull/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`:
+
+```ansi
+[38;5;14m> [1m[36mdef[22m[39m [32maa[39m [1m[32m[][22m[39m [1m[32m{
+ [36mtry[22m[39m [1m[34m{
+ [36mreturn[22m[39m [1m[35m10[34m
+ }[22m[39m [1m[36mfinally[22m[39m [1m[32m{
+ [36mprint[22m[39m [32m'aa'[1m
+ }
+}[22m[38;5;10m
+[38;5;14m> [1m[36maa[22m[39m
+aa
+10[0m
+```
+
+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](https://github.com/nushell/nushell/pull/17451) this also works with `exit`.
+
+```nushell
+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](#users-can-use-finally-after-try-catch) and the [`exit` entry](#finally-runs-even-after-exit).
+
+## Pipe-`let`-line
+
+Last release gave us `let` at the end of a pipeline. Now, thanks to [@fdncred](https://github.com/fdncred) in [#17446](https://github.com/nushell/nushell/pull/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.
+
+```ansi
+[38;5;14m> [32m"hello"[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35mmsg[39m [1m[35m|[22m[39m [1m[36mstr length[22m[39m
+5[38;5;10m
+[38;5;14m> [35m$msg[39m
+hello[0m
+```
+
+See, very nice. No need to break things apart just to stash a value.
+
+Assign variables anywhere, read more [here](#let-now-behaves-differently-inside-pipelines).
+
+## Experimental Native Clipboard
+
+::: important 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](https://github.com/fmotalleb) built the plugin [nu_plugin_clipboard](https://github.com/fmotalleb/nu_plugin_clipboard). We liked it enough that we asked to bring it into Nushell itself. That landed in [#17572](https://github.com/nushell/nushell/pull/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](#cross-platform-native-clipboard-commands).
+
+# Changes
+
+## Breaking changes
+
+### Updated `input list` command
+
+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
+
+The `is-empty` command and `is-not-empty` command now return a boolean value when the pipeline is `Pipeline::Empty`.
+
+```ansi
+[38;5;14m> [1m[36mdef[22m[39m [32mget_null[39m [1m[32m[][22m[39m [1m[32m{}[22m[38;5;10m
+[38;5;14m> [1m[36mget_null[22m[39m [1m[35m|[22m[39m [1m[36mis-empty[22m[39m
+true[38;5;10m
+[38;5;14m> [1m[36mget_null[22m[39m [1m[35m|[22m[39m [1m[36mis-not-empty[22m[39m
+false[0m
+```
+
+### Other breaking changes
+
+- Using `std repeat` with no pipeline input, or `nothing` type input, now generates a list of `null` items with the provided length. ([#17332](https://github.com/nushell/nushell/pull/17332))
+- nushell will use `pipefail` by default, so something like `^false | lines` returns an empty list, with a failure exit status code ([#17449](https://github.com/nushell/nushell/pull/17449))
+- Running `mktemp` without template will now create tmp files in tmpdir instead of current dir. ([#17549](https://github.com/nushell/nushell/pull/17549))
+- Removed `$env.config.input_list` config, instead sensible defaults are inherited from `color_config`. ([#17550](https://github.com/nushell/nushell/pull/17550))
+
+## Additions
+
+### Aliasing now works with parent commands
+
+When applying an alias, to a parent commands, the sub commands will use the alias.
+
+```ansi :no-line-numbers :collapsed-lines=8
+[38;5;14m> [1m[36malias[22m[39m [32mpl[39m [1m[36m=[22m[39m [1m[36mpolars[22m[38;5;10m
+[38;5;14m> [1m[36mps[22m[39m [1m[35m|[22m[39m [1m[36mpl into-df[22m[39m [1m[35m|[22m[39m [1m[36mpl select[22m[39m [1m[36m[[34m([36mpl col[22m[39m [32mname[1m[34m)[36m [34m([36mpl col[22m[39m [32mpid[1m[34m)[36m][22m[39m [1m[35m|[22m[39m [1m[36mpl collect[22m[39m
+╭─────┬─────────────────────┬───────╮
+│ [1m[32m#[22m[39m │ [1m[32mname[22m[39m │ [1m[32mpid[22m[39m │
+├─────┼─────────────────────┼───────┤
+│ [1m[32m0[22m[39m │ nvcontainer.exe │ 44560 │
+│ [1m[32m1[22m[39m │ svchost.exe │ 26772 │
+│ [1m[32m2[22m[39m │ sihost.exe │ 10176 │
+│ [1m[32m3[22m[39m │ svchost.exe │ 23924 │
+│ [1m[32m4[22m[39m │ svchost.exe │ 28120 │
+│ [1m[32m5[22m[39m │ taskhostw.exe │ 32172 │
+│ [1m[32m6[22m[39m │ itype.exe │ 43200 │
+│ [1m[32m7[22m[39m │ ipoint.exe │ 42440 │
+│ [1m[32m8[22m[39m │ Explorer.EXE │ 46052 │
+│ [1m[32m9[22m[39m │ ShellHost.exe │ 41144 │
+│ [1m[32m...[22m[39m │ ... │ ... │
+│ [1m[32m138[22m[39m │ WindowsTerminal.exe │ 32588 │
+│ [1m[32m139[22m[39m │ OpenConsole.exe │ 44248 │
+│ [1m[32m140[22m[39m │ nu.exe │ 34792 │
+│ [1m[32m141[22m[39m │ VCTIP.EXE │ 48988 │
+│ [1m[32m142[22m[39m │ vivaldi.exe │ 32476 │
+│ [1m[32m143[22m[39m │ vivaldi.exe │ 18724 │
+│ [1m[32m144[22m[39m │ vivaldi.exe │ 10148 │
+│ [1m[32m145[22m[39m │ cargo.exe │ 36868 │
+│ [1m[32m146[22m[39m │ cargo.exe │ 13460 │
+│ [1m[32m147[22m[39m │ nu.exe │ 32912 │
+╰─────┴─────────────────────┴───────╯[0m
+```
+
+### Introducing `polars entropy`
+
+Introduces the command `polars entropy` used to compute the entropy as `-sum(pk * log(pk))` where `pk` are discrete probabilities.
+
+```ansi
+[38;5;14m> [1m[34m[[[22m[32ma[1m[34m]; [[35m1[34m] [[35m2[34m] [[35m3[34m]][22m[39m [1m[35m|[22m[39m [1m[36mpolars into-df[22m[39m [1m[35m|[22m[39m [1m[36mpolars select[22m[39m [1m[34m([36mpolars col[22m[39m [32ma[39m [1m[35m|[22m[39m [1m[36mpolars entropy[22m[39m [1m[34m--base[22m[39m [1m[35m2[34m)[22m[39m [1m[35m|[22m[39m [1m[36mpolars collect[22m[39m
+╭───┬──────╮
+│ [1m[32m#[22m[39m │ [1m[32ma[22m[39m │
+├───┼──────┤
+│ [1m[32m0[22m[39m │ 1.46 │
+╰───┴──────╯[0m
+```
+
+### Content types for `to ndjson | jsonl | ndnuon` are now set properly
+
+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` |
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd/formats[39m [32m*[38;5;10m
+[38;5;14m> [1m[36m[{[22m[32ma[1m[36m: [35m1[36m}][22m[39m [1m[35m|[22m[39m [1m[36mto ndjson[22m[39m [1m[35m|[22m[39m [1m[36mmetadata[22m[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32mcontent_type[39m
+application/x-ndjson[0m
+```
+
+### Allow custom/external completers to override display value
+
+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.
+
+```nu
+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
+
+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`.
+
+```ansi
+[38;5;14m> [1m[36mlet[22m[39m [35mdf1[39m = [1m[34m[[[22m[32ma[1m[34m [22m[32mb[1m[34m]; [[22m[32m"2025-01-01 01:00:00+0000"[1m[34m [35m1[34m] [[22m[32m"2025-01-02 05:36:42+0000"[1m[34m [35m2[34m]][22m[39m [1m[35m|[22m[39m [1m[36mpolars into-df[22m[39m [1m[34m--schema[22m[39m [1m[36m{[22m[32ma[1m[36m: [22m[32m"datetime"[1m[36m, [22m[32mb[1m[36m: [22m[32mi8[1m[36m}[22m[38;5;10m
+[38;5;14m> [1m[36mlet[22m[39m [35mdf2[39m = [1m[34m[[[22m[32ma[1m[34m [22m[32mc[1m[34m]; [[22m[32m"2025-01-01 00:00:00+0000"[1m[34m [22m[32ma[1m[34m] [[22m[32m"2025-01-02 00:00:00+0000"[1m[34m [22m[32mb[1m[34m]][22m[39m [1m[35m|[22m[39m [1m[36mpolars into-df[22m[39m [1m[34m--schema[22m[39m [1m[36m{[22m[32ma[1m[36m: [22m[32m"datetime"[1m[36m, [22m[32mc[1m[36m: [22m[32mstr[1m[36m}[22m[38;5;10m
+[38;5;14m> [35m$df1[39m [1m[35m|[22m[39m [1m[36mpolars join[22m[39m [35m$df2[39m [1m[36m[[34m([36mpolars col[22m[39m [32ma[39m [1m[35m|[22m[39m [1m[36mpolars truncate[22m[39m [32m1d[1m[34m)[36m][22m[39m [1m[36m[[22m[32ma[1m[36m][22m[39m
+╭───┬────────────┬───┬────────────┬───╮
+│ [1m[32m#[22m[39m │ [1m[32ma[22m[39m │ [1m[32mb[22m[39m │ [1m[32ma_x[22m[39m │ [1m[32mc[22m[39m │
+├───┼────────────┼───┼────────────┼───┤
+│ [1m[32m0[22m[39m │ [35ma year ago[39m │ 1 │ [35ma year ago[39m │ a │
+│ [1m[32m1[22m[39m │ [35ma year ago[39m │ 2 │ [35ma year ago[39m │ b │
+╰───┴────────────┴───┴────────────┴───╯[0m
+```
+
+### Users can use `finally` after `try .. catch ..`
+
+#### `finally` always run whatever the error is happened inside `try` block or `catch` block.
+
+```ansi
+[38;5;14m> [1m[36mtry[22m[39m [1m[34m{ [35m1[22m[39m [33m/[39m [1m[35m0[34m }[22m[39m [1m[36mfinally[22m[39m [1m[32m{ [36mprint[22m[39m [32m'aa'[1m }[22m[39m
+aa[38;5;10m
+[38;5;14m> [1m[36mtry[22m[39m [1m[34m{ [35m1[22m[39m [33m/[39m [1m[35m0[34m }[22m[39m [1m[36mcatch[22m[39m [1m[32m{ [35m1[22m[39m [33m/[39m [1m[35m0[32m }[22m[39m [1m[36mfinally[22m[39m [1m[32m{ [36mprint[22m[39m [32m'aa'[1m }[22m[39m
+aa[0m
+```
+
+#### If users return something inside a custom command, finally still run, and respect that return value.
+
+```ansi {9} :no-line-numbers
+[38;5;14m> [1m[36mdef[22m[39m [32maa[39m [1m[32m[][22m[39m [1m[32m{
+ [36mtry[22m[39m [1m[34m{
+ [36mreturn[22m[39m [1m[35m10[34m
+ }[22m[39m [1m[36mfinally[22m[39m [1m[32m{
+ [36mprint[22m[39m [32m'aa'[1m
+ }
+}[22m[38;5;10m
+[38;5;14m> [1m[36maa[22m[39m
+aa
+10[0m
+```
+
+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.
+
+```nushell
+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`
+
+Introducing a `nulls-equal` argument in `polars join`, which allows joins to match on null values.
+See example:
+
+```ansi title="Join on nulls" :no-line-numbers
+[38;5;14m> [1m[34m[[[22m[32mcol1[1m[34m [22m[32mcol2[1m[34m]; [[35m2[34m [22m[32ma[1m[34m] [[35m3[34m [22m[32mb[1m[34m] [[22m[96mnull[1m[34m [22m[32mc[1m[34m]][35m
+|[22m[39m [1m[36mpolars into-df[35m
+|[22m[39m [1m[36mpolars join[22m[39m [1m[34m(
+ [[[22m[32mcol1[1m[34m [22m[32mcol3[1m[34m]; [[35m2[34m [22m[32mx[1m[34m] [[35m3[34m [22m[32my[1m[34m] [[22m[96mnull[1m[34m [22m[32mz[1m[34m]][22m[39m [1m[35m|[22m[39m [1m[36mpolars into-df[34m
+ )[22m[39m [1m[36m[[22m[32mcol1[1m[36m][22m[39m [1m[36m[[22m[32mcol1[1m[36m][22m[39m [1m[34m--nulls-equal[35m
+|[22m[39m [1m[36mpolars collect[22m[39m
+╭───┬──────┬──────┬──────╮
+│ [1m[32m#[22m[39m │ [1m[32mcol1[22m[39m │ [1m[32mcol2[22m[39m │ [1m[32mcol3[22m[39m │
+├───┼──────┼──────┼──────┤
+│ [1m[32m0[22m[39m │ 2 │ a │ x │
+│ [1m[32m1[22m[39m │ 3 │ b │ y │
+│ [1m[32m2[22m[39m │ │ c │ z │
+╰───┴──────┴──────┴──────╯[0m
+```
+
+### Deserialize spans in `ast --json` command
+
+Add the ability to see ast span contents when used with `--json` flag.
+
+```ansi :no-line-numbers :collapsed-lines=7
+[38;5;14m> [1m[36mast[22m[39m [32m'let a = ls | first 3'[39m [1m[34m--json[22m[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32mblock[39m [1m[35m|[22m[39m [1m[36mfrom json[22m[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32mpipelines[39m.[1m[35m0[22m[39m.[32melements[39m.[1m[35m0[22m[39m.[32mexpr[39m.[32mexpr[39m [1m[35m|[22m[39m [1m[36mtable[22m[39m [1m[34m-e[22m[39m
+╭──────┬────────────────────────────────────────────────────────────────────────╮
+│ │ ╭─────────────┬──────────────────────────────────────────────────────╮ │
+│ [1m[32mCall[22m[39m │ │ [1m[32mdecl_id[22m[39m │ 36 │ │
+│ │ │ │ ╭─────────────┬────────╮ │ │
+│ │ │ [1m[32mhead[22m[39m │ │ [1m[32mstart[22m[39m │ 150652 │ │ │
+│ │ │ │ │ [1m[32mend[22m[39m │ 150655 │ │ │
+│ │ │ │ │ [1m[32mspan_source[22m[39m │ let │ │ │
+│ │ │ │ ╰─────────────┴────────╯ │ │
+│ │ │ │ ╭───┬──────────────────────────────────────────────╮ │ │
+│ │ │ [1m[32marguments[22m[39m │ │ [1m[32m#[22m[39m │ [1m[32mPositional[22m[39m │ │ │
+│ │ │ │ ├───┼──────────────────────────────────────────────┤ │ │
+│ │ │ │ │ [1m[32m0[22m[39m │ ╭─────────┬──────────────────────────╮ │ │ │
+│ │ │ │ │ │ │ │ ╭─────────┬────╮ │ │ │ │
+│ │ │ │ │ │ │ [1m[32mexpr[22m[39m │ │ [1m[32mVarDecl[22m[39m │ 75 │ │ │ │ │
+│ │ │ │ │ │ │ │ ╰─────────┴────╯ │ │ │ │
+│ │ │ │ │ │ │ │ ╭─────────────┬────────╮ │ │ │ │
+│ │ │ │ │ │ │ [1m[32mspan[22m[39m │ │ [1m[32mstart[22m[39m │ 150656 │ │ │ │ │
+│ │ │ │ │ │ │ │ │ [1m[32mend[22m[39m │ 150657 │ │ │ │ │
+│ │ │ │ │ │ │ │ │ [1m[32mspan_source[22m[39m │ a │ │ │ │ │
+│ │ │ │ │ │ │ │ ╰─────────────┴────────╯ │ │ │ │
+│ │ │ │ │ │ │ [1m[32mspan_id[22m[39m │ 7027 │ │ │ │
+│ │ │ │ │ │ │ [1m[32mty[22m[39m │ Any │ │ │ │
+│ │ │ │ │ │ ╰─────────┴──────────────────────────╯ │ │ │
+│ │ │ │ │ [1m[32m1[22m[39m │ ╭─────────┬────────────────────────────────╮ │ │ │
+│ │ │ │ │ │ │ │ ╭───────┬─────╮ │ │ │ │
+│ │ │ │ │ │ │ [1m[32mexpr[22m[39m │ │ [1m[32mBlock[22m[39m │ 352 │ │ │ │ │
+│ │ │ │ │ │ │ │ ╰───────┴─────╯ │ │ │ │
+│ │ │ │ │ │ │ │ ╭─────────────┬──────────────╮ │ │ │ │
+│ │ │ │ │ │ │ [1m[32mspan[22m[39m │ │ [1m[32mstart[22m[39m │ 150660 │ │ │ │ │
+│ │ │ │ │ │ │ │ │ [1m[32mend[22m[39m │ 150672 │ │ │ │ │
+│ │ │ │ │ │ │ │ │ [1m[32mspan_source[22m[39m │ ls | first 3 │ │ │ │ │
+│ │ │ │ │ │ │ │ ╰─────────────┴──────────────╯ │ │ │ │
+│ │ │ │ │ │ │ [1m[32mspan_id[22m[39m │ 7026 │ │ │ │
+│ │ │ │ │ │ │ [1m[32mty[22m[39m │ Any │ │ │ │
+│ │ │ │ │ │ ╰─────────┴────────────────────────────────╯ │ │ │
+│ │ │ │ ╰───┴──────────────────────────────────────────────╯ │ │
+│ │ │ [1m[32mparser_info[22m[39m │ {record 0 fields} │ │
+│ │ ╰─────────────┴──────────────────────────────────────────────────────╯ │
+╰──────┴────────────────────────────────────────────────────────────────────────╯[0m
+```
+
+### `finally` runs even after `exit`
+
+If user runs `exit` inside `try`, the finally block will be run before nushell exits.
+
+```nu
+try { exit } finally { print 'aa' } # aa is printed.
+```
+
+To avoid the behavior, you can use `--abort` flag to exit anyway.
+
+```nu
+try { exit --abort } finally { print 'aa' } # aa is not printed.
+```
+
+### MCP: HTTP transport and cancellation
+
+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
+
+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
+
+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
+
+```ansi
+[38;5;14m> [1m[36mlet[22m[39m [35mx[39m = [1m[35m5[22m[38;5;10m
+[38;5;14m> [35m$x[39m
+5[0m
+```
+
+#### `let` at end of the pipeline
+
+```ansi
+[38;5;14m> [1m[36mls[22m[39m [1m[35m|[22m[39m [1m[36mlength[22m[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35my[39m
+36[38;5;10m
+[38;5;14m> [35m$y[39m
+36[0m
+```
+
+#### `let` pass-thru values (used mid pipeline)
+
+```ansi :no-line-numbers
+[38;5;14m> [32m"hello"[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35mmsg[39m [1m[35m|[22m[39m [1m[36mstr length[22m[39m
+5[38;5;10m
+[38;5;14m> [35m$msg[39m
+hello[38;5;10m
+
+[38;5;14m> [1m[36m[[35m2[36m [35m3[36m [35m4[36m][22m[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35mnums[39m [1m[35m|[22m[39m [1m[36mfirst[22m[39m
+2[38;5;10m
+
+[38;5;14m> [1m[36m[[35m2[36m [35m3[36m [35m4[36m][22m[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35mnums[39m [1m[35m|[22m[39m [1m[36mlast[22m[39m
+4[38;5;10m
+[38;5;14m> [35m$nums[39m
+╭───┬───╮
+│ [1m[32m0[22m[39m │ 2 │
+│ [1m[32m1[22m[39m │ 3 │
+│ [1m[32m2[22m[39m │ 4 │
+╰───┴───╯[0m
+```
+
+#### `let` used with `$in` mid pipeline
+
+```ansi
+[38;5;14m> [1m[35m10[22m[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35mx[39m [1m[35m|[22m[39m [35m$in[39m [33m+[39m [1m[35m5[22m[39m
+15[38;5;10m
+[38;5;14m> [35m$x[39m
+10[0m
+```
+
+#### `let` not using pass-thru
+
+```ansi
+[38;5;14m> [1m[35m10[22m[39m [1m[35m|[22m[39m [1m[36mlet[22m[39m [35ma[39m [1m[35m|[22m[39m [35m$a[39m [33m+[39m [1m[35m5[22m[39m
+15[38;5;10m
+[38;5;14m> [35m$a[39m
+10[0m
+```
+
+### New flag `--path-columns` for `metadata set` to specify columns as file paths
+
+`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:
+
+```nu
+glob * | wrap path | metadata set --path-columns [path]
+```
+
+### New flag `--keep-last` for `uniq-by`
+
+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:
+
+```ansi
+[38;5;14m> [1m[34m[[[22m[32mfruit[1m[34m [22m[32mcount[1m[34m]; [[22m[32mapple[1m[34m [35m9[34m] [[22m[32mapple[1m[34m [35m2[34m] [[22m[32mpear[1m[34m [35m3[34m] [[22m[32morange[1m[34m [35m7[34m]][22m[39m [1m[35m|[22m[39m [1m[36muniq-by[22m[39m [32mfruit[39m [1m[34m--keep-last[22m[39m
+╭───┬────────┬───────╮
+│ [1m[32m#[22m[39m │ [1m[32mfruit[22m[39m │ [1m[32mcount[22m[39m │
+├───┼────────┼───────┤
+│ [1m[32m0[22m[39m │ apple │ 2 │
+│ [1m[32m1[22m[39m │ pear │ 3 │
+│ [1m[32m2[22m[39m │ orange │ 7 │
+╰───┴────────┴───────╯[0m
+```
+
+### Cross-platform native clipboard commands
+
+::: important 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.
+
+```nushell
+# 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
+
+`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
+
+Adds `clip` to `$env.config` with two flags
+
+```nushell
+$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`
+
+The `view source` command will show that file location of the source code when piped through the `metadata` command.
+
+```ansi :no-line-numbers
+[38;5;14m> [1m[36mdef[22m[39m [32ml[39m [1m[32m[][22m[39m [1m[32m{ [36mls[22m[39m [1m[34m-am[22m[39m [1m[35m|[22m[39m [1m[36msort-by[22m[39m [32mtype[39m [32mname[1m }[22m[38;5;10m
+[38;5;14m> [1m[36mview source[22m[39m [32ml[39m
+def l [] { ls -am | sort-by type name }[38;5;10m
+[38;5;14m> [1m[36mview source[22m[39m [32ml[39m [1m[35m|[22m[39m [1m[36mmetadata[22m[39m
+╭──────────────┬────────────────────────╮
+│ │ ╭───────┬────────╮ │
+│ [1m[32mspan[22m[39m │ │ [1m[32mstart[22m[39m │ 149684 │ │
+│ │ │ [1m[32mend[22m[39m │ 149695 │ │
+│ │ ╰───────┴────────╯ │
+│ [1m[32msource[22m[39m │ repl_entry #2 │
+│ [1m[32mcontent_type[22m[39m │ application/x-nuscript │
+╰──────────────┴────────────────────────╯[0m
+```
+
+### Show the path for different command types when using the `which` command
+
+#### Custom Command
+
+```ansi
+[38;5;14m> [1m[36mdef[22m[39m [32mcustom[39m [1m[32m[][22m[39m [1m[32m{ }[22m[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32mcustom[39m
+╭───┬─────────┬───────────────┬────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼───────────────┼────────┤
+│ [1m[32m0[22m[39m │ custom │ repl_entry #8 │ custom │
+╰───┴─────────┴───────────────┴────────╯[0m
+```
+
+#### Escaped Binaries
+
+```ansi
+[38;5;14m> [1m[36mwhich[22m[39m [32m^git[39m
+╭───┬─────────┬────────────────────┬──────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼────────────────────┼──────────┤
+│ [1m[32m0[22m[39m │ git │ D:\Git\cmd\git.exe │ external │
+╰───┴─────────┴────────────────────┴──────────╯[0m
+```
+
+#### Known Externals (`extern` declarations)
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32m../nu_scripts/custom-completions/git/git-completions.nu[39m [32m*[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32m"git reset"[39m
+╭───┬───────────┬──────────────────────────────────────────────────────────────────┬──────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼───────────┼──────────────────────────────────────────────────────────────────┼──────────┤
+│ [1m[32m0[22m[39m │ git reset │ D:\Projects\nu_scripts\custom-completions\git\git-completions.nu │ external │
+╰───┴───────────┴──────────────────────────────────────────────────────────────────┴──────────╯[0m
+```
+
+#### Built-In
+
+```ansi
+[38;5;14m> [1m[36mwhich[22m[39m [32m"str replace"[39m
+╭───┬─────────────┬──────┬──────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────────┼──────┼──────────┤
+│ [1m[32m0[22m[39m │ str replace │ │ built-in │
+╰───┴─────────────┴──────┴──────────╯[0m
+```
+
+#### Plugins
+
+```ansi
+[38;5;14m> [1m[36mwhich[22m[39m [32mpolars[39m
+╭───┬─────────┬───────────────────────────────────────────────────────┬────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼───────────────────────────────────────────────────────┼────────┤
+│ [1m[32m0[22m[39m │ polars │ D:\Projects\nushell\target\debug\nu_plugin_polars.exe │ plugin │
+╰───┴─────────┴───────────────────────────────────────────────────────┴────────╯[0m
+```
+
+#### Aliases
+
+```ansi
+[38;5;14m> [1m[36malias[22m[39m [32mgcm[39m [1m[36m=[22m[39m [36mgit[39m [1m[32mcheckout[22m[39m [1m[34m([22m[36mgit_main_branch[1m[34m)[22m[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32mgcm[39m
+╭───┬─────────┬───────────────┬───────┬────────────────────────────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │ [1m[32mdefinition[22m[39m │
+├───┼─────────┼───────────────┼───────┼────────────────────────────────┤
+│ [1m[32m0[22m[39m │ gcm │ repl_entry #4 │ alias │ git checkout (git_main_branch) │
+╰───┴─────────┴───────────────┴───────┴────────────────────────────────╯[0m
+```
+
+#### All Commands
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32m../nu_scripts/custom-completions/git/git-completions.nu[39m [32m*[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32mgit[39m [1m[34m-a[22m[39m
+╭───┬─────────┬──────────────────────────────────────────────────────────────────┬──────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼──────────────────────────────────────────────────────────────────┼──────────┤
+│ [1m[32m0[22m[39m │ git │ D:\Projects\nu_scripts\custom-completions\git\git-completions.nu │ external │
+│ [1m[32m1[22m[39m │ git │ D:\Git\cmd\git.exe │ external │
+╰───┴─────────┴──────────────────────────────────────────────────────────────────┴──────────╯[0m
+```
+
+### Other additions
+
+- `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](https://github.com/nushell/nushell/pull/17393))
+- Added tutor for `closure` (and updated `block` tutor). ([#17178](https://github.com/nushell/nushell/pull/17178))
+- This release adds the `umask` command, which lets you control the default permissions for newly-created files and directories. ([#17386](https://github.com/nushell/nushell/pull/17386))
+- External command tab completion on Windows now includes PowerShell `.ps1` scripts that are available in `PATH`. ([#17362](https://github.com/nushell/nushell/pull/17362))
+- Enabling `shell_integration.osc133` now also enables click-to-cursor in supported terminals. ([#17491](https://github.com/nushell/nushell/pull/17491))
+- Added `--all` and `-a` to `rm` to make it consistent with `mv`, `du`, `cp` commands. ([#17509](https://github.com/nushell/nushell/pull/17509))
+- Added `--left` flag to `drop column` command to drop columns on the left side instead of the right side. ([#17526](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/17507))
+- `du` command will now also show colorful paths and icons like `ls` ([#17560](https://github.com/nushell/nushell/pull/17560))
+- Add user id to `sys users` output ([#17577](https://github.com/nushell/nushell/pull/17577))
+- Added `input listen --timeout` flag that returns an error if no input was provided before the timeout. ([#17595](https://github.com/nushell/nushell/pull/17595))
+
+## Deprecations
+
+### `metadata set` should now be used with closures instead of the `--merge` flag
+
+`metadata set --merge` is now deprecated and will be removed in 0.112.0. Use the closure form instead:
+
+```nushell
+# 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`.
+
+```nushell
+# 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
+
+### Display the help for the aliased command when calling `help `
+
+When aliasing a command, the help for that command is also displayed:
+
+```ansi :no-line-numbers :collapsed-lines=11
+[38;5;14m> [1m[36malias[22m[39m [32mpsl[39m [1m[36m=[22m[39m [1m[36mps[22m[39m [1m[34m--long[22m[38;5;10m
+[38;5;14m> [1m[36mhelp[22m[39m [32mpsl[39m
+Alias for [1m[3m[36mps[22m[39m [1m[34m--long
+[22m[23m[32m
+Alias[39m: [36mps
+[32m
+Expansion[39m:
+ [1m[36mps[22m[39m [1m[34m--long
+[22m[39m
+View information about system processes.
+[32m
+Search terms[39m: [36mprocedures, operations, tasks, ops
+[32m
+Usage[39m:
+ > ps {flags}
+[32m
+Flags[39m:
+ [36m-h[39m, [36m--help[39m: Display the help message for this command
+ [36m-l[39m, [36m--long[39m: List all available columns for each entry.
+[32m
+Input/output types[39m:
+ ╭───┬─────────┬────────╮
+ │ [1m[32m#[22m[39m │ [1m[32minput[22m[39m │ [1m[32moutput[22m[39m │
+ ├───┼─────────┼────────┤
+ │ [1m[32m0[22m[39m │ nothing │ table │
+ ╰───┴─────────┴────────╯
+[32m
+Examples[39m:
+ List the system processes
+ > [1m[36mps
+[22m[39m
+ List the top 5 system processes with the highest memory usage
+ > [1m[36mps[22m[39m [1m[35m|[22m[39m [1m[36msort-by[22m[39m [32mmem[39m [1m[35m|[22m[39m [1m[36mlast[22m[39m [1m[35m5
+[22m[39m
+ List the top 3 system processes with the highest CPU usage
+ > [1m[36mps[22m[39m [1m[35m|[22m[39m [1m[36msort-by[22m[39m [32mcpu[39m [1m[35m|[22m[39m [1m[36mlast[22m[39m [1m[35m3
+[22m[39m
+ List the system processes with 'nu' in their names
+ > [1m[36mps[22m[39m [1m[35m|[22m[39m [1m[36mwhere[22m[39m [32mname[39m [33m=~[39m [32m'nu'
+[39m
+ Get the parent process id of the current nu process
+ > [1m[36mps[22m[39m [1m[35m|[22m[39m [1m[36mwhere[22m[39m [32mpid[39m [33m==[39m [35m$nu[39m.[32mpid[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32mppid
+```
+
+### Update how `$NU_LIB_DIRS` / `$env.NU_LIB_DIRS` is handled at startup time
+
+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
+
+```ansi
+[38;5;10mD:\Projects\nushell[38;5;14m> [1m[36mls[22m[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [1m[35m26[22m[39m
+╭──────────┬─────────────────────╮
+│ [1m[32mname[22m[39m │ [38;5;149mrust-toolchain.toml[39m │
+│ [1m[32mtype[22m[39m │ file │
+│ [1m[32msize[22m[39m │ [36m956 B[39m │
+│ [1m[32mmodified[22m[39m │ [35m2 weeks ago[39m │
+╰──────────┴─────────────────────╯[0m
+```
+
+### Cell path completion now works at a slightly broader range
+
+```nushell
+let foo = {a: b}
+# ($foo).
+```
+
+### Additional changes
+
+- The configuration file paths are no longer canonicalized. ([#17369](https://github.com/nushell/nushell/pull/17369))
+- Disable ANSI coloring if `TERM` is set to `"dumb"` when `$env.config.use_ansi_coloring` is set to `"auto"`. ([#17368](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/17458))
+- format filesize now uses $env.config.float_precision to control decimal places for fractional values. ([#17462](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/17490))
+- Improves help text for filter commands (e.g. each, select, where) with clearer, consistent descriptions. ([#17494](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/issues/5066) — "Help us with better command and parameter/flag descriptions." ([#17523](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/issues/5066) — "Help us with better command and parameter/flag descriptions." ([#17545](https://github.com/nushell/nushell/pull/17545))
+- All environment variable names are now case-insensitive for lookups and case-preserving for storage on all operating systems. ([#17558](https://github.com/nushell/nushell/pull/17558))
+- More informative error for `format date` with dates outside the 0-9999 year range. ([#17589](https://github.com/nushell/nushell/pull/17589))
+- Improves command and parameter/flag descriptions for the network, system, and viewers modules (Issue #5066). ([#17546](https://github.com/nushell/nushell/pull/17546))
+- Improved command and parameter/flag descriptions for consistency. ([#17639](https://github.com/nushell/nushell/pull/17639))
+- `ls` now escapes control characters in filenames instead of passing them through to the terminal. ([#17580](https://github.com/nushell/nushell/pull/17580))
+- `history | last x` will be in ascending order. ([#17645](https://github.com/nushell/nushell/pull/17645))
+- The new built-in commands `clip copy` and `clip paste` are now behind the experimental option `native-clip`. ([#17664](https://github.com/nushell/nushell/pull/17664))
+
+## Bug fixes
+
+### `error make` might now be used in a match statement
+
+Fix `error make` input when used in a match statement, example:
+
+```nushell
+# 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.
+
+```ansi title="Now correctly applies strike-through without color reversal"
+[38;5;14m> [1m[36mansi[22m[39m [1m[34m--escape[22m[39m [1m[36m{ [22m[32mfg[1m[36m: [22m[32m"#ff0000"[1m[36m [22m[32mbg[1m[36m: [22m[32m"#000000"[1m[36m [22m[32mattr[1m[36m: [22m[32m"strike"[1m[36m }
+```
+
+```ansi title="Invalid attribute codes now show helpful errors"
+[38;5;14m> [1m[36mansi[22m[39m [1m[34m--escape[22m[39m [1m[36m{ [22m[32mfg[1m[36m: [22m[32m"#ff0000"[1m[36m [22m[32mattr[1m[36m: [22m[32m"x"[1m[36m }[22m[39m
+Error: [31mnu::shell::error
+[39m
+ [31m×[39m Invalid ANSI attribute code[36m
+ help: [39mValid codes are: b (bold), i (italic), u (underline), s (strike), d (dimmed), r (reverse), h (hidden), l
+ (blink), n (normal)
+```
+
+```ansi title="Invalid attribute codes now show helpful errors"
+[38;5;14m> [1m[36mansi[22m[39m [1m[34m--escape[22m[39m [1m[36m{ [22m[32mfg[1m[36m: [22m[32m"#ff0000"[1m[36m [22m[32mattr[1m[36m: [22m[32m"invalid"[1m[36m }[22m[39m
+Error: [31mnu::shell::error
+[39m
+ [31m×[39m Invalid ANSI attribute name[36m
+ help: [39mValid names are: bold, italic, underline, strike, dimmed, reverse, hidden, blink, normal
+[38;5;10m
+```
+
+```ansi title="Multiple attributes as codes"
+[38;5;14m> [1m[36mansi[22m[39m [1m[34m--escape[22m[39m [1m[36m{ [22m[32mfg[1m[36m: [22m[32m"#ff0000"[1m[36m [22m[32mattr[1m[36m: [22m[32m"biu"[1m[36m }[22m[39m # bold + italic + underline
+```
+
+```ansi title="Multiple attributes as names"
+[38;5;14m> [1m[36mansi[22m[39m [1m[34m--escape[22m[39m [1m[36m{ [22m[32mfg[1m[36m: [22m[32m"#00ff00"[1m[36m [22m[32mattr[1m[36m: [[22m[32mbold[1m[36m [22m[32mitalic[1m[36m] }
+```
+
+```ansi title="Mixed codes and names"
+[38;5;14m> [1m[36mansi[22m[39m [1m[34m--escape[22m[39m [1m[36m{ [22m[32mfg[1m[36m: [22m[32m"#0000ff"[1m[36m [22m[32mattr[1m[36m: [[22m[32mb[1m[36m, [22m[32munderline[1m[36m] }[0m
+```
+
+### Fixed `math median` returning incorrect results when NaN values are present in the input
+
+`math median` did include `NaN` values for its calculation, this is fixed now.
+
+**Before:**
+
+```ansi
+[38;5;14m> [1m[36m[[35mNaN[36m [35mNaN[36m [35m1[36m [35m2[36m [35m3[36m [35m4[36m][22m[39m [1m[35m|[22m[39m [1m[36mmath median[22m[39m
+3.5[0m
+```
+
+**After:**
+
+```ansi
+[38;5;14m> [1m[36m[[35mNaN[36m [35mNaN[36m [35m1[36m [35m2[36m [35m3[36m [35m4[36m][22m[39m [1m[35m|[22m[39m [1m[36mmath median[22m[39m
+2.5[0m
+```
+
+### Consistent variable expansion in path arguments
+
+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`
+
+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
+
+In pipefail, nushell no longer hang when assigning too many output of a external command to a variable, for example:
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd[38;5;10m
+[38;5;14m> [32m"a"[39m [1m[35m|[22m[39m [1m[36mstd repeat[22m[39m [1m[34m([35m1[22m[39m [33m*[39m [1m[35m1024[22m[39m [33m*[39m [1m[35m1024[34m)[22m[39m [1m[35mo>[22m[39m [32mttt.txt[38;5;10m
+[38;5;14m> [1m[36mlet[22m[39m [35mx[39m = [1m[34m([22m[36mbat[39m [1m[32mttt.txt[34m)[0m
+```
+
+### Globs now work at assignment time.
+
+#### Before
+
+```ansi :no-line-numbers
+[38;5;14m> [1m[36mlet[22m[39m [35mg[39m: glob = [32m"*.toml"[38;5;14m
+> [1m[36mls[22m[39m [35m$g[39m
+Error: [31mnu::shell::error
+[39m
+ [31m×[39m No matches found for DoNotExpand("*.toml")
+ ╭─[[1m[4m[36mentry #3:1:4[22m[24m[39m]
+ [2m1[22m │ ls $g
+ · [1m[35m ─┬[22m[39m
+ · [1m[35m╰── Pattern, file or folder not found[22m[39m
+ ╰────[36m
+ help: [39mno matches found
+```
+
+#### After
+
+```ansi :no-line-numbers
+[38;5;10mD:\Projects\nushell[38;5;14m> [1m[36mlet[22m[39m [35mg[39m: glob = [32m"*.toml"[38;5;10m
+D:\Projects\nushell[38;5;14m> [1m[36mls[22m[39m [35m$g[39m
+╭───┬─────────────────────┬──────┬─────────┬──────────────╮
+│ [1m[32m#[22m[39m │ [1m[32mname[22m[39m │ [1m[32mtype[22m[39m │ [1m[32msize[22m[39m │ [1m[32mmodified[22m[39m │
+├───┼─────────────────────┼──────┼─────────┼──────────────┤
+│ [1m[32m0[22m[39m │ [38;5;149mCargo.toml[39m │ file │ [36m11,4 kB[39m │ [35ma day ago[39m │
+│ [1m[32m1[22m[39m │ [38;5;149mCross.toml[39m │ file │ [36m684 B[39m │ [35m6 months ago[39m │
+│ [1m[32m2[22m[39m │ [38;5;149mrust-toolchain.toml[39m │ file │ [36m956 B[39m │ [35m2 weeks ago[39m │
+│ [1m[32m3[22m[39m │ [38;5;149mtypos.toml[39m │ file │ [36m732 B[39m │ [35m3 days ago[39m │
+╰───┴─────────────────────┴──────┴─────────┴──────────────╯[0m
+```
+
+#### Still working
+
+```ansi :no-line-numbers :collapsed-lines=8
+[38;5;14m> [1m[36mlet[22m[39m [35mg[39m = [32m"*.toml"[39m [1m[35m|[22m[39m [1m[36minto glob[22m[38;5;10m
+[38;5;14m> [1m[36mls[22m[39m [35m$g[39m
+╭───┬─────────────────────┬──────┬─────────┬──────────────╮
+│ [1m[32m#[22m[39m │ [1m[32mname[22m[39m │ [1m[32mtype[22m[39m │ [1m[32msize[22m[39m │ [1m[32mmodified[22m[39m │
+├───┼─────────────────────┼──────┼─────────┼──────────────┤
+│ [1m[32m0[22m[39m │ [38;5;149mCargo.toml[39m │ file │ [36m11,4 kB[39m │ [35ma day ago[39m │
+│ [1m[32m1[22m[39m │ [38;5;149mCross.toml[39m │ file │ [36m684 B[39m │ [35m6 months ago[39m │
+│ [1m[32m2[22m[39m │ [38;5;149mrust-toolchain.toml[39m │ file │ [36m956 B[39m │ [35m2 weeks ago[39m │
+│ [1m[32m3[22m[39m │ [38;5;149mtypos.toml[39m │ file │ [36m732 B[39m │ [35m3 days ago[39m │
+╰───┴─────────────────────┴──────┴─────────┴──────────────╯[38;5;10m
+[38;5;14m> [1m[36mglob[22m[39m [35m$g[39m
+╭───┬─────────────────────────────────────────╮
+│ [1m[32m0[22m[39m │ D:\Projects\nushell\Cargo.toml │
+│ [1m[32m1[22m[39m │ D:\Projects\nushell\Cross.toml │
+│ [1m[32m2[22m[39m │ D:\Projects\nushell\rust-toolchain.toml │
+│ [1m[32m3[22m[39m │ D:\Projects\nushell\typos.toml │
+╰───┴─────────────────────────────────────────╯[38;5;10m
+[38;5;14m> [1m[36mls[22m[39m [33m...[1m[34m([36mglob[22m[39m [35m$g[1m[34m)[22m[39m
+╭───┬─────────────────────────────────────────┬──────┬─────────┬──────────────╮
+│ [1m[32m#[22m[39m │ [1m[32mname[22m[39m │ [1m[32mtype[22m[39m │ [1m[32msize[22m[39m │ [1m[32mmodified[22m[39m │
+├───┼─────────────────────────────────────────┼──────┼─────────┼──────────────┤
+│ [1m[32m0[22m[39m │ [38;5;149mD:\Projects\nushell\Cargo.toml[39m │ file │ [36m11,4 kB[39m │ [35ma day ago[39m │
+│ [1m[32m1[22m[39m │ [38;5;149mD:\Projects\nushell\Cross.toml[39m │ file │ [36m684 B[39m │ [35m6 months ago[39m │
+│ [1m[32m2[22m[39m │ [38;5;149mD:\Projects\nushell\rust-toolchain.toml[39m │ file │ [36m956 B[39m │ [35m2 weeks ago[39m │
+│ [1m[32m3[22m[39m │ [38;5;149mD:\Projects\nushell\typos.toml[39m │ file │ [36m732 B[39m │ [35m3 days ago[39m │
+╰───┴─────────────────────────────────────────┴──────┴─────────┴──────────────╯[0m
+```
+
+### Normalize paths for `which` command.
+
+Windows users will notice this more.
+
+#### Before
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd\clip[39m [32mcopy[39m # or use std/clip copy[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32mcopy[39m
+╭───┬─────────┬─────────────────┬────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼─────────────────┼────────┤
+│ [1m[32m0[22m[39m │ copy │ std/clip\mod.nu │ custom │
+╰───┴─────────┴─────────────────┴────────╯[0m
+```
+
+#### After
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd\clip[39m [32mcopy[39m # or use std/clip copy[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32mcopy[39m
+╭───┬─────────┬─────────────────┬────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼─────────────────┼────────┤
+│ [1m[32m0[22m[39m │ copy │ std/clip/mod.nu │ custom │
+╰───┴─────────┴─────────────────┴────────╯[0m
+```
+
+### Changed source of REPL entries
+
+Changed `entry #` to `repl_entry #` so that it's easier to understand that the source is from the repl.
+
+```ansi
+[38;5;14m> [1m[36mdef[22m[39m [32ml[39m [1m[32m[][22m[39m [1m[32m{ [36mls[22m[39m [1m[34m-am[22m[39m [1m[35m|[22m[39m [1m[36msort-by[22m[39m [32mtype[39m [32mname[1m }[22m[38;5;10m
+[38;5;14m> [1m[36mwhich[22m[39m [32ml[39m
+╭───┬─────────┬────────────────┬────────╮
+│ [1m[32m#[22m[39m │ [1m[32mcommand[22m[39m │ [1m[32mpath[22m[39m │ [1m[32mtype[22m[39m │
+├───┼─────────┼────────────────┼────────┤
+│ [1m[32m0[22m[39m │ l │ repl_entry #39 │ custom │
+╰───┴─────────┴────────────────┴────────╯[0m
+```
+
+### Collecting a pipeline checks external command status
+
+Previously, if an external command failed and was piped into `collect`, the pipeline would still output a value:
+
+```ansi :no-line-numbers
+[38;5;14m> [35m$env[39m.[32mconfig[39m.[32mdisplay_errors[39m.[32mexit_code[39m [33m=[39m [96mtrue[38;5;14m
+> [1m[36mdebug experimental-options[22m[39m [1m[35m|[22m[39m [1m[36mwhere[22m[39m [32midentifier[39m [33m==[39m [32mpipefail[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32menabled[39m.[1m[35m0[22m[39m
+true[38;5;14m
+> [36mnu[39m [1m[32m-c[22m[39m [1m[32m'print meow; exit 1'[22m[39m [1m[35m|[22m[39m [1m[36mlines[22m[39m [1m[35m|[22m[39m [1m[36mlength[22m[39m [1m[35m|[22m[39m [1m[36mcollect[22m[39m
+1
+Error: [31mnu::shell::non_zero_exit_code
+[39m
+ [31m×[39m External command had a non-zero exit code
+ ╭─[[1m[4m[36mentry #7:1:1[22m[24m[39m]
+ [2m1[22m │ nu -c 'print meow; exit 1' | lines | length | collect
+ · [1m[35m─┬[22m[39m
+ · [1m[35m╰── exited with code 1[22m[39m
+ ╰────
+```
+
+Now, the error occurs before the pipeline outputs anything:
+
+```ansi :no-line-numbers
+[38;5;14m> [35m$env[39m.[32mconfig[39m.[32mdisplay_errors[39m.[32mexit_code[39m [33m=[39m [96mtrue[38;5;10m
+[38;5;14m> [1m[36mdebug experimental-options[22m[39m [1m[35m|[22m[39m [1m[36mwhere[22m[39m [32midentifier[39m [33m==[39m [32mpipefail[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32menabled[39m.[1m[35m0[22m[39m
+true[38;5;10m
+[38;5;14m> [36mnu[39m [1m[32m-c[22m[39m [1m[32m'print meow; exit 1'[22m[39m [1m[35m|[22m[39m [1m[36mlines[22m[39m [1m[35m|[22m[39m [1m[36mlength[22m[39m [1m[35m|[22m[39m [1m[36mcollect[22m[39m
+Error: [31mnu::shell::non_zero_exit_code
+[39m
+ [31m×[39m External command had a non-zero exit code
+ ╭─[[1m[4m[36mrepl_entry #10:1:1[22m[24m[39m]
+ [2m1[22m │ nu -c 'print meow; exit 1' | lines | length | collect
+ · [1m[35m─┬[22m[39m
+ · [1m[35m╰── exited with code 1[22m[39m
+ ╰────
+```
+
+Note that this only occurs for _explicit_ `collect`s, and not _implicit_ collects.
+
+### Built-in `clip copy` now behaves like `std/clip copy`
+
+::: important 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.
+
+```nushell
+ls | clip copy
+```
+
+### Other fixes
+
+- `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](https://github.com/nushell/nushell/pull/17381))
+- Remove `unlet` variables from completions. ([#17383](https://github.com/nushell/nushell/pull/17383))
+- Allow Swiss German keyboard, specifically `AltGr` keys, with `explore regex` ([#17382](https://github.com/nushell/nushell/pull/17382))
+- Allows `view source` to see if `--wrapped` or `--env` was used in the custom command and reconstruct it properly. ([#17423](https://github.com/nushell/nushell/pull/17423))
+- Fixed reading old plugin files to migrate. ([#17437](https://github.com/nushell/nushell/pull/17437))
+- Fix issue where drilling into a large dataset in `explore` opened on the last page instead of the top. ([#17532](https://github.com/nushell/nushell/pull/17532))
+- Fixes panics caused by referencing `$in` in aliases ([#17553](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/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](https://github.com/nushell/nushell/pull/17606))
+- Fixes a panic with `detect columns --ignore-box-chars` by adjusting character boundary indexes. ([#17627](https://github.com/nushell/nushell/pull/17627))
+- `view span` now allows zero-length spans and rejects spans that are out-of-bounds. ([#17637](https://github.com/nushell/nushell/pull/17637))
+
+# Hall of fame
+
+Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! :pray:
+
+| author | change | link |
+| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- |
+| [@fdncred](https://github.com/fdncred) | Add an opaque popup windows that shows the keybindings for `explore regex` | [#17384](https://github.com/nushell/nushell/pull/17384) |
+| [@ChrisDenton](https://github.com/ChrisDenton) | Replace more `canonicalize` with `absolute` | [#17412](https://github.com/nushell/nushell/pull/17412) |
+| [@fdncred](https://github.com/fdncred) | Refactor cli arg passing to make it more robust and testable | [#17405](https://github.com/nushell/nushell/pull/17405) |
+| [@fdncred](https://github.com/fdncred) | This PR introduces some pushdown optimizations with `last`, `first`, `select`, and `length` when used with the `history` command and sqlite databases. | [#17415](https://github.com/nushell/nushell/pull/17415) |
+| [@fdncred](https://github.com/fdncred) | Fixup `cargo semver-checks` with `history` | [#17457](https://github.com/nushell/nushell/pull/17457) |
+| [@smartcoder0777](https://github.com/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](https://github.com/nushell/nushell/pull/17400) |
+| [@fdncred](https://github.com/fdncred) | Fixup bugs and keybindings in `explore regex` | [#17456](https://github.com/nushell/nushell/pull/17456) |
+| [@fennewald](https://github.com/fennewald) | Made umask detection threadsafe | [#17471](https://github.com/nushell/nushell/pull/17471) |
+| [@moooooji](https://github.com/moooooji) | Remove unreachable short-flag empty-group check | [#17492](https://github.com/nushell/nushell/pull/17492) |
+| [@hustcer](https://github.com/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](https://github.com/nushell/nushell/pull/17468) |
+| [@weirdan](https://github.com/weirdan) | Fix poll/pool typo for `http pool` | [#17519](https://github.com/nushell/nushell/pull/17519) |
+| [@fdncred](https://github.com/fdncred) | Add `nu` to the ignore_list for `:try` in `explore` | [#17533](https://github.com/nushell/nushell/pull/17533) |
+| [@maxim-uvarov](https://github.com/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](https://github.com/nushell/nushell/pull/17539) |
+| [@monigarr](https://github.com/monigarr) | PR 8 (of 10) Issue 5066 help text nu-command math random | [#17544](https://github.com/nushell/nushell/pull/17544) |
+| [@fdncred](https://github.com/fdncred) | Cleanup ansi command pr.md | [#17555](https://github.com/nushell/nushell/pull/17555) |
+| [@ysthakur](https://github.com/ysthakur) | N/A, users don't need to do anything, and it's a minor visual change. | [#17424](https://github.com/nushell/nushell/pull/17424) |
+| [@it-education-md](https://github.com/it-education-md) | Fixed: pipeline `let` now errors when attempting to assign to builtin variables like `$in`, `$it`, `$env`, and `$nu`. | [#17525](https://github.com/nushell/nushell/pull/17525) |
+| [@hustcer](https://github.com/hustcer) | Try to fix "TLS required, but transport is unsecured" error | [#17568](https://github.com/nushell/nushell/pull/17568) |
+| [@fdncred](https://github.com/fdncred) | The `sys host` command and the `uname` command are now `const` commands. | [#17593](https://github.com/nushell/nushell/pull/17593) |
+| [@amaanq](https://github.com/amaanq) | N/A I think, this is solely about avoiding one allocation when writing to stderr. | [#17613](https://github.com/nushell/nushell/pull/17613) |
+| [@fmotalleb](https://github.com/fmotalleb) | Android builds fail using arboard clipboard | [#17619](https://github.com/nushell/nushell/pull/17619) |
+| [@Juhan280](https://github.com/Juhan280) | Fix compilation on targets other than linux, windows and macos | [#17626](https://github.com/nushell/nushell/pull/17626) |
+| [@Bahex](https://github.com/Bahex) | Reduce object churn by reusing closures | [#17617](https://github.com/nushell/nushell/pull/17617) |
+| [@veeceey](https://github.com/veeceey) | Strip ANSI escape codes from custom completion values | [#17607](https://github.com/nushell/nushell/pull/17607) |
+| [@fdncred](https://github.com/fdncred) | Custom subcommand help | [#17610](https://github.com/nushell/nushell/pull/17610) |
+| [@hustcer](https://github.com/hustcer) | Increase help indention to fix the docs build error | [#17659](https://github.com/nushell/nushell/pull/17659) |
+
+# Full changelog
+
+| author | title | link |
+| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
+| [@132ikl](https://github.com/132ikl) | Make `collect` a keyword command, check pipefail on `Instruction::Collect` | [#17579](https://github.com/nushell/nushell/pull/17579) |
+| [@Ady0333](https://github.com/Ady0333) | Allow .ps1 files in command completion on Windows | [#17362](https://github.com/nushell/nushell/pull/17362) |
+| [@Bahex](https://github.com/Bahex) | fix: switch parameters are now typed bool | [#17118](https://github.com/nushell/nushell/pull/17118) |
+| [@Bahex](https://github.com/Bahex) | refactor(par-each): reduce object churn by reusing closures | [#17617](https://github.com/nushell/nushell/pull/17617) |
+| [@BluewyDiamond](https://github.com/BluewyDiamond) | Make `rm` also like `mv, du, cp` | [#17509](https://github.com/nushell/nushell/pull/17509) |
+| [@ChrisDenton](https://github.com/ChrisDenton) | Don't canonicalize config path | [#17369](https://github.com/nushell/nushell/pull/17369) |
+| [@ChrisDenton](https://github.com/ChrisDenton) | Replace more `canonicalize` with `absolute` | [#17412](https://github.com/nushell/nushell/pull/17412) |
+| [@ChrisDenton](https://github.com/ChrisDenton) | Fix old plugin file migration | [#17437](https://github.com/nushell/nushell/pull/17437) |
+| [@InnocentZero](https://github.com/InnocentZero) | Skip columns | [#17526](https://github.com/nushell/nushell/pull/17526) |
+| [@Juhan280](https://github.com/Juhan280) | feat: add linewise and non-blank start edit commands | [#17508](https://github.com/nushell/nushell/pull/17508) |
+| [@Juhan280](https://github.com/Juhan280) | feat: add `path_columns` to PipelineMetadata for flexible path rendering | [#17540](https://github.com/nushell/nushell/pull/17540) |
+| [@Juhan280](https://github.com/Juhan280) | fix(mktemp): make --tmpdir behaviour aligned with coreutils/uutils | [#17549](https://github.com/nushell/nushell/pull/17549) |
+| [@Juhan280](https://github.com/Juhan280) | feat(commands): add path_columns metadata for `du` command | [#17560](https://github.com/nushell/nushell/pull/17560) |
+| [@Juhan280](https://github.com/Juhan280) | refactor: deprecate datasource-ls in favor of path-columns | [#17562](https://github.com/nushell/nushell/pull/17562) |
+| [@Juhan280](https://github.com/Juhan280) | feat(nu-command): add `--keep-last` flag for `uniq-by` command | [#17564](https://github.com/nushell/nushell/pull/17564) |
+| [@Juhan280](https://github.com/Juhan280) | feat(table): make record render also respect path_columns metadata | [#17602](https://github.com/nushell/nushell/pull/17602) |
+| [@Juhan280](https://github.com/Juhan280) | fix compilation on targets other than linux, windows and macos | [#17626](https://github.com/nushell/nushell/pull/17626) |
+| [@KaiSforza](https://github.com/KaiSforza) | error_make: Add `Type::Any` to input type | [#17323](https://github.com/nushell/nushell/pull/17323) |
+| [@NotTheDr01ds](https://github.com/NotTheDr01ds) | Fix `history \| last 10` being in descending order | [#17645](https://github.com/nushell/nushell/pull/17645) |
+| [@NotTheDr01ds](https://github.com/NotTheDr01ds) | Updated `metadata-set` example to use `--path-columns` syntax | [#17667](https://github.com/nushell/nushell/pull/17667) |
+| [@NotTheDr01ds](https://github.com/NotTheDr01ds) | Reworked another deprecated `metadata set` example | [#17672](https://github.com/nushell/nushell/pull/17672) |
+| [@WindSoilder](https://github.com/WindSoilder) | Support `try {} finally {}` | [#17397](https://github.com/nushell/nushell/pull/17397) |
+| [@WindSoilder](https://github.com/WindSoilder) | update assert_cmd to 2.1.1 | [#17426](https://github.com/nushell/nushell/pull/17426) |
+| [@WindSoilder](https://github.com/WindSoilder) | pipefail: enable by default | [#17449](https://github.com/nushell/nushell/pull/17449) |
+| [@WindSoilder](https://github.com/WindSoilder) | try..finally: finally block still runs even if `exit` is used inside `try`. | [#17451](https://github.com/nushell/nushell/pull/17451) |
+| [@WindSoilder](https://github.com/WindSoilder) | update dependencies | [#17497](https://github.com/nushell/nushell/pull/17497) |
+| [@WindSoilder](https://github.com/WindSoilder) | update uu libs to 0.6.0 | [#17551](https://github.com/nushell/nushell/pull/17551) |
+| [@WindSoilder](https://github.com/WindSoilder) | pipefail: fixing freeze when assigning a large result of an external command to a variable. | [#17571](https://github.com/nushell/nushell/pull/17571) |
+| [@amaanq](https://github.com/amaanq) | fix(ls): escape control characters in filenames to prevent terminal corruption | [#17580](https://github.com/nushell/nushell/pull/17580) |
+| [@amaanq](https://github.com/amaanq) | fix: use write_all instead of eprintln! to avoid double-panic on stderr teardown | [#17581](https://github.com/nushell/nushell/pull/17581) |
+| [@amaanq](https://github.com/amaanq) | fix: replace eprintln! with writeln! in error reporting to prevent double-panic | [#17606](https://github.com/nushell/nushell/pull/17606) |
+| [@amaanq](https://github.com/amaanq) | fix: use `writeln!` instead of `format!` and `write_all` | [#17613](https://github.com/nushell/nushell/pull/17613) |
+| [@andrewgazelka](https://github.com/andrewgazelka) | feat(mcp): add HTTP streaming transport and cancellation support | [#17161](https://github.com/nushell/nushell/pull/17161) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump data-encoding from 2.9.0 to 2.10.0 | [#17344](https://github.com/nushell/nushell/pull/17344) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump quick-xml from 0.38.3 to 0.39.0 | [#17347](https://github.com/nushell/nushell/pull/17347) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.42.0 to 1.42.1 | [#17388](https://github.com/nushell/nushell/pull/17388) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump shadow-rs from 1.5.0 to 1.6.0 | [#17390](https://github.com/nushell/nushell/pull/17390) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump lsp-textdocument from 0.4.2 to 0.5.0 | [#17391](https://github.com/nushell/nushell/pull/17391) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.42.1 to 1.42.3 | [#17439](https://github.com/nushell/nushell/pull/17439) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump uuid from 1.19.0 to 1.20.0 | [#17440](https://github.com/nushell/nushell/pull/17440) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump sysinfo from 0.37.2 to 0.38.0 | [#17442](https://github.com/nushell/nushell/pull/17442) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump shadow-rs from 1.6.0 to 1.7.0 | [#17443](https://github.com/nushell/nushell/pull/17443) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.42.3 to 1.43.1 | [#17483](https://github.com/nushell/nushell/pull/17483) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump git2 from 0.20.0 to 0.20.4 | [#17495](https://github.com/nushell/nushell/pull/17495) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.43.1 to 1.43.4 | [#17541](https://github.com/nushell/nushell/pull/17541) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.43.4 to 1.43.5 | [#17582](https://github.com/nushell/nushell/pull/17582) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump quickcheck from 1.0.3 to 1.1.0 | [#17584](https://github.com/nushell/nushell/pull/17584) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump rmcp from 0.14.0 to 0.16.0 | [#17585](https://github.com/nushell/nushell/pull/17585) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump uuid from 1.20.0 to 1.21.0 | [#17587](https://github.com/nushell/nushell/pull/17587) |
+| [@astral-l](https://github.com/astral-l) | fix std repeat returning empty list on null input | [#17332](https://github.com/nushell/nushell/pull/17332) |
+| [@astral-l](https://github.com/astral-l) | use RFC 3339 formatting for displaying dates with year > 9999 | [#17589](https://github.com/nushell/nushell/pull/17589) |
+| [@astral-l](https://github.com/astral-l) | add `--timeout` flag to `input listen` | [#17595](https://github.com/nushell/nushell/pull/17595) |
+| [@ayax79](https://github.com/ayax79) | allow aliasing to work on sub commands | [#17359](https://github.com/nushell/nushell/pull/17359) |
+| [@ayax79](https://github.com/ayax79) | Display the help for the aliased command when calling `help <alias>` | [#17365](https://github.com/nushell/nushell/pull/17365) |
+| [@ayax79](https://github.com/ayax79) | Polars: introducing `polars entropy` | [#17377](https://github.com/nushell/nushell/pull/17377) |
+| [@ayax79](https://github.com/ayax79) | bumped rmcp lib: 0.8 -> 0.13 | [#17392](https://github.com/nushell/nushell/pull/17392) |
+| [@benblank](https://github.com/benblank) | Add a `umask` command | [#17386](https://github.com/nushell/nushell/pull/17386) |
+| [@blindFS](https://github.com/blindFS) | fix: block duplication for aliased ones only in `replace_in_variable` | [#17553](https://github.com/nushell/nushell/pull/17553) |
+| [@blindFS](https://github.com/blindFS) | feat(completion): cellpath completion now fallback to type based when value is unknown | [#17598](https://github.com/nushell/nushell/pull/17598) |
+| [@cablehead](https://github.com/cablehead) | feat(std/formats): set content-type metadata for ndjson, jsonl, ndnuon | [#17398](https://github.com/nushell/nushell/pull/17398) |
+| [@cablehead](https://github.com/cablehead) | Allow Ctrl+C to interrupt HTTP requests | [#17507](https://github.com/nushell/nushell/pull/17507) |
+| [@cablehead](https://github.com/cablehead) | refactor: deprecate `metadata set --merge` in favor of closure form | [#17537](https://github.com/nushell/nushell/pull/17537) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Move native `clip` commands behind an experimental option | [#17664](https://github.com/nushell/nushell/pull/17664) |
+| [@cuiweixie](https://github.com/cuiweixie) | fix: median should use sorted len | [#17521](https://github.com/nushell/nushell/pull/17521) |
+| [@evolvomind](https://github.com/evolvomind) | Fix variable expansion inconsistency in path arguments for commands using GlobPattern (Issue #17505) | [#17547](https://github.com/nushell/nushell/pull/17547) |
+| [@fdncred](https://github.com/fdncred) | Update UseAnsiColoring with TERM=dumb | [#17368](https://github.com/nushell/nushell/pull/17368) |
+| [@fdncred](https://github.com/fdncred) | Update `explore regex` to use `AltGr` keys | [#17382](https://github.com/nushell/nushell/pull/17382) |
+| [@fdncred](https://github.com/fdncred) | remove unlet vars from completions | [#17383](https://github.com/nushell/nushell/pull/17383) |
+| [@fdncred](https://github.com/fdncred) | add `explore regex` help popup | [#17384](https://github.com/nushell/nushell/pull/17384) |
+| [@fdncred](https://github.com/fdncred) | bump rust toolchain to 1.91.1 | [#17395](https://github.com/nushell/nushell/pull/17395) |
+| [@fdncred](https://github.com/fdncred) | add short params to join | [#17396](https://github.com/nushell/nushell/pull/17396) |
+| [@fdncred](https://github.com/fdncred) | Refactor cli lexopt | [#17405](https://github.com/nushell/nushell/pull/17405) |
+| [@fdncred](https://github.com/fdncred) | add special handling for sqlite dbs with `last`, `first`, `select`, `length` | [#17415](https://github.com/nushell/nushell/pull/17415) |
+| [@fdncred](https://github.com/fdncred) | update `view source` to show flags on custom commands | [#17423](https://github.com/nushell/nushell/pull/17423) |
+| [@fdncred](https://github.com/fdncred) | update to ratatui 0.30 | [#17430](https://github.com/nushell/nushell/pull/17430) |
+| [@fdncred](https://github.com/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](https://github.com/nushell/nushell/pull/17446) |
+| [@fdncred](https://github.com/fdncred) | Deserialize spans in `ast --json` command | [#17452](https://github.com/nushell/nushell/pull/17452) |
+| [@fdncred](https://github.com/fdncred) | add more rules to agents.md | [#17453](https://github.com/nushell/nushell/pull/17453) |
+| [@fdncred](https://github.com/fdncred) | fixup bugs and keybindings in `explore regex` | [#17456](https://github.com/nushell/nushell/pull/17456) |
+| [@fdncred](https://github.com/fdncred) | fixup `cargo semver-checks` with `history` | [#17457](https://github.com/nushell/nushell/pull/17457) |
+| [@fdncred](https://github.com/fdncred) | Update formats mod.nu | [#17459](https://github.com/nushell/nushell/pull/17459) |
+| [@fdncred](https://github.com/fdncred) | update nushell to reedline to 4c16687 | [#17511](https://github.com/nushell/nushell/pull/17511) |
+| [@fdncred](https://github.com/fdncred) | update structured ansi to support attr names and codes | [#17514](https://github.com/nushell/nushell/pull/17514) |
+| [@fdncred](https://github.com/fdncred) | update to latest reedline commit bdcc842 | [#17516](https://github.com/nushell/nushell/pull/17516) |
+| [@fdncred](https://github.com/fdncred) | disable auto tail and track previous row count in push_layer in explore | [#17532](https://github.com/nushell/nushell/pull/17532) |
+| [@fdncred](https://github.com/fdncred) | add `nu` to the ignore_list for `:try` in `explore` | [#17533](https://github.com/nushell/nushell/pull/17533) |
+| [@fdncred](https://github.com/fdncred) | cleanup ansi command pr.md | [#17555](https://github.com/nushell/nushell/pull/17555) |
+| [@fdncred](https://github.com/fdncred) | abstract env var names so they're insensitive on windows and sensitive on other operating systems | [#17558](https://github.com/nushell/nushell/pull/17558) |
+| [@fdncred](https://github.com/fdncred) | Update how `$NU_LIB_DIRS` / `$env.NU_LIB_DIRS` is handled at startup time | [#17563](https://github.com/nushell/nushell/pull/17563) |
+| [@fdncred](https://github.com/fdncred) | add user `id` to `sys users` | [#17577](https://github.com/nushell/nushell/pull/17577) |
+| [@fdncred](https://github.com/fdncred) | update nushell to latest reedline cefb611 | [#17578](https://github.com/nushell/nushell/pull/17578) |
+| [@fdncred](https://github.com/fdncred) | make `sys host` and `uname` const commands | [#17593](https://github.com/nushell/nushell/pull/17593) |
+| [@fdncred](https://github.com/fdncred) | fix `is-empty` / `is-not-empty` on `Empty` Pipelines | [#17594](https://github.com/nushell/nushell/pull/17594) |
+| [@fdncred](https://github.com/fdncred) | fix `let` and ensure glob variables expand correctly in runtime and tests | [#17596](https://github.com/nushell/nushell/pull/17596) |
+| [@fdncred](https://github.com/fdncred) | Custom subcommand help | [#17610](https://github.com/nushell/nushell/pull/17610) |
+| [@fdncred](https://github.com/fdncred) | fix `detect columns` panic with unicode chars | [#17627](https://github.com/nushell/nushell/pull/17627) |
+| [@fdncred](https://github.com/fdncred) | allow `view source` to store file location in metadata | [#17635](https://github.com/nushell/nushell/pull/17635) |
+| [@fdncred](https://github.com/fdncred) | add more standardization to command arguments | [#17639](https://github.com/nushell/nushell/pull/17639) |
+| [@fdncred](https://github.com/fdncred) | allow `which` to show where the file resides | [#17643](https://github.com/nushell/nushell/pull/17643) |
+| [@fdncred](https://github.com/fdncred) | normalize slashes for `which` output | [#17653](https://github.com/nushell/nushell/pull/17653) |
+| [@fdncred](https://github.com/fdncred) | update nushell to latest reedline commit 4ad0d0cb | [#17654](https://github.com/nushell/nushell/pull/17654) |
+| [@fdncred](https://github.com/fdncred) | update `entry` to `repl_entry` for better understanding | [#17655](https://github.com/nushell/nushell/pull/17655) |
+| [@fdncred](https://github.com/fdncred) | Allow `clip copy` to copy tables without ansi escapes | [#17663](https://github.com/nushell/nushell/pull/17663) |
+| [@fennewald](https://github.com/fennewald) | Make Umask detection threadsafe. | [#17471](https://github.com/nushell/nushell/pull/17471) |
+| [@fmotalleb](https://github.com/fmotalleb) | Feat: native clipboard (using arboard) | [#17572](https://github.com/nushell/nushell/pull/17572) |
+| [@fmotalleb](https://github.com/fmotalleb) | Feat: `clip` config | [#17616](https://github.com/nushell/nushell/pull/17616) |
+| [@fmotalleb](https://github.com/fmotalleb) | fix: android builds fail using arboard clipboard | [#17619](https://github.com/nushell/nushell/pull/17619) |
+| [@hovancik](https://github.com/hovancik) | Update closures-related tutors | [#17178](https://github.com/nushell/nushell/pull/17178) |
+| [@hustcer](https://github.com/hustcer) | Add OSC 133 P (k=) markers for semantic prompts | [#17468](https://github.com/nushell/nushell/pull/17468) |
+| [@hustcer](https://github.com/hustcer) | fix: pin libc and interprocess to fix cross-platform build failures | [#17506](https://github.com/nushell/nushell/pull/17506) |
+| [@hustcer](https://github.com/hustcer) | Upgrade interprocess to 2.3.1 | [#17517](https://github.com/nushell/nushell/pull/17517) |
+| [@hustcer](https://github.com/hustcer) | Try to fix "TLS required, but transport is unsecured" error | [#17568](https://github.com/nushell/nushell/pull/17568) |
+| [@hustcer](https://github.com/hustcer) | Increase help indention to fix the docs build error | [#17659](https://github.com/nushell/nushell/pull/17659) |
+| [@it-education-md](https://github.com/it-education-md) | Fix pipeline `let` builtin var validation | [#17525](https://github.com/nushell/nushell/pull/17525) |
+| [@jlcrochet](https://github.com/jlcrochet) | crossterm-based `input list` | [#17420](https://github.com/nushell/nushell/pull/17420) |
+| [@jlcrochet](https://github.com/jlcrochet) | `input list`: remove `$env.config.input_list` | [#17550](https://github.com/nushell/nushell/pull/17550) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | Make `it` a reserved variable name | [#17381](https://github.com/nushell/nushell/pull/17381) |
+| [@maxim-uvarov](https://github.com/maxim-uvarov) | fix(http): apply TLS certificate verification to connection pool | [#17458](https://github.com/nushell/nushell/pull/17458) |
+| [@maxim-uvarov](https://github.com/maxim-uvarov) | fix: avoid panic in replace_in_variable for permanent blocks | [#17539](https://github.com/nushell/nushell/pull/17539) |
+| [@monigarr](https://github.com/monigarr) | Improve help text in nu-cmd-lang (core commands) | [#17489](https://github.com/nushell/nushell/pull/17489) |
+| [@monigarr](https://github.com/monigarr) | Improve help text in nu-cmd-extra (Issue 5066) | [#17490](https://github.com/nushell/nushell/pull/17490) |
+| [@monigarr](https://github.com/monigarr) | 5066 help text pr3 nu command filters | [#17494](https://github.com/nushell/nushell/pull/17494) |
+| [@monigarr](https://github.com/monigarr) | Issue 5066 PR 4 (of 10 total) Improve help text for format commands. | [#17522](https://github.com/nushell/nushell/pull/17522) |
+| [@monigarr](https://github.com/monigarr) | Improve help text for bytes, conversions, database, date commands (Is… | [#17523](https://github.com/nushell/nushell/pull/17523) |
+| [@monigarr](https://github.com/monigarr) | Issue 5066 PR 7 (of 10) Improve help text for filesystem, path, and p… | [#17528](https://github.com/nushell/nushell/pull/17528) |
+| [@monigarr](https://github.com/monigarr) | PR 8 (of 10) Issue 5066 help text nu-command math random | [#17544](https://github.com/nushell/nushell/pull/17544) |
+| [@monigarr](https://github.com/monigarr) | PR 9 (of 10) Issue 5066 nu-command strings | [#17545](https://github.com/nushell/nushell/pull/17545) |
+| [@monigarr](https://github.com/monigarr) | PR 10 (of 10) Issue 5066 help text nu command network system viewers | [#17546](https://github.com/nushell/nushell/pull/17546) |
+| [@moooooji](https://github.com/moooooji) | chore(cli): remove unreachable short-flag empty-group check | [#17492](https://github.com/nushell/nushell/pull/17492) |
+| [@pickx](https://github.com/pickx) | fix(view span): allow zero-length spans, reject spans that are out-of-bounds | [#17637](https://github.com/nushell/nushell/pull/17637) |
+| [@pyz4](https://github.com/pyz4) | feat(polars): add `nulls-equal` argument to `polars join` | [#17435](https://github.com/nushell/nushell/pull/17435) |
+| [@pyz4](https://github.com/pyz4) | feat(polars): join on advanced column expressions | [#17436](https://github.com/nushell/nushell/pull/17436) |
+| [@sgvictorino](https://github.com/sgvictorino) | update eml-parser to 0.1.5 | [#17417](https://github.com/nushell/nushell/pull/17417) |
+| [@smartcoder0777](https://github.com/smartcoder0777) | Added --prefix/--suffix to join to disambiguate columns | [#17393](https://github.com/nushell/nushell/pull/17393) |
+| [@smartcoder0777](https://github.com/smartcoder0777) | Prefill input --reedline buffer from --default | [#17400](https://github.com/nushell/nushell/pull/17400) |
+| [@smartcoder0777](https://github.com/smartcoder0777) | docs: mention 'retain' in select/reject help | [#17460](https://github.com/nushell/nushell/pull/17460) |
+| [@smartcoder0777](https://github.com/smartcoder0777) | Fix format filesize to respect .config.float_precision | [#17462](https://github.com/nushell/nushell/pull/17462) |
+| [@stuartcarnie](https://github.com/stuartcarnie) | feat: enable OSC133 click events via reedline | [#17491](https://github.com/nushell/nushell/pull/17491) |
+| [@teddygood](https://github.com/teddygood) | Fix ParseOption handling in from ini | [#17600](https://github.com/nushell/nushell/pull/17600) |
+| [@veeceey](https://github.com/veeceey) | Strip ANSI escape codes from custom completion values | [#17607](https://github.com/nushell/nushell/pull/17607) |
+| [@weirdan](https://github.com/weirdan) | Fix poll/pool typo for `http pool` | [#17519](https://github.com/nushell/nushell/pull/17519) |
+| [@ysthakur](https://github.com/ysthakur) | Allow custom/external completers to override display value | [#17330](https://github.com/nushell/nushell/pull/17330) |
+| [@ysthakur](https://github.com/ysthakur) | Bump to dev version 0.110.1 | [#17370](https://github.com/nushell/nushell/pull/17370) |
+| [@ysthakur](https://github.com/ysthakur) | Set display_override and match_indices for file completions | [#17424](https://github.com/nushell/nushell/pull/17424) |
diff --git a/package-lock.json b/package-lock.json
index 3d002d0cf08..623a0fba4c5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,8 @@
"@vuepress/plugin-shiki": "2.0.0-rc.118",
"@vuepress/plugin-sitemap": "2.0.0-rc.118",
"@vuepress/theme-default": "2.0.0-rc.118",
+ "asciinema-player": "^3.15.1",
+ "cross-env": "^10.1.0",
"lefthook": "1.8.2",
"patch-package": "^8.0.1",
"prettier": "^3.3.3",
@@ -381,6 +383,16 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/runtime": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/types": {
"version": "7.28.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
@@ -479,6 +491,13 @@
}
}
},
+ "node_modules/@epic-web/invariant": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
+ "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
@@ -1900,6 +1919,39 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@solid-primitives/refs": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@solid-primitives/refs/-/refs-1.1.3.tgz",
+ "integrity": "sha512-aam02fjNKpBteewF/UliPSQCVJsIIGOLEWQOh+ll6R/QePzBOOBMcC4G+5jTaO75JuUS1d/14Q1YXT3X0Ow6iA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@solid-primitives/utils": "^6.4.0"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.6.12"
+ }
+ },
+ "node_modules/@solid-primitives/transition-group": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@solid-primitives/transition-group/-/transition-group-1.1.2.tgz",
+ "integrity": "sha512-gnHS0OmcdjeoHN9n7Khu8KNrOlRc8a2weETDt2YT6o1zeW/XtUC6Db3Q9pkMU/9cCKdEmN4b0a/41MKAHRhzWA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "solid-js": "^1.6.12"
+ }
+ },
+ "node_modules/@solid-primitives/utils": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@solid-primitives/utils/-/utils-6.4.0.tgz",
+ "integrity": "sha512-AeGTBg8Wtkh/0s+evyLtP8piQoS4wyqqQaAFs2HJcFMMjYAtUgo+ZPduRXLjPlqKVc2ejeR544oeqpbn8Egn8A==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "solid-js": "^1.6.12"
+ }
+ },
"node_modules/@standard-schema/spec": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
@@ -2885,6 +2937,18 @@
"sprintf-js": "~1.0.2"
}
},
+ "node_modules/asciinema-player": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.15.1.tgz",
+ "integrity": "sha512-agVYeNlPxthLyAb92l9AS7ypW0uhesqOuQzyR58Q4Sj+MvesQztZBgx86lHqNJkB8rQ6EP0LeA9czGytQUBpYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "solid-js": "^1.3.0",
+ "solid-transition-group": "^0.2.3"
+ }
+ },
"node_modules/autoprefixer": {
"version": "10.4.21",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
@@ -3248,6 +3312,24 @@
"url": "https://github.com/sponsors/mesqueeb"
}
},
+ "node_modules/cross-env": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
+ "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@epic-web/invariant": "^1.0.0",
+ "cross-spawn": "^7.0.6"
+ },
+ "bin": {
+ "cross-env": "dist/bin/cross-env.js",
+ "cross-env-shell": "dist/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -5648,6 +5730,29 @@
"node": ">=10"
}
},
+ "node_modules/seroval": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.0.tgz",
+ "integrity": "sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/seroval-plugins": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.0.tgz",
+ "integrity": "sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "seroval": "^1.0"
+ }
+ },
"node_modules/set-function-length": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.1.1.tgz",
@@ -5741,6 +5846,36 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/solid-js": {
+ "version": "1.9.11",
+ "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.11.tgz",
+ "integrity": "sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.1.0",
+ "seroval": "~1.5.0",
+ "seroval-plugins": "~1.5.0"
+ }
+ },
+ "node_modules/solid-transition-group": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/solid-transition-group/-/solid-transition-group-0.2.3.tgz",
+ "integrity": "sha512-iB72c9N5Kz9ykRqIXl0lQohOau4t0dhel9kjwFvx81UZJbVwaChMuBuyhiZmK24b8aKEK0w3uFM96ZxzcyZGdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@solid-primitives/refs": "^1.0.5",
+ "@solid-primitives/transition-group": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "pnpm": ">=8.6.0"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.6.12"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
diff --git a/package.json b/package.json
index 694e77da254..b5965b0f68e 100644
--- a/package.json
+++ b/package.json
@@ -6,8 +6,8 @@
"type": "module",
"scripts": {
"update": "nu make_docs.nu",
- "dev": "vuepress dev",
- "build": "vuepress build",
+ "dev": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vuepress dev",
+ "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vuepress build",
"postinstall": "patch-package",
"prepare": "git config --unset core.hooksPath && rm -rf .husky || true; npx lefthook install",
"pretty": "prettier --write ."
@@ -20,6 +20,8 @@
"@vuepress/plugin-shiki": "2.0.0-rc.118",
"@vuepress/plugin-sitemap": "2.0.0-rc.118",
"@vuepress/theme-default": "2.0.0-rc.118",
+ "asciinema-player": "^3.15.1",
+ "cross-env": "^10.1.0",
"lefthook": "1.8.2",
"patch-package": "^8.0.1",
"prettier": "^3.3.3",
diff --git a/typos.toml b/typos.toml
index cffb4c6088e..b7fb981409f 100644
--- a/typos.toml
+++ b/typos.toml
@@ -6,6 +6,10 @@ extend-ignore-identifiers-re = [
"(?i)foobar", # false positive in book/sorting.md
]
+extend-ignore-re = [
+ "\\x1b\\[[0-9;]*m.*", # ignore ansi color instructions
+]
+
[default.extend-words]
"ime" = "ime" # false positive in cookbook/polars_v_pandas_v_nushell.md
ba = "ba"