You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: blog/2026-07-04-nushell_v0_114_0.md
+36-36Lines changed: 36 additions & 36 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -91,7 +91,7 @@ foo bar # valid
91
91
foo sub baz # invalid, `sub` is not implicitly imported
92
92
```
93
93
94
-
To have your modules keep the old behavior, you will need to export the modules contents explicitly:
94
+
To have your modules keep the old behavior, you will need to export the module's contents explicitly:
95
95
96
96
```nushell
97
97
export module foo {
@@ -118,7 +118,7 @@ Thus, explicit `use`s as recommended above will not run `export-env` blocks, whi
118
118
119
119
### Type System Improvements <JumpToc/> <PrBy:pr="18430"user="Bahex" />
120
120
121
-
This release comes with a handful of improvements to the type system, specifically the parsetime type checking. But beware! Type annotations that previously seemed fine might raise errors, as they might have been passing only because typing information was insufficient to check it at parse time.
121
+
This release comes with a handful of improvements to the type system, specifically the parse-time type checking. But beware! Type annotations that previously seemed fine might raise errors, as they might have been passing only because typing information was insufficient to check it at parse time.
122
122
123
123
#### Commands' output types are now inferred based on pipeline input type.
124
124
@@ -197,24 +197,24 @@ let list = [["a" "b" "c"] [1 2 3]]
197
197
let elem = $list.0
198
198
```
199
199
200
-
Previously `$elem`'s type would be `list<oneof<int, string>>`, now `$elem`'s type is `oneof<list<int>, list<string>>`.
200
+
Previously,`$elem`'s type would be `list<oneof<int, string>>`, now `$elem`'s type is `oneof<list<int>, list<string>>`.
201
201
202
-
#### Operator type checking now accounts of`oneof` types
202
+
#### Operator type checking now accounts for`oneof` types
203
203
204
-
Nushell as language tries to strike a careful balance between correctness and convenience.
205
-
One should be able to trust nu's type system will help them write correct and robust scripts, but nu shouldn't shouldn't get in the way of a nice REPL experience.
204
+
Nushell as a language tries to strike a careful balance between correctness and convenience.
205
+
One should be able to trust nu's type system will help them write correct and robust scripts, but nu shouldn't get in the way of a nice REPL experience.
206
206
207
207
Because of that, some operations that might be invalid but aren't definitely so do not raise parse errors and such checks are delegated to runtime.
208
208
209
-
For example `int`'s can only be added with `int`'s and `float`'s, yet the following code does not raise parse time error.
209
+
For example,`int`'s can only be added with `int`'s and `float`'s, yet the following code does not raise a parse-time error.
210
210
211
211
```nushell
212
212
def foo [anything: any] {
213
213
10 + $anything
214
214
}
215
215
```
216
216
217
-
But previously, despite being `oneof<int, nothing>` being specific than `any`, would be rejected by the type checker for addition to `int`s.
217
+
But previously, despite `oneof<int, nothing>` being more specific than `any`, it would be rejected by the type checker for addition to `int`s.
Now, as long as the two operands have a possibility of being valid for an operation the parsetime type checker will accept the expression, leaving errors to runtime type checking.
239
+
Now, as long as the two operands have a possibility of being valid for an operation the parse-time type checker will accept the expression, leaving errors to runtime type checking.
240
240
241
241
### Promoted `enforce-runtime-annotations` to opt-out <JumpToc/> <PrBy:pr="18359"user="Bahex" />
242
242
243
243
In Nushell 0.108.0, [`enforce-runtime-annotations`](https://www.nushell.sh/blog/2025-10-15-nushell_v0_108_0.html#enforce-assignment-type-annotations-at-runtime-16079-toc) experimental option was added. With this release `enforce-runtime-annotations` is promoted to being opt-out, meaning that by default this experimental option is enabled now.
244
244
245
-
This option enforces type checking of let assignments at runtime, catching type errors that might have been missed in parsetime type checking due to insufficient type information.
245
+
This option enforces type checking of let assignments at runtime, catching type errors that might have been missed in parse-time type checking due to insufficient type information.
246
246
247
247
If you experience any trouble with this, you can disable it via the command-line argument:
248
248
@@ -274,11 +274,11 @@ This release comes with various improvements to `from xlsx` and `from ods` comma
274
274
These commands' signatures previously incorrectly indicated that they return tables.
275
275
They return _records_ that contain _tables_, with a table for each sheet in the file.
276
276
277
-
Also, signature of the `from ods` command previously had `string` as its input type rather than `binary`. This has been fixed.
277
+
Also, the signature of the `from ods` command previously had `string` as its input type rather than `binary`. This has been fixed.
278
278
279
279
#### Support for more data types
280
280
281
-
Previously importing `datetime` values were supported only for `xlsx` files.
281
+
Previously, importing `datetime` values were supported only for `xlsx` files.
282
282
283
283
This release not only adds that for `ods` files as well, but also broadens the `datetime` formats that can be imported.
284
284
@@ -292,7 +292,7 @@ This release removes it.
292
292
293
293
Don't worry! Instead of the `--header-row` flag, `from xlsx`_and_`from ods` get two new flags that will provide finer control over how spreadsheets are imported:
294
294
295
-
-`--noheaders`: What it says on the tin, identical to same flag on `from csv`, `from tsv` and `from ssv` commands.
295
+
-`--noheaders`: What it says on the tin, identical to the same flag on `from csv`, `from tsv` and `from ssv` commands.
296
296
-`--first-row`: This is where it gets a little interesting. `from xlsx` and `from ods` skip reading all leading empty rows. This is how it has worked for a long time.
297
297
`--first-row=0` allows you to turn that off and keep those empty lines. It can also be used to start reading from an arbitrary row: `--first-row $n`
With these filerelative spans, making external tools for reporting nushell errors should be much easier.
567
+
With these file-relative spans, making external tools for reporting nushell errors should be much easier.
568
568
569
569
### Removed deprecated `grid` record input support <JumpToc/> <PrBy:pr="18276"user="Juhan280" />
570
570
571
-
In the last release, `grid` command was modified to accept a column name argument rather than implicitly displaying the `name` column. The implicit assumption of `name` was deprecated, along with accepting a single record rather than a table.
572
-
These deprecated behaviors of `grid` command is removed with this release.
571
+
In the last release, the `grid` command was modified to accept a column name argument rather than implicitly displaying the `name` column. The implicit assumption of `name` was deprecated, along with accepting a single record rather than a table.
572
+
These deprecated behaviors of the `grid` command are removed with this release.
573
573
574
574
```nushell
575
-
# This will no longer work.
575
+
# This will no longer work
576
576
{ name: test } | grid
577
577
578
-
# And should be updated to receive tables and include the column name as an argument.
578
+
# …and should be updated to receive tables and include the column name as an argument
579
579
[{ name: test }] | grid name
580
580
```
581
581
@@ -593,7 +593,7 @@ This is a breaking change.
593
593
594
594
Previously `iter scan` always needed an initial value to start off of (equivalent to `reduce`'s `--fold`), and to compensate for it a `--noinit` flag to remove that initial value from the output.
@@ -1355,7 +1355,7 @@ This has no effect on non-whole floats.
1355
1355
- Added completions to `ansi gradient`'s `--fgnamed` and `--bgnamed` flags. ([#18342](https://github.com/nushell/nushell/pull/18342))
1356
1356
-`nu-highlight` now clears `content_type` metadata ([#18266](https://github.com/nushell/nushell/pull/18266))
1357
1357
- Keybinding `edit` events now support reedline's verb-based edit commands (`move`, `extend`, `cut`, `copy`, `change`, `erase`) combined with a `motion` and its parameters, enabling vi-style operator/motion keybindings to be expressed directly in config. The new commands and their fields are discoverable via `keybindings list`. ([#18396](https://github.com/nushell/nushell/pull/18396))
1358
-
- The http commands now use the response body as error message when getting an error response. ([#18387](https://github.com/nushell/nushell/pull/18387))
1358
+
- The `http` commands now use the response body as error message when getting an error response. ([#18387](https://github.com/nushell/nushell/pull/18387))
1359
1359
- If the `NU_EXPERIMENTAL_OPTIONS` environment variable is set, it will be used when running nushell with the `--login` or `--execute` flags since they also load config. ([#18392](https://github.com/nushell/nushell/pull/18392))
1360
1360
- Refactor commands that use sqlite pushdown so that it's easier to add other pushdown filters. ([#18398](https://github.com/nushell/nushell/pull/18398))
1361
1361
- Added common navigation shortcuts to `explore config` command: `hl` to collapse/expand, and `jk`/`ctrl+p/n` to go up and down. ([#18440](https://github.com/nushell/nushell/pull/18440))
@@ -1372,7 +1372,7 @@ Deprecated `str downcase`, using it shows a warning recommending `str lowercase`
1372
1372
1373
1373
### Other deprecations <JumpToc/>
1374
1374
1375
-
- Removed the deprecated `use std/clip``copy` and `paste` commands, they are now called `copy52` and `paste52` for the ones that use the terminal `OSC 52`, or you can use `clip copy` and `clip paste` from the experimental option `native-clip` that access the system clipboard directly. ([#18403](https://github.com/nushell/nushell/pull/18403))
1375
+
- Removed the deprecated `use std/clip``copy` and `paste` commands; they are now called `copy52` and `paste52` for the ones that use the terminal `OSC 52`, or you can use `clip copy` and `clip paste` from the experimental option `native-clip` that access the system clipboard directly. ([#18403](https://github.com/nushell/nushell/pull/18403))
1376
1376
1377
1377
## Other changes <JumpToc/>
1378
1378
@@ -1455,24 +1455,24 @@ Providing the metadata will cause the `table` command to render the output diffe
1455
1455
1456
1456
- `polar implode`now supports the flag `--maintain-order`
1457
1457
- `polars is-in`now supports the flag `--maintain-order`
1458
-
- `polars pivot`not supports the flag `--always-combine-names`
1458
+
- `polars pivot`now supports the flag `--always-combine-names`
1459
1459
- `polars replace`requires a `--default <value>` parameter when used with `--strict` and `--return-dtype` if the dtype has changed from the original dtype
1460
1460
1461
1461
### New experimental globbing engine <JumpToc/> <PrBy :pr="18109" user="fdncred" />
1462
1462
1463
1463
<ExperimentalOption option="dc-glob" />
1464
1464
1465
1465
This release introduces a new experimental feature named `dc-glob` (named for Devyn Cairn's glob).
1466
-
Currently nushell has two separate globbing engines with varying features and platform support.
1466
+
Currently, Nushell has two separate globbing engines with varying features and platform support.
1467
1467
1468
-
This engine is intended to replace the existing globbing engines, and standardize on something that works well on all platforms.
1468
+
This engine is intended to replace the existing globbing engines and standardize on something that works well on all platforms.
1469
1469
In addition, this globbing engine seems to perform faster than the existing engines.
1470
1470
1471
1471
### Additional changes <JumpToc/>
1472
1472
1473
-
- "Command not found"error messages will now suggest full command from a category if you type just its ending, for example `sqrt` will suggest `math sqrt`. ([#18498](https://github.com/nushell/nushell/pull/18498))
1473
+
- "Command not found"error messages will now suggest the full command from a category if you type just its ending; for example, `sqrt` will suggest `math sqrt`. ([#18498](https://github.com/nushell/nushell/pull/18498))
1474
1474
- Fixed `plugin list --help` to show the correct output type and example for the `commands` column, which contains each plugin command's name and description. ([#18357](https://github.com/nushell/nushell/pull/18357))
1475
-
- Added some `@attr`s to the toolkit.nu commands so that they show up in category, search-terms, and examples. I also homogenized help casing and punctuation. ([#18350](https://github.com/nushell/nushell/pull/18350))
1475
+
- Added some `@attr`s to the `toolkit.nu` commands so that they show up in category, searchterms, and examples. I also homogenized help casing and punctuation. ([#18350](https://github.com/nushell/nushell/pull/18350))
1476
1476
- Added support for feature gating LSP functionality, specifically enable it via `--features lsp`. ([#18148](https://github.com/nushell/nushell/pull/18148))
1477
1477
- `http post`/`put`/`patch`/`delete` now respects `--content-type` for JSON-variant MIME types like `application/json-patch+json`. ([#18496](https://github.com/nushell/nushell/pull/18496))
1478
1478
@@ -1495,7 +1495,7 @@ Update the `idx` fff-search dependency and fix bugs.
1495
1495
- changed output to nushell values for commands that return tables
1496
1496
- updated some help strings to be more helpful
1497
1497
1498
-
Files are ignored during indexing due to the use of the `ignore` crate. These are the rules for ignore https://docs.rs/ignore/latest/ignore/struct.WalkBuilder.html#ignore-rules. There's no way to override this in the current version.
1498
+
Files are ignored during indexing due to the use of the `ignore` crate. These are the rules for ignore <https://docs.rs/ignore/latest/ignore/struct.WalkBuilder.html#ignore-rules>. There's no way to override this in the current version.
1499
1499
1500
1500
### Subcommand completions are now wrapped in quotes for `which` <JumpToc/> <PrBy :pr="18295" user="Mrfiregem" />
1501
1501
@@ -1535,7 +1535,7 @@ Tab completions for `which` and `attr complete`/`@complete` commands will now pr
This fixes a bug where update with a nested column path and closure (for example `rss_item.pubDate`) could evaluate the closure against a projected list and write the same result back to every row.
1538
+
This fixes a bug where `update` with a nested column path and closure (for example `rss_item.pubDate`) could evaluate the closure against a projected list and write the same result back to every row.
@@ -1729,7 +1729,7 @@ Now Nushell reports clear messages such as "negative index is not supported in c
1729
1729
1730
1730
#### `oneof<..., table>`
1731
1731
1732
-
In some specific cases the parser could reject values provided to `oneof` typed parameters, such as rejecting table literal syntax for `oneof<.., table>`:
1732
+
In some specific cases, the parser could reject values provided to `oneof` typed parameters, such as rejecting table literal syntax for `oneof<.., table>`:
@@ -1848,7 +1848,7 @@ Float ranges without an explicit step now use more natural fractional steps, so
1848
1848
1849
1849
### Fixed stor open return type <JumpToc/> <PrBy :pr="18355" user="Bahex" />
1850
1850
1851
-
`stor open` returns the custom value `SQLiteDatabase`, yet it's signature had `sqlite-in-memory` as the return type. This causes problems with the `enforce-runtime-annotations` experimental option:
1851
+
`stor open` returns the custom value `SQLiteDatabase`, yet its signature had `sqlite-in-memory` as the return type. This causes problems with the `enforce-runtime-annotations` experimental option:
Ctrl+C is more responsive in `from json`, `from kdl`, and `from xml` now respond promptly to Ctrl+C when parsing large files. Pressing Ctrl+C during parsing will interrupt the command and return to the prompt. It will also produce better parse-error messages and should now show a focused snippet of the source around the error location instead of dumping the entire file content.
1953
+
Ctrl+C is more responsive in `from json`, `from kdl`, and `from xml`. They now respond promptly to Ctrl+C when parsing large files. Pressing Ctrl+C during parsing will interrupt the command and return to the prompt. It will also produce better parse-error messages and should now show a focused snippet of the source around the error location instead of dumping the entire file content.
0 commit comments