From cdf6d94f2f8920b3bc463f17d32de62ab5c1383f Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sun, 4 Oct 2026 15:48:09 +0200 Subject: [PATCH 1/4] Release notes for `v0.116.1` Please add your new features and breaking changes to the release notes by opening PRs against the `release-notes-v0.116.1` branch. ## TODO - [ ] PRs that need to land before the release, e.g. [deprecations] or [removals] - [ ] add the full changelog - [ ] categorize each PR - [ ] write all the sections and complete all the `TODO`s [deprecations]: https://github.com/nushell/nushell/labels/deprecation [removals]: https://github.com/nushell/nushell/pulls?q=is%3Apr+is%3Aopen+label%3Aremoval-after-deprecation --- blog/2026-10-04-nushell_v0_116_1.md | 153 ++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 blog/2026-10-04-nushell_v0_116_1.md diff --git a/blog/2026-10-04-nushell_v0_116_1.md b/blog/2026-10-04-nushell_v0_116_1.md new file mode 100644 index 00000000000..5c448fdba18 --- /dev/null +++ b/blog/2026-10-04-nushell_v0_116_1.md @@ -0,0 +1,153 @@ +--- +title: Nushell 0.116.1 +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.116.1 of Nu. This release adds... +--- + + + + + +# Nushell 0.116.1 + + + +Today, we're releasing version 0.116.1 of Nu. This release adds... + +# Where to get it + +Nu 0.116.1 is available as [pre-built binaries](https://github.com/nushell/nushell/releases/tag/0.116.1) 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 + + + + +# Changes + +## Additions + +### Widgets can set their border title with `--title` + +Use `--title ` to name the border of `tui table`, `tui tree`, `tui select`, `tui log`, `tui preview`, `tui search`, or `tui textbox`. The title replaces the widget's default name, while row counts and status indicators remain visible. For example: + +```nu +ls | tui table --title files | tui run +``` + +The table's border now reads `files (12)` rather than `table (12)` when it has 12 rows. For `tui preview`, the previewed filename follows the custom title, as in `files (Cargo.toml)`; without a file to preview, only the custom title appears. For `tui search`, the title also becomes the default placeholder unless `--placeholder` is set. An empty `--title` is rejected. + +### Deprecation: `tui label --title` is now `tui label --titlebar` + +To put a label in the top bar, use `tui label --titlebar "My app"` instead of `tui label --title "My app"`. The old switch still works but warns on first use and is scheduled for removal in 0.118.0. + +### Changed `tui` records + +For scripts that inspect TUI values, a titled widget now has a `title` field in its `widgets` record, and a top-bar label's `slot` is now `titlebar` instead of `title`. When nothing is being previewed, `values..title` is now an empty string rather than `preview`. + +### Choose `tui` border lines with `--border` or `$env.config.tui.border_type` + +Bordered TUI widgets now accept `--border ` to change their outline. This includes `tui table`, `tui tree`, `tui select`, `tui log`, `tui preview`, `tui search`, `tui textbox`, `tui box`, and the dropdowns opened by `tui menu`. The names match `table --theme` options, and the flag offers completion for valid border names. + +```nu +ls | tui table --border rounded | tui run + +$env.config.tui.border_type = "double" +ls | tui table | tui run +``` + +`$env.config.tui.border_type` sets the default for all TUI borders, including menu dropdowns and dialog frames. An individual widget's `--border` overrides it. The default is `single`, which preserves the previous appearance. For example, `rounded` draws `╭─╮`, `double` draws `╔═╗`, and `heavy` draws `┏━┓`; styles such as `basic`, `dots`, and `markdown` are available too. + +`none` and `default` are not valid TUI border names. Use `frameless` for an outline with no visible lines: it still occupies one cell, and the widget's title remains visible. When a widget has its own `--border`, its `widgets` record includes the selected border name. + + +## Bug fixes + +### TUI widgets now display streamed data as it arrives + +Slow and endless streams now update TUI widgets while `tui run` is open. A log displays each row as it arrives, and a progress bar advances as its input runs instead of starting at 100%: + +```nu +1.. | each {|n| sleep 1sec; $n} | tui log | tui run +``` + +This also works for streams piped into widgets in a child list, such as `tui split [(tail -f app.log | tui log) (ls | tui table)]`. + +TUI builders now always output a `tui` value: piping one into a non-TUI command, such as `1.. | tui table | first`, no longer returns the input rows. A TUI value saved with `let` reads its stream on the first run. If the stream finishes, later runs display the same rows; if it stops early, later runs display no rows. When a `tui run` closure, `tui bind`, button, or menu hook returns data, that data replaces the piped data for the rest of the run, without additional rows arriving from the stream. + +Streams now keep around 100,000 of their newest rows, dropping older rows in batches of 12,500. Up to 12,499 extra rows can appear between drops, and `tui log --max-lines` can raise the limit further. Piping data into a child list whose widgets all specify `--data` now produces an error instead of silently ignoring the input. + +### TUI split panes now resize reliably with keyboard and mouse + +After focusing a `tui split` with Tab, the arrow keys or `h`/`j`/`k`/`l` move its first divider in either direction. Each press moves it one cell on splits up to 100 cells wide or tall when there is room; on larger splits, a press may move it a few cells. This works for both the default side-by-side layout and `--vertical`, including short splits where resizing previously got stuck. + +```nu +ls | tui split [(tui table) (tui preview)] | tui run +ls | tui split [(tui table) (tui preview)] --vertical | tui run +``` + +Dragging a divider with the mouse now places it as close to the pointer as the surrounding panes allow, including dividers between later panes in a split. Resizing preserves at least one cell for every pane, and fixed-height splits such as a row of buttons no longer respond to keyboard resizing. + +### Completion menus stay open when nothing matches + +An open completion menu no longer closes when the typed text stops matching. +It shows `NO RECORDS FOUND` and fills again once the text matches, as it did before 0.116. +Cancelling an `@interactive` picker with Esc now closes its menu right away, and Tab on the same line opens the picker again. + +### Startup time now starts inside Nushell and is available throughout startup + +`$nu.startup-time` is now measured from the start of Nushell's `main` function, rather than from when the operating system created the process. It no longer includes the time spent loading the executable and its libraries, and `exec nu` starts a fresh measurement instead of carrying over the previous program's time. This applies across platforms. + +Before startup finishes, `$nu.startup-time` now contains the elapsed startup time instead of `-1ns`. It is available in config files, `-e` commands, and the `--mcp`, `--lsp`, `--dap`, and `--ide-check` modes. The `--ide-hover`, `--ide-complete`, `--ide-goto-def`, and `--ide-ast` modes can now also access `$nu`, enabling type information for constants built from it and completion of `$nu` fields. Config files loaded with `nu --mcp` now see `$nu.is-mcp` as `true`. + +With `--log-level perf`, the "before main" line is gone. The final REPL startup line is labeled "startup (main to first prompt)", and the `--mcp` and `--lsp` startup lines no longer include the time spent serving the rest of the session. + +### Other fixes + +* Fixed some incorrect cell path parsing. ([#19112](https://github.com/nushell/nushell/pull/19112)) +* Fixed a regression since 0.115 where custom completers on a `def --wrapped` rest parameter were not called for arguments starting with `-`, so `what --` only offered declared flags. ([#19130](https://github.com/nushell/nushell/pull/19130)) + + +# Notes for plugin developers + +# Hall of fame + +Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! :pray: + + + +# Full changelog + +| author | title | link | +| --- | --- | --- | +| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump taiki-e/install-action from 2.87.17 to 2.87.21 | [#19117](https://github.com/nushell/nushell/pull/19117) | +| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.50.2 to 1.50.3 | [#19118](https://github.com/nushell/nushell/pull/19118) | +| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump mq-markdown from 0.8.4 to 0.9.1 | [#19119](https://github.com/nushell/nushell/pull/19119) | +| [@fdncred](https://github.com/fdncred) | fix(tui): builders no longer read piped streams, so slow streams show live | [#19099](https://github.com/nushell/nushell/pull/19099) | +| [@fdncred](https://github.com/fdncred) | feat(tui): `--border` and `$env.config.tui.border_type` pick border lines by `table --theme` name | [#19100](https://github.com/nushell/nushell/pull/19100) | +| [@fdncred](https://github.com/fdncred) | fix(tui): arrow keys resize `tui split` panes in both directions | [#19101](https://github.com/nushell/nushell/pull/19101) | +| [@fdncred](https://github.com/fdncred) | feat(tui): `--title` renames a widget's border; `tui label --title` becomes `--titlebar` | [#19102](https://github.com/nushell/nushell/pull/19102) | +| [@fdncred](https://github.com/fdncred) | Update cell_path.rs | [#19112](https://github.com/nushell/nushell/pull/19112) | +| [@fdncred](https://github.com/fdncred) | fix(startup): time nushell from `main` like bash and zsh, fix `exec` | [#19136](https://github.com/nushell/nushell/pull/19136) | +| [@kronberger-droid](https://github.com/kronberger-droid) | chore: bump reedline to d7bcb12 | [#19123](https://github.com/nushell/nushell/pull/19123) | +| [@kronberger-droid](https://github.com/kronberger-droid) | fix(completions): keep menus open on no match, let cancelled pickers close and reopen | [#19129](https://github.com/nushell/nushell/pull/19129) | +| [@kronberger-droid](https://github.com/kronberger-droid) | fix(completions): run a wrapped rest completer on flag-like tokens | [#19130](https://github.com/nushell/nushell/pull/19130) | From 86a374b67c4a8a62520ad39bd50782fec01c0485 Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sun, 4 Oct 2026 16:24:37 +0200 Subject: [PATCH 2/4] restructure entries --- blog/2026-10-04-nushell_v0_116_1.md | 35 +++++++++-------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/blog/2026-10-04-nushell_v0_116_1.md b/blog/2026-10-04-nushell_v0_116_1.md index 5c448fdba18..5b2665319b0 100644 --- a/blog/2026-10-04-nushell_v0_116_1.md +++ b/blog/2026-10-04-nushell_v0_116_1.md @@ -26,24 +26,14 @@ As part of this release, we also publish a set of optional [plugins](https://www -# Highlights and themes of this release - - - - # Changes +## Deprecations + +### Deprecation: `tui label --title` is now `tui label --titlebar` + +To put a label in the top bar, use `tui label --titlebar "My app"` instead of `tui label --title "My app"`. The old switch still works but warns on first use and is scheduled for removal in 0.118.0. + ## Additions ### Widgets can set their border title with `--title` @@ -56,14 +46,6 @@ ls | tui table --title files | tui run The table's border now reads `files (12)` rather than `table (12)` when it has 12 rows. For `tui preview`, the previewed filename follows the custom title, as in `files (Cargo.toml)`; without a file to preview, only the custom title appears. For `tui search`, the title also becomes the default placeholder unless `--placeholder` is set. An empty `--title` is rejected. -### Deprecation: `tui label --title` is now `tui label --titlebar` - -To put a label in the top bar, use `tui label --titlebar "My app"` instead of `tui label --title "My app"`. The old switch still works but warns on first use and is scheduled for removal in 0.118.0. - -### Changed `tui` records - -For scripts that inspect TUI values, a titled widget now has a `title` field in its `widgets` record, and a top-bar label's `slot` is now `titlebar` instead of `title`. When nothing is being previewed, `values..title` is now an empty string rather than `preview`. - ### Choose `tui` border lines with `--border` or `$env.config.tui.border_type` Bordered TUI widgets now accept `--border ` to change their outline. This includes `tui table`, `tui tree`, `tui select`, `tui log`, `tui preview`, `tui search`, `tui textbox`, `tui box`, and the dropdowns opened by `tui menu`. The names match `table --theme` options, and the flag offers completion for valid border names. @@ -126,8 +108,11 @@ With `--log-level perf`, the "before main" line is gone. The final REPL startup * Fixed some incorrect cell path parsing. ([#19112](https://github.com/nushell/nushell/pull/19112)) * Fixed a regression since 0.115 where custom completers on a `def --wrapped` rest parameter were not called for arguments starting with `-`, so `what --` only offered declared flags. ([#19130](https://github.com/nushell/nushell/pull/19130)) +## Other changes + +### Changed `tui` records -# Notes for plugin developers +For scripts that inspect TUI values, a titled widget now has a `title` field in its `widgets` record, and a top-bar label's `slot` is now `titlebar` instead of `title`. When nothing is being previewed, `values..title` is now an empty string rather than `preview`. # Hall of fame From fe0a67b226885b227469b489274f61a8dd16e7f8 Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sun, 4 Oct 2026 16:30:44 +0200 Subject: [PATCH 3/4] added excerpt --- blog/2026-10-04-nushell_v0_116_1.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/blog/2026-10-04-nushell_v0_116_1.md b/blog/2026-10-04-nushell_v0_116_1.md index 5b2665319b0..897b7f1b603 100644 --- a/blog/2026-10-04-nushell_v0_116_1.md +++ b/blog/2026-10-04-nushell_v0_116_1.md @@ -3,18 +3,12 @@ title: Nushell 0.116.1 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.116.1 of Nu. This release adds... +excerpt: Today, we're releasing version 0.116.1 of Nu. This patch release improves TUI widgets with live stream updates, customizable borders and titles, and more reliable pane resizing, while fixing completions and refining startup-time reporting. --- - - - - # Nushell 0.116.1 - - -Today, we're releasing version 0.116.1 of Nu. This release adds... +Today, we're releasing version 0.116.1 of Nu. This patch release improves TUI widgets with live stream updates, customizable borders and titles, and more reliable pane resizing, while fixing completions and refining startup-time reporting. # Where to get it From 7e0ec921d15d72f108d6dd53852db0d283a986ed Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sun, 4 Oct 2026 16:30:52 +0200 Subject: [PATCH 4/4] fmt --- blog/2026-10-04-nushell_v0_116_1.md | 35 +++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/blog/2026-10-04-nushell_v0_116_1.md b/blog/2026-10-04-nushell_v0_116_1.md index 897b7f1b603..fbd02303c55 100644 --- a/blog/2026-10-04-nushell_v0_116_1.md +++ b/blog/2026-10-04-nushell_v0_116_1.md @@ -55,7 +55,6 @@ ls | tui table | tui run `none` and `default` are not valid TUI border names. Use `frameless` for an outline with no visible lines: it still occupies one cell, and the widget's title remains visible. When a widget has its own `--border`, its `widgets` record includes the selected border name. - ## Bug fixes ### TUI widgets now display streamed data as it arrives @@ -99,8 +98,8 @@ With `--log-level perf`, the "before main" line is gone. The final REPL startup ### Other fixes -* Fixed some incorrect cell path parsing. ([#19112](https://github.com/nushell/nushell/pull/19112)) -* Fixed a regression since 0.115 where custom completers on a `def --wrapped` rest parameter were not called for arguments starting with `-`, so `what --` only offered declared flags. ([#19130](https://github.com/nushell/nushell/pull/19130)) +- Fixed some incorrect cell path parsing. ([#19112](https://github.com/nushell/nushell/pull/19112)) +- Fixed a regression since 0.115 where custom completers on a `def --wrapped` rest parameter were not called for arguments starting with `-`, so `what --` only offered declared flags. ([#19130](https://github.com/nushell/nushell/pull/19130)) ## Other changes @@ -112,21 +111,19 @@ For scripts that inspect TUI values, a titled widget now has a `title` field in Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! :pray: - - # Full changelog -| author | title | link | -| --- | --- | --- | -| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump taiki-e/install-action from 2.87.17 to 2.87.21 | [#19117](https://github.com/nushell/nushell/pull/19117) | -| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.50.2 to 1.50.3 | [#19118](https://github.com/nushell/nushell/pull/19118) | -| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump mq-markdown from 0.8.4 to 0.9.1 | [#19119](https://github.com/nushell/nushell/pull/19119) | -| [@fdncred](https://github.com/fdncred) | fix(tui): builders no longer read piped streams, so slow streams show live | [#19099](https://github.com/nushell/nushell/pull/19099) | -| [@fdncred](https://github.com/fdncred) | feat(tui): `--border` and `$env.config.tui.border_type` pick border lines by `table --theme` name | [#19100](https://github.com/nushell/nushell/pull/19100) | -| [@fdncred](https://github.com/fdncred) | fix(tui): arrow keys resize `tui split` panes in both directions | [#19101](https://github.com/nushell/nushell/pull/19101) | -| [@fdncred](https://github.com/fdncred) | feat(tui): `--title` renames a widget's border; `tui label --title` becomes `--titlebar` | [#19102](https://github.com/nushell/nushell/pull/19102) | -| [@fdncred](https://github.com/fdncred) | Update cell_path.rs | [#19112](https://github.com/nushell/nushell/pull/19112) | -| [@fdncred](https://github.com/fdncred) | fix(startup): time nushell from `main` like bash and zsh, fix `exec` | [#19136](https://github.com/nushell/nushell/pull/19136) | -| [@kronberger-droid](https://github.com/kronberger-droid) | chore: bump reedline to d7bcb12 | [#19123](https://github.com/nushell/nushell/pull/19123) | -| [@kronberger-droid](https://github.com/kronberger-droid) | fix(completions): keep menus open on no match, let cancelled pickers close and reopen | [#19129](https://github.com/nushell/nushell/pull/19129) | -| [@kronberger-droid](https://github.com/kronberger-droid) | fix(completions): run a wrapped rest completer on flag-like tokens | [#19130](https://github.com/nushell/nushell/pull/19130) | +| author | title | link | +| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | +| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump taiki-e/install-action from 2.87.17 to 2.87.21 | [#19117](https://github.com/nushell/nushell/pull/19117) | +| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.50.2 to 1.50.3 | [#19118](https://github.com/nushell/nushell/pull/19118) | +| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump mq-markdown from 0.8.4 to 0.9.1 | [#19119](https://github.com/nushell/nushell/pull/19119) | +| [@fdncred](https://github.com/fdncred) | fix(tui): builders no longer read piped streams, so slow streams show live | [#19099](https://github.com/nushell/nushell/pull/19099) | +| [@fdncred](https://github.com/fdncred) | feat(tui): `--border` and `$env.config.tui.border_type` pick border lines by `table --theme` name | [#19100](https://github.com/nushell/nushell/pull/19100) | +| [@fdncred](https://github.com/fdncred) | fix(tui): arrow keys resize `tui split` panes in both directions | [#19101](https://github.com/nushell/nushell/pull/19101) | +| [@fdncred](https://github.com/fdncred) | feat(tui): `--title` renames a widget's border; `tui label --title` becomes `--titlebar` | [#19102](https://github.com/nushell/nushell/pull/19102) | +| [@fdncred](https://github.com/fdncred) | Update cell_path.rs | [#19112](https://github.com/nushell/nushell/pull/19112) | +| [@fdncred](https://github.com/fdncred) | fix(startup): time nushell from `main` like bash and zsh, fix `exec` | [#19136](https://github.com/nushell/nushell/pull/19136) | +| [@kronberger-droid](https://github.com/kronberger-droid) | chore: bump reedline to d7bcb12 | [#19123](https://github.com/nushell/nushell/pull/19123) | +| [@kronberger-droid](https://github.com/kronberger-droid) | fix(completions): keep menus open on no match, let cancelled pickers close and reopen | [#19129](https://github.com/nushell/nushell/pull/19129) | +| [@kronberger-droid](https://github.com/kronberger-droid) | fix(completions): run a wrapped rest completer on flag-like tokens | [#19130](https://github.com/nushell/nushell/pull/19130) |