From 1f5a47e6d042b2f4d4ffcbbf10d032e5882f3ffa Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sat, 11 Jul 2026 16:47:07 +0200 Subject: [PATCH 1/6] Release notes for `v0.114.1` Please add your new features and breaking changes to the release notes by opening PRs against the `release-notes-v0.114.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-07-11-nushell_v0_114_1.md | 263 ++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 blog/2026-07-11-nushell_v0_114_1.md diff --git a/blog/2026-07-11-nushell_v0_114_1.md b/blog/2026-07-11-nushell_v0_114_1.md new file mode 100644 index 00000000000..3e793167b11 --- /dev/null +++ b/blog/2026-07-11-nushell_v0_114_1.md @@ -0,0 +1,263 @@ +--- +title: Nushell 0.114.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.114.1 of Nu. This release adds... +--- + + + + + +# Nushell 0.114.1 + + + +Today, we're releasing version 0.114.1 of Nu. This release adds... + +# Where to get it + +Nu 0.114.1 is available as [pre-built binaries](https://github.com/nushell/nushell/releases/tag/0.114.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 + +## Bug fixes + +### More helpful errors for failed assignments with `enforce-runtime-annotations` + +With `enforce-runtime-annotations` enabled, assignments with incorrect types raise errors. + +Previously this error was `nu::shell::cant_convert` originally used for unsuccessful type coercions of command arguments. Unfortunately, this error only pointed at the assigned values *origin* and not at the failed assignment. + +This error has been switched to `nu::shell::type_mismatch` and now points to the failed assignment in addition to the value's origin. + +##### example 1 + + + + + + + + + + + + + + + +
Code + +```nushell +mut execution_time = -1 +$execution_time = $env.CMD_DURATION_MS +``` + +
Before + +``` +Error: nu::shell::cant_convert + + × Can't convert to int. + ╭─[Host Environment Variables:1:1] + 1 │ "LANG"="en_US.UTF-8" + · ▲ + · ╰── can't convert string to int + 2 │ "LC_TIME"="en_DK.UTF-8" + ╰──── +``` + +
After + +``` +Error: nu::shell::type_mismatch + + × Type mismatch. + ╭─[repl_entry #3:2:17] + 1 │ mut execution_time = -1 + 2 │ $execution_time = $env.CMD_DURATION_MS + · ┬ + · ╰── expected int, got string + ╰──── +``` + +
+ +##### example 2 + + + + + + + + + + + + + + + +
Code + +```nushell +# delibarete type erasure +# we need to bypass parse-time +# type checking for this example +let stuff: any = { + foo: "bar" +} + +mut x = 1 + +$x = $stuff.foo +``` + +
Before + +``` +Error: nu::shell::cant_convert + + × Can't convert to int. + ╭─[repl_entry #7:5:7] + 4 │ let stuff: any = { + 5 │ foo: "bar" + · ──┬── + · ╰── can't convert string to int + 6 │ } + ╰──── +``` + +
After + +``` +Error: nu::shell::type_mismatch + + × Type mismatch. + ╭─[repl_entry #1:5:7] + 4 │ let stuff: any = { + 5 │ foo: "bar" + · ──┬── + · ╰── the value is a string + 6 │ } + 7 │ + 8 │ mut x = 1 + 9 │ + 10 │ $x = $stuff.foo + · ┬ + · ╰── expected int, got string + ╰──── +``` + +
+ +### `input listen`'s output type + +- Fixed `input listen`'s output type signature to match actual returned value. + With the incorrect signature (and `enforce-runtime-annotations` on) `let x = input listen` would raise an error due to `$x`'s inferred type (based on `input listen`'s signature) not matching the value assigned to it. + +### Closure's input type is not inherited from the surrounding scope + +With last release, pipeline input type and how it affects various expressions are being tracked in a lot more cases. + +In fact, at least one too many: +```nushell +def mk-add-suffix [suffix: string]: nothing -> closure { + {|| $in ++ $suffix } +} +``` +``` +Error: nu::parser::operator_unsupported_type + + × The '++' operator does not work on values of type 'nothing'. + ╭─[repl_entry #1:2:6] + 1 │ def mk-add-suffix [suffix: string]: nothing -> closure { + 2 │ {|| $in ++ $suffix } + · ─┬─ ─┬ + · │ ╰── does not support 'nothing' + · ╰── nothing + 3 │ } + ╰──── +``` + +This is now fixed, and closures' input type will be inferred as `any`, the way it was before `0.114.0`. + +### Add list input type to more date commands + +Allow more date commands to have a list as input_output. These are the commands that were updated: +- date humanize +- date from-human +- date to-timezone +- format date +- into datetime + +### Fix type comparisons between `table` and `list` + +- Type checking treats `table` and `list` as compatible (provided the columns aren't disjoint), but that did not extend to `list>`. This has been fixed. +- Runtime type checking of *non-stream* pipeline data is now more accurate. + +### `uname` signature, and add detailed column info + +- Fixed `uname`'s output type signature to match its actual output. + Previously it was `table`, now it's `record<...>` and also includes its columns. + +### Other fixes + +* Fixed an issue where `run script.nu --some-flag` could bind the value to the wrong flag of the script's `main` when `main` declared multiple flags, causing shifted positional arguments or a value being accepted into a flag of the wrong type. Flags passed to `run` are now matched to `main` parameters by name. ([#18533](https://github.com/nushell/nushell/pull/18533)) +* Fixed an incorrect `idx search --help` example. ([#18550](https://github.com/nushell/nushell/pull/18550)) +* - Type checking of lists are relaxed. ([#18555](https://github.com/nushell/nushell/pull/18555)) +* - Fixed an issue in `for` loops where type of the looping variable was inferred incorrectly when iterating over a value/stream with a union type (`oneof`). This could manifest as a runtime type checking error with `enforce-runtime-annotations` enabled. ([#18551](https://github.com/nushell/nushell/pull/18551)) + + +# 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: + +| author | change | link | +| --- | --- | --- | +| [@cptpiepmatz](https://github.com/cptpiepmatz) | `cargo update` crossbeam crates | [#18554](https://github.com/nushell/nushell/pull/18554) | +| [@Juhan280](https://github.com/Juhan280) | Initialize `start_time` for MCP only in MCP mode to avoid cargo warning | [#18530](https://github.com/nushell/nushell/pull/18530) | + +# Full changelog + +| author | title | link | +| --- | --- | --- | +| [@Alb-O](https://github.com/Alb-O) | fix(idx): correct search context help example | [#18550](https://github.com/nushell/nushell/pull/18550) | +| [@Alb-O](https://github.com/Alb-O) | fix(parser): infer for loop items from iterable unions | [#18551](https://github.com/nushell/nushell/pull/18551) | +| [@Bahex](https://github.com/Bahex) | fix: assigment errors point to the assigment | [#18531](https://github.com/nushell/nushell/pull/18531) | +| [@Bahex](https://github.com/Bahex) | fix: `input listen`'s output type | [#18535](https://github.com/nushell/nushell/pull/18535) | +| [@Bahex](https://github.com/Bahex) | fix: closure's input type shouldn't be inherited from scope | [#18540](https://github.com/nushell/nushell/pull/18540) | +| [@Bahex](https://github.com/Bahex) | fix: relax assignability of list types | [#18555](https://github.com/nushell/nushell/pull/18555) | +| [@Bahex](https://github.com/Bahex) | fix type comparisons between `table` and `list<oneof>` | [#18560](https://github.com/nushell/nushell/pull/18560) | +| [@Bahex](https://github.com/Bahex) | fix: `uname` signature, and add detailed column info | [#18568](https://github.com/nushell/nushell/pull/18568) | +| [@Juhan280](https://github.com/Juhan280) | fix(mcp): initialize `start_time` for MCP only in MCP mode to avoid cargo warning | [#18530](https://github.com/nushell/nushell/pull/18530) | +| [@cptpiepmatz](https://github.com/cptpiepmatz) | `cargo update` crossbeam crates | [#18554](https://github.com/nushell/nushell/pull/18554) | +| [@fdncred](https://github.com/fdncred) | add list input type to more date commands | [#18536](https://github.com/nushell/nushell/pull/18536) | +| [@hexbinoct](https://github.com/hexbinoct) | Fix `run` binding forwarded flags to the wrong parameter | [#18533](https://github.com/nushell/nushell/pull/18533) | From 24fafa16519296f5d6ac2cf3795bf78186a92e1f Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sat, 11 Jul 2026 16:48:45 +0200 Subject: [PATCH 2/6] typos fix --- blog/2026-07-11-nushell_v0_114_1.md | 68 +++++++++++++++-------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/blog/2026-07-11-nushell_v0_114_1.md b/blog/2026-07-11-nushell_v0_114_1.md index 3e793167b11..a73c71d0b87 100644 --- a/blog/2026-07-11-nushell_v0_114_1.md +++ b/blog/2026-07-11-nushell_v0_114_1.md @@ -50,11 +50,12 @@ As part of this release, we also publish a set of optional [plugins](https://www With `enforce-runtime-annotations` enabled, assignments with incorrect types raise errors. -Previously this error was `nu::shell::cant_convert` originally used for unsuccessful type coercions of command arguments. Unfortunately, this error only pointed at the assigned values *origin* and not at the failed assignment. +Previously this error was `nu::shell::cant_convert` originally used for unsuccessful type coercions of command arguments. Unfortunately, this error only pointed at the assigned values _origin_ and not at the failed assignment. This error has been switched to `nu::shell::type_mismatch` and now points to the failed assignment in addition to the value's origin. ##### example 1 + @@ -108,6 +109,7 @@ Error: nu::shell::type_mismatch
Code
##### example 2 + @@ -163,9 +165,9 @@ Error: nu::shell::type_mismatch · ──┬── · ╰── the value is a string 6 │ } - 7 │ + 7 │ 8 │ mut x = 1 - 9 │ + 9 │ 10 │ $x = $stuff.foo · ┬ · ╰── expected int, got string @@ -186,11 +188,13 @@ Error: nu::shell::type_mismatch With last release, pipeline input type and how it affects various expressions are being tracked in a lot more cases. In fact, at least one too many: + ```nushell def mk-add-suffix [suffix: string]: nothing -> closure { {|| $in ++ $suffix } } ``` + ``` Error: nu::parser::operator_unsupported_type @@ -209,17 +213,18 @@ This is now fixed, and closures' input type will be inferred as `any`, the way i ### Add list input type to more date commands -Allow more date commands to have a list as input_output. These are the commands that were updated: -- date humanize -- date from-human -- date to-timezone -- format date +Allow more date commands to have a list as input_output. These are the commands that were updated: + +- date humanize +- date from-human +- date to-timezone +- format date - into datetime ### Fix type comparisons between `table` and `list` - Type checking treats `table` and `list` as compatible (provided the columns aren't disjoint), but that did not extend to `list>`. This has been fixed. -- Runtime type checking of *non-stream* pipeline data is now more accurate. +- Runtime type checking of _non-stream_ pipeline data is now more accurate. ### `uname` signature, and add detailed column info @@ -228,11 +233,10 @@ Allow more date commands to have a list as input_output. These are the commands ### Other fixes -* Fixed an issue where `run script.nu --some-flag` could bind the value to the wrong flag of the script's `main` when `main` declared multiple flags, causing shifted positional arguments or a value being accepted into a flag of the wrong type. Flags passed to `run` are now matched to `main` parameters by name. ([#18533](https://github.com/nushell/nushell/pull/18533)) -* Fixed an incorrect `idx search --help` example. ([#18550](https://github.com/nushell/nushell/pull/18550)) -* - Type checking of lists are relaxed. ([#18555](https://github.com/nushell/nushell/pull/18555)) -* - Fixed an issue in `for` loops where type of the looping variable was inferred incorrectly when iterating over a value/stream with a union type (`oneof`). This could manifest as a runtime type checking error with `enforce-runtime-annotations` enabled. ([#18551](https://github.com/nushell/nushell/pull/18551)) - +- Fixed an issue where `run script.nu --some-flag` could bind the value to the wrong flag of the script's `main` when `main` declared multiple flags, causing shifted positional arguments or a value being accepted into a flag of the wrong type. Flags passed to `run` are now matched to `main` parameters by name. ([#18533](https://github.com/nushell/nushell/pull/18533)) +- Fixed an incorrect `idx search --help` example. ([#18550](https://github.com/nushell/nushell/pull/18550)) +- - Type checking of lists are relaxed. ([#18555](https://github.com/nushell/nushell/pull/18555)) +- - Fixed an issue in `for` loops where type of the looping variable was inferred incorrectly when iterating over a value/stream with a union type (`oneof`). This could manifest as a runtime type checking error with `enforce-runtime-annotations` enabled. ([#18551](https://github.com/nushell/nushell/pull/18551)) # Notes for plugin developers @@ -240,24 +244,24 @@ Allow more date commands to have a list as input_output. These are the commands Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! :pray: -| author | change | link | -| --- | --- | --- | -| [@cptpiepmatz](https://github.com/cptpiepmatz) | `cargo update` crossbeam crates | [#18554](https://github.com/nushell/nushell/pull/18554) | -| [@Juhan280](https://github.com/Juhan280) | Initialize `start_time` for MCP only in MCP mode to avoid cargo warning | [#18530](https://github.com/nushell/nushell/pull/18530) | +| author | change | link | +| ---------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------- | +| [@cptpiepmatz](https://github.com/cptpiepmatz) | `cargo update` crossbeam crates | [#18554](https://github.com/nushell/nushell/pull/18554) | +| [@Juhan280](https://github.com/Juhan280) | Initialize `start_time` for MCP only in MCP mode to avoid cargo warning | [#18530](https://github.com/nushell/nushell/pull/18530) | # Full changelog -| author | title | link | -| --- | --- | --- | -| [@Alb-O](https://github.com/Alb-O) | fix(idx): correct search context help example | [#18550](https://github.com/nushell/nushell/pull/18550) | -| [@Alb-O](https://github.com/Alb-O) | fix(parser): infer for loop items from iterable unions | [#18551](https://github.com/nushell/nushell/pull/18551) | -| [@Bahex](https://github.com/Bahex) | fix: assigment errors point to the assigment | [#18531](https://github.com/nushell/nushell/pull/18531) | -| [@Bahex](https://github.com/Bahex) | fix: `input listen`'s output type | [#18535](https://github.com/nushell/nushell/pull/18535) | -| [@Bahex](https://github.com/Bahex) | fix: closure's input type shouldn't be inherited from scope | [#18540](https://github.com/nushell/nushell/pull/18540) | -| [@Bahex](https://github.com/Bahex) | fix: relax assignability of list types | [#18555](https://github.com/nushell/nushell/pull/18555) | -| [@Bahex](https://github.com/Bahex) | fix type comparisons between `table` and `list<oneof>` | [#18560](https://github.com/nushell/nushell/pull/18560) | -| [@Bahex](https://github.com/Bahex) | fix: `uname` signature, and add detailed column info | [#18568](https://github.com/nushell/nushell/pull/18568) | -| [@Juhan280](https://github.com/Juhan280) | fix(mcp): initialize `start_time` for MCP only in MCP mode to avoid cargo warning | [#18530](https://github.com/nushell/nushell/pull/18530) | -| [@cptpiepmatz](https://github.com/cptpiepmatz) | `cargo update` crossbeam crates | [#18554](https://github.com/nushell/nushell/pull/18554) | -| [@fdncred](https://github.com/fdncred) | add list input type to more date commands | [#18536](https://github.com/nushell/nushell/pull/18536) | -| [@hexbinoct](https://github.com/hexbinoct) | Fix `run` binding forwarded flags to the wrong parameter | [#18533](https://github.com/nushell/nushell/pull/18533) | +| author | title | link | +| ---------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------- | +| [@Alb-O](https://github.com/Alb-O) | fix(idx): correct search context help example | [#18550](https://github.com/nushell/nushell/pull/18550) | +| [@Alb-O](https://github.com/Alb-O) | fix(parser): infer for loop items from iterable unions | [#18551](https://github.com/nushell/nushell/pull/18551) | +| [@Bahex](https://github.com/Bahex) | fix: assignment errors point to the assignment | [#18531](https://github.com/nushell/nushell/pull/18531) | +| [@Bahex](https://github.com/Bahex) | fix: `input listen`'s output type | [#18535](https://github.com/nushell/nushell/pull/18535) | +| [@Bahex](https://github.com/Bahex) | fix: closure's input type shouldn't be inherited from scope | [#18540](https://github.com/nushell/nushell/pull/18540) | +| [@Bahex](https://github.com/Bahex) | fix: relax assignability of list types | [#18555](https://github.com/nushell/nushell/pull/18555) | +| [@Bahex](https://github.com/Bahex) | fix type comparisons between `table` and `list<oneof>` | [#18560](https://github.com/nushell/nushell/pull/18560) | +| [@Bahex](https://github.com/Bahex) | fix: `uname` signature, and add detailed column info | [#18568](https://github.com/nushell/nushell/pull/18568) | +| [@Juhan280](https://github.com/Juhan280) | fix(mcp): initialize `start_time` for MCP only in MCP mode to avoid cargo warning | [#18530](https://github.com/nushell/nushell/pull/18530) | +| [@cptpiepmatz](https://github.com/cptpiepmatz) | `cargo update` crossbeam crates | [#18554](https://github.com/nushell/nushell/pull/18554) | +| [@fdncred](https://github.com/fdncred) | add list input type to more date commands | [#18536](https://github.com/nushell/nushell/pull/18536) | +| [@hexbinoct](https://github.com/hexbinoct) | Fix `run` binding forwarded flags to the wrong parameter | [#18533](https://github.com/nushell/nushell/pull/18533) | From 7631be46513a8baaeb4faa9ec20e04794ed734d1 Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sat, 11 Jul 2026 17:15:01 +0200 Subject: [PATCH 3/6] added `PrOther` component to make adding other changes easier --- .vuepress/client.js | 2 ++ .vuepress/components/PrOther.vue | 15 +++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 .vuepress/components/PrOther.vue diff --git a/.vuepress/client.js b/.vuepress/client.js index dc176d2c86a..7cc423419ef 100755 --- a/.vuepress/client.js +++ b/.vuepress/client.js @@ -10,6 +10,7 @@ import BlogPosts from './components/BlogPosts.vue'; import ExperimentalOption from './components/ExperimentalOption.vue'; import JumpToc from './components/JumpToc.vue'; import PrBy from './components/PrBy.vue'; +import PrOther from './components/PrOther.vue'; import ReleaseToc from './components/ReleaseToc.vue'; import URLDocSearch from './components/URLDocSearch.vue'; @@ -20,6 +21,7 @@ export default defineClientConfig({ app.component('ExperimentalOption', ExperimentalOption); app.component('JumpToc', JumpToc); app.component('PrBy', PrBy); + app.component('PrOther', PrOther); app.component('ReleaseToc', ReleaseToc); // Override the builtin searchbox diff --git a/.vuepress/components/PrOther.vue b/.vuepress/components/PrOther.vue new file mode 100644 index 00000000000..78256db25a3 --- /dev/null +++ b/.vuepress/components/PrOther.vue @@ -0,0 +1,15 @@ + + + From b8ce16aa76f9f1b3f6306b1353c42f0baeb6289f Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sat, 11 Jul 2026 17:15:22 +0200 Subject: [PATCH 4/6] restructured changelog a bit --- blog/2026-07-11-nushell_v0_114_1.md | 37 ++++++++++------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/blog/2026-07-11-nushell_v0_114_1.md b/blog/2026-07-11-nushell_v0_114_1.md index a73c71d0b87..f8da4cda69b 100644 --- a/blog/2026-07-11-nushell_v0_114_1.md +++ b/blog/2026-07-11-nushell_v0_114_1.md @@ -178,11 +178,6 @@ Error: nu::shell::type_mismatch
Code
-### `input listen`'s output type - -- Fixed `input listen`'s output type signature to match actual returned value. - With the incorrect signature (and `enforce-runtime-annotations` on) `let x = input listen` would raise an error due to `$x`'s inferred type (based on `input listen`'s signature) not matching the value assigned to it. - ### Closure's input type is not inherited from the surrounding scope With last release, pipeline input type and how it affects various expressions are being tracked in a lot more cases. @@ -213,32 +208,24 @@ This is now fixed, and closures' input type will be inferred as `any`, the way i ### Add list input type to more date commands -Allow more date commands to have a list as input_output. These are the commands that were updated: - -- date humanize -- date from-human -- date to-timezone -- format date -- into datetime - -### Fix type comparisons between `table` and `list` +Allow more `date` commands to have a list as `input -> output`. These are the commands that were updated: -- Type checking treats `table` and `list` as compatible (provided the columns aren't disjoint), but that did not extend to `list>`. This has been fixed. -- Runtime type checking of _non-stream_ pipeline data is now more accurate. - -### `uname` signature, and add detailed column info - -- Fixed `uname`'s output type signature to match its actual output. - Previously it was `table`, now it's `record<...>` and also includes its columns. +- `date humanize` +- `date from-human` +- `date to-timezone` +- `format date` +- `into datetime` ### Other fixes +- Fixed `input listen`'s output type signature to match actual returned value. With the incorrect signature (and `enforce-runtime-annotations` on) `let x = input listen` would raise an error due to `$x`'s inferred type (based on `input listen`'s signature) not matching the value assigned to it. +- Type checking treats `table` and `list` as compatible (provided the columns aren't disjoint), but that did not extend to `list>`. This has been fixed. +- Runtime type checking of _non-stream_ pipeline data is now more accurate. +- Fixed `uname`'s output type signature to match its actual output. Previously it was `table`, now it's `record<...>` and also includes its columns. - Fixed an issue where `run script.nu --some-flag` could bind the value to the wrong flag of the script's `main` when `main` declared multiple flags, causing shifted positional arguments or a value being accepted into a flag of the wrong type. Flags passed to `run` are now matched to `main` parameters by name. ([#18533](https://github.com/nushell/nushell/pull/18533)) - Fixed an incorrect `idx search --help` example. ([#18550](https://github.com/nushell/nushell/pull/18550)) -- - Type checking of lists are relaxed. ([#18555](https://github.com/nushell/nushell/pull/18555)) -- - Fixed an issue in `for` loops where type of the looping variable was inferred incorrectly when iterating over a value/stream with a union type (`oneof`). This could manifest as a runtime type checking error with `enforce-runtime-annotations` enabled. ([#18551](https://github.com/nushell/nushell/pull/18551)) - -# Notes for plugin developers +- Type checking of lists are relaxed. ([#18555](https://github.com/nushell/nushell/pull/18555)) +- Fixed an issue in `for` loops where type of the looping variable was inferred incorrectly when iterating over a value/stream with a union type (`oneof`). This could manifest as a runtime type checking error with `enforce-runtime-annotations` enabled. ([#18551](https://github.com/nushell/nushell/pull/18551)) # Hall of fame From 627d69f082af1d5396991d8b8b4632779130b09d Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sat, 11 Jul 2026 17:55:45 +0200 Subject: [PATCH 5/6] make examples use ansi --- blog/2026-07-11-nushell_v0_114_1.md | 119 ++++++++++++++-------------- 1 file changed, 58 insertions(+), 61 deletions(-) diff --git a/blog/2026-07-11-nushell_v0_114_1.md b/blog/2026-07-11-nushell_v0_114_1.md index f8da4cda69b..ab691b4cc96 100644 --- a/blog/2026-07-11-nushell_v0_114_1.md +++ b/blog/2026-07-11-nushell_v0_114_1.md @@ -54,14 +54,14 @@ Previously this error was `nu::shell::cant_convert` originally used for unsucces This error has been switched to `nu::shell::type_mismatch` and now points to the failed assignment in addition to the value's origin. -##### example 1 +##### Example 1 @@ -92,30 +93,30 @@ Error: nu::shell::cant_convert
Code -```nushell +```nushell :line-numbers mut execution_time = -1 $execution_time = $env.CMD_DURATION_MS ``` @@ -73,16 +73,17 @@ $execution_time = $env.CMD_DURATION_MS Before -``` -Error: nu::shell::cant_convert - - × Can't convert to int. - ╭─[Host Environment Variables:1:1] - 1 │ "LANG"="en_US.UTF-8" - · ▲ - · ╰── can't convert string to int - 2 │ "LC_TIME"="en_DK.UTF-8" +```ansi :no-line-numbers +Error: nu::shell::cant_convert + + × Can't convert to int. + ╭─[Host Environment Variables:1:1] + 1 │ "ALLUSERSPROFILE"="C:\\ProgramData" + · ▲ + · ╰── can't convert string to int + 2 │ "ANDROID_AVD_HOME"="B:\\AndroidAVDs" ╰──── + ``` After -``` -Error: nu::shell::type_mismatch - - × Type mismatch. - ╭─[repl_entry #3:2:17] - 1 │ mut execution_time = -1 - 2 │ $execution_time = $env.CMD_DURATION_MS - · ┬ - · ╰── expected int, got string +```ansi :no-line-numbers +Error: nu::shell::type_mismatch + + × Type mismatch. + ╭─[repl_entry #3:1:17] + 1 │ $execution_time = $env.CMD_DURATION_MS + ·  ┬ + · ╰── expected int, got string ╰──── + ```
-##### example 2 +##### Example 2 @@ -155,23 +155,21 @@ Error: nu::shell::cant_convert @@ -190,18 +188,17 @@ def mk-add-suffix [suffix: string]: nothing -> closure { } ``` -``` -Error: nu::parser::operator_unsupported_type - - × The '++' operator does not work on values of type 'nothing'. - ╭─[repl_entry #1:2:6] - 1 │ def mk-add-suffix [suffix: string]: nothing -> closure { - 2 │ {|| $in ++ $suffix } - · ─┬─ ─┬ - · │ ╰── does not support 'nothing' - · ╰── nothing - 3 │ } - ╰──── +```ansi :no-line-numbers +Error: nu::parser::operator_unsupported_type + + × The '++' operator does not work on values of type 'nothing'. + ╭─[repl_entry #8:2:5] + 1 │ def mk-add-suffix [suffix: string]: nothing -> closure { + 2 │ {|| $in ++ $suffix }} + ·  ─┬─ ─┬ + · │ ╰── does not support 'nothing' + · ╰── nothing + ╰──── ``` This is now fixed, and closures' input type will be inferred as `any`, the way it was before `0.114.0`. From 007a8e7ede104d573544b17fb76a24732f21755e Mon Sep 17 00:00:00 2001 From: Tim 'Piepmatz' Hesse Date: Sat, 11 Jul 2026 18:08:18 +0200 Subject: [PATCH 6/6] add highlights and excerpt --- blog/2026-07-11-nushell_v0_114_1.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/blog/2026-07-11-nushell_v0_114_1.md b/blog/2026-07-11-nushell_v0_114_1.md index ab691b4cc96..ebab2ecf56e 100644 --- a/blog/2026-07-11-nushell_v0_114_1.md +++ b/blog/2026-07-11-nushell_v0_114_1.md @@ -3,7 +3,7 @@ title: Nushell 0.114.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.114.1 of Nu. This release adds... +excerpt: Today, we're releasing version 0.114.1 of Nu. This patch release fixes issues found after `enforce-runtime-annotations` became opt-out in the last version, improving runtime type checks and error reporting. --- @@ -12,9 +12,7 @@ excerpt: Today, we're releasing version 0.114.1 of Nu. This release adds... # Nushell 0.114.1 - - -Today, we're releasing version 0.114.1 of Nu. This release adds... +Today, we're releasing version 0.114.1 of Nu. This patch release fixes issues found after `enforce-runtime-annotations` became opt-out in the last version, improving runtime type checks and error reporting. # Where to get it @@ -42,6 +40,28 @@ As part of this release, we also publish a set of optional [plugins](https://www for the list of available *containers* --> +## Follow-up fixes for runtime annotation checks + +In [Nushell 0.114.0](/blog/2026-07-04-nushell_v0_114_0.html), we promoted [`enforce-runtime-annotations`](https://github.com/nushell/nushell/issues/16832) from an opt-in experimental option to an opt-out experimental option. That is the usual path for experimental options: more people try them, we get better feedback, and the feature gets closer to being stable. + +As expected, that wider testing found some rough edges. Some came from invalid signatures, some from type checks that were too strict, and some from checks that were simply not accurate enough. We are tracking those reports in [issue #18528](https://github.com/nushell/nushell/issues/18528), and this patch release fixes a number of them, mostly thanks to [@Bahex](https://github.com/Bahex). Thank you! + +More issues may still turn up. Please report them if you run into anything suspicious. If `enforce-runtime-annotations` blocks your workflow, you can disable just that option before Nushell starts: + +```nushell +NU_EXPERIMENTAL_OPTIONS=enforce-runtime-annotations=false nu +``` + +Or pass it as a command-line flag: + +```nushell +nu --experimental-options enforce-runtime-annotations=false +``` + +See the [`nu-experimental` user documentation](https://docs.rs/nu-experimental/latest/nu_experimental/#for-users) for more details. + +We still encourage everyone to keep as many experimental options enabled as possible. It helps us find bugs earlier and make Nushell better for future releases. + # Changes ## Bug fixes
Code -```nushell +```nushell :line-numbers # delibarete type erasure # we need to bypass parse-time # type checking for this example @@ -135,17 +136,16 @@ $x = $stuff.foo Before -``` -Error: nu::shell::cant_convert - - × Can't convert to int. - ╭─[repl_entry #7:5:7] - 4 │ let stuff: any = { - 5 │ foo: "bar" - · ──┬── - · ╰── can't convert string to int - 6 │ } +```ansi :no-line-numbers +Error: nu::shell::cant_convert + + × Can't convert to int. + ╭─[repl_entry #5:1:24] + 1 │ let stuff: any = {foo: "bar"} + ·  ──┬── + · ╰── can't convert string to int ╰──── + ``` After -``` -Error: nu::shell::type_mismatch - - × Type mismatch. - ╭─[repl_entry #1:5:7] - 4 │ let stuff: any = { - 5 │ foo: "bar" - · ──┬── - · ╰── the value is a string - 6 │ } - 7 │ - 8 │ mut x = 1 - 9 │ - 10 │ $x = $stuff.foo - · ┬ - · ╰── expected int, got string - ╰──── +```ansi :no-line-numbers +Error: nu::shell::type_mismatch + + × Type mismatch. + ╭─[repl_entry #5:1:24] + 1 │ let stuff: any = {foo: "bar"} + ·  ──┬── + · ╰── the value is a string + ╰──── + ╭─[repl_entry #7:1:4] + 1 │ $x = $stuff.foo + ·  ┬ + · ╰── expected int, got string + ╰──── + ```