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/2025-10-14-nushell_v0_108_0.md
+49-48Lines changed: 49 additions & 48 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,12 +46,12 @@ As part of this release, we also publish a set of optional [plugins](https://www
46
46
47
47
## Breaking changes
48
48
49
-
### Pass optional and casing to follow path methods for `CustomValue`
49
+
### Pass optional and casing to follow path methods for `CustomValue` ([#16736])
50
50
Plugin authors that use `CustomValue` can now access the `optional` and `casing` fields in their `follow_path_int` and `follow_path_string` methods to add behavior for optional access or case sensitivity.
51
51
52
52
This is a breaking change for the plugin signature so it needs an update. Simply ignoring these fields may be a valid solution.
53
53
54
-
### `into value` is now `detect type`, and `into value` now converts custom values to plain values
54
+
### `into value` is now `detect type`, and `into value` now converts custom values to plain values ([#16697])
55
55
Until 0.107, `into value` tried to detect the types of table cells. It converted strings into typed values, which is where the name came from. But it didn't match the purpose of the other `into` commands.
56
56
This command is now called `detect type` but it doesn't operate on cells anymore, so you have to call `update cells {detect type}` to use that functionality again. With that we can also use that command on non-table types to try to infer the types.
57
57
The `into value` name is now used for converting custom values from plugins into native Nushell values.
@@ -68,7 +68,7 @@ CoolCustomValue[38;5;14m
68
68
string[0m
69
69
```
70
70
71
-
### Collecting a stream that contains errors now raises an error itself
71
+
### Collecting a stream that contains errors now raises an error itself ([#16738])
72
72
73
73
Previously, if an error was returned as a stream item and you collected that stream into a value, you would and up with a list that has an `error` item which you wouldn't know about until you interacted with that specific item.
74
74
@@ -177,7 +177,7 @@ Error:
177
177
╰────
178
178
```
179
179
180
-
### Changes to `EditCommand`s:
180
+
### Changes to `EditCommand`s ([#16841])
181
181
182
182
- renamed `cutinside` to `cutinsidepair`
183
183
- renamed `yankinside` to `copyinsidepair`
@@ -186,7 +186,7 @@ Error:
186
186
- added `cuttextobject`
187
187
- added `copytextobject`
188
188
189
-
### Vi Mode Text Objects
189
+
### Vi Mode Text Objects ([#16841])
190
190
191
191
Vi mode now supports inner and around (`i` and `a`) text objects for:
192
192
- word, bound to `w` (a sequence of letters, digits and underscores, separated with white space)
@@ -206,7 +206,7 @@ It simply searches for the previous and next matching characters.
206
206
207
207
### Other breaking changes
208
208
209
-
*### The LSP session is no longer marked as interactive (`$nu.is-interactive == false`) ([#16580])
209
+
* The LSP session is no longer marked as interactive (`$nu.is-interactive == false`) ([#16580])
210
210
211
211
* The Polars plugin's value types are renamed to be prefixed with `polars_` (e.g. polars_dataframe) ([#16819])
212
212
@@ -231,15 +231,15 @@ NU_EXPERIMENTAL_OPTIONS="all" nu
231
231
232
232
:::
233
233
234
-
### Promoted `reorder-cell-paths` to opt-out
234
+
### Promoted `reorder-cell-paths` to opt-out ([#16795])
235
235
236
236
In Nushell 0.106.0, [experimental options](https://www.nushell.sh/blog/2025-07-23-nushell_0_106_0.html#experimental-options-toc) were added, first of which is [`reorder-cell-paths`](https://github.com/nushell/nushell/issues/16766). With this release `reorder-cell-paths` is promoted to being opt-out, meaning that by default this experimental option is enabled now.
237
237
238
238
This option improves cell-path accesses by reordering how the cell-path should be evaluated without modifying the output in any way.
239
239
240
240
If you experience any trouble with this, you can disable it via passing `reorder-cell-paths=false` via the command-line argument or environment variable.
241
241
242
-
### Pipefail
242
+
### Pipefail ([#16449])
243
243
244
244
This release adds a new experimental option: `pipefail`.
`format bits` used to output in native endian, until Nu 0.107.0 (#16435) changed it to big endian. Now, you will be able to choose the behavior with `--endian` (use `format bits --endian native` to get the original behavior from before Nu 0.107.0).
### `for` loops no longer collect their source ([#16593])
392
392
Previously, `for` loops only worked with values (ranges, lists, etc), so using them with streaming commands would collect the whole stream before iteration could start. Now it also works with streams too!
393
393
394
394
This makes it possible to use it with slow or unbounded streams:
@@ -399,7 +399,7 @@ for event in (watch . --glob=**/*.rs) {
399
399
}
400
400
```
401
401
402
-
### Guess no more! More completions in built-in commands.
402
+
### Guess no more! More completions in built-in commands ([#16383])
403
403
404
404
Thanks to some recent improvements behind the scenes, nushell built-in commands that expect a specific set of values now suggests these values.
405
405
@@ -419,12 +419,12 @@ The following commands now have suggestions:
419
419
-`table --theme <...>`
420
420
-`split list --split <...>`
421
421
422
-
### Add `$nu.is-lsp` to help with printing in lsp mode
422
+
### Add `$nu.is-lsp` to help with printing in lsp mode ([#16635])
423
423
When nushell is launched with the `--lsp` flag, nushell will set `$nu.is-lsp` to true so that users can programmatically know when nushell is in LSP mode.
424
424
425
425
When in LSP mode, the `print` command will only print to stderr. This is done to prevent the LSP from misbehaving when it sees text that isn't JSON-RPC in stdout, which is being listened to by the LSP.
426
426
427
-
### New Configuration Option: `$env.config.table.batch_duration`
427
+
### New Configuration Option: `$env.config.table.batch_duration` ([#16629])
428
428
429
429
It is now possible to configure the batch duration for the `table` command.
@@ -519,7 +519,7 @@ Table literals can now have variables in the column names list. For example, thi
519
519
[39m╰───┴─────────┴─────────╯[0m
520
520
```
521
521
522
-
### Add %J and %Q format specifiers for compact date/time formatting
522
+
### Add %J and %Q format specifiers for compact date/time formatting ([#16588])
523
523
The `format date` and `into datetime` commands now support two new format specifiers for creating compact, sortable date and time components:
524
524
525
525
-**%J** produces compact dates in `YYYYMMDD` format (e.g., `20250918`)
@@ -537,7 +537,7 @@ Both commands use the same format specifications, ensuring consistency when pars
537
537
538
538
This addition is fully backward compatible - all existing format specifiers continue to work unchanged.
539
539
540
-
### Add configuration for columnar menu traversal direction
540
+
### Add configuration for columnar menu traversal direction ([#16724])
541
541
The feature makes it possible to choose the direction that items are placed in the columnar menu. With the default value of `"horizontal"`, items are ordered left-to-right in each row, with later items appearing in rows below earlier items.
542
542
```
543
543
1 2 3 4
@@ -575,7 +575,7 @@ $env.config.menus ++= [{
575
575
}]
576
576
```
577
577
578
-
### Nushell MCP Server
578
+
### Nushell MCP Server ([#16693], [#16758], [#16839], [#16857])
579
579
580
580
When compiled with the "mcp" feature (not a part of the default feature set), the nushell binary can be used as a local (stdio) MCP server.
581
581
@@ -586,15 +586,15 @@ nu --mcp
586
586
587
587
This will allow a local AI agent to use MCP to execute native nushell commands and external commands.
588
588
589
-
### Add `--chars` to `str length` command
589
+
### Add `--chars` to `str length` command ([#16768])
590
590
The `str length` command now has a `--chars` flag to allow you to count characters.
591
591
592
592
```nushell
593
593
> 'hällo' | str length --chars
594
594
5
595
595
```
596
596
597
-
### Simple syntax for simple completions
597
+
### Simple syntax for simple completions ([#16789])
598
598
599
599
Custom completions are powerful, able to provide dynamic completions based on what's written on the command line so far.
600
600
@@ -619,7 +619,7 @@ Completions can be provided as a list of strings inline in the command signature
619
619
```
620
620
621
621
622
-
### Streams of Streams
622
+
### Streams of Streams ([#16735])
623
623
624
624
When you run `each` over a list (or stream), it can only return a single item for each input. When we need to create multiple values from a single input, we can just return a list in the closure and run the output through `flatten`.
There is big difference between custom completions that can be specified in a command's signature, and the "global" external completer (`$env.config.completions.external.completer`).
### The `to md` command now always returns valid Markdown tables
775
+
### The `to md` command now always returns valid Markdown tables ([#16681])
776
776
Previously, a command like this:
777
777
```shell
778
778
> [['foo''bar']; ['1 | 2''a | b']] | to md
@@ -790,17 +790,17 @@ Now, such special characters are automatically escaped, ensuring the output alwa
790
790
| 1 \| 2 | a \| b |
791
791
```
792
792
793
-
### New switches are available for `to md`
793
+
### New switches are available for `to md` ([#16681])
794
794
-`--escape-md` | `-m` escape all Markdown special characters
795
795
-`--escape-html` | `-t` escape HTML special characters
796
796
-`--escape-all` | `-a` escape both HTML and Markdown
797
797
798
-
### `compact` your records
798
+
### `compact` your records ([#16810])
799
799
`compact` can now be used to remove `null` or `--empty` items from records too.
800
800
801
-
### `compact --empty` now recognizes 0 byte binary values as empty.
801
+
### `compact --empty` now recognizes 0 byte binary values as empty ([#16810])
802
802
803
-
### Arbitrary Pipeline Metadata
803
+
### Arbitrary Pipeline Metadata ([#16821])
804
804
805
805
In addition to existing metadata fields (`content_type`, `source`, `span`), it's now possible to attach arbitrary metadata fields to pipeline data using `metadata set --merge`:
806
806
@@ -810,7 +810,7 @@ In addition to existing metadata fields (`content_type`, `source`, `span`), it's
810
810
811
811
Combined with `metadata access`, this makes it possible to carry extra data with streams, without impacting the stream data itself.
812
812
813
-
### HTTP Response Metadata
813
+
### HTTP Response Metadata ([#16821])
814
814
815
815
All `http` commands now attach response data (previously only accessible with `http * --full`) as metadata to their output streams. This can be accessed under the `http_response` field within the pipeline metadata:
816
816
@@ -839,12 +839,12 @@ http get --allow-errors https://api.example.com/events.jsonl
839
839
840
840
### Breaking changes
841
841
842
-
842
+
### `collect` removes `source` metadata (TODO)
843
843
844
844
`collect` now removes `source` metadata field even when `content_type` is set.
845
845
Previously: both were preserved, now only `content_type` is preserved.
846
846
847
-
### `string`s and `glob`s can now be implicitly cast between each other
847
+
### `string`s and `glob`s can now be implicitly cast between each other ([#16079])
848
848
849
849
Previously `string` types were not able to be coerced into `glob` types (and vice versa).
850
850
They are now subtypes of each other.
@@ -878,15 +878,16 @@ aa
878
878
879
879
* New operators: `not-starts-with` and `not-ends-with`. Added for parity with other comparison operators. ([#16852])
### Add `network` feature to top-level crate ([#16686])
885
886
Nushell can now be compiled without network related commands.
886
887
887
888
If you are manually building Nushell without default features (`cargo build --no-default-features`) you will now need to pass `--features network` to get access the network commands.
888
889
889
-
### Improved error messages for binary literals
890
+
### Improved error messages for binary literals ([#16688])
890
891
Previously, a generic shell error is thrown for invalid binary strings. Now, an improve error message is thrown for invalid binary, hexadecimal, and octal strings.
@@ -957,34 +958,34 @@ Now any input to `path add` will be discarded. It's still possible to pass it wi
957
958
[a b c] | each {|p| $env.HOME | path join $p } | path add $in
958
959
```
959
960
960
-
### Aliases are now expanded before being sent to external completers
961
+
### Aliases are now expanded before being sent to external completers ([#16640])
961
962
962
963
Before this change, when an external completer was invoked for an alias, the first argument sent to the completer would be the alias itself instead of the aliased command.
963
964
964
965
For example, with an alias defined as `alias gl = git log`, typing `gl branch_name` and pressing `TAB` would send the arguments `gl`, `log`, `branch_name` to the external completer.
965
966
966
967
After this change, the alias is expanded and the arguments sent to the external completer will be `git`, `log`, `branch_name`.
967
968
968
-
### Fixed IR evaluation error caused by redirecting output of branched blocks
969
+
### Fixed IR evaluation error caused by redirecting output of branched blocks ([#16676])
969
970
970
971
The following commands will no longer raise ir-eval errors:
### Dotnu completion refactor, fixes path with space for both dotnu module path and external executable
977
+
### Dotnu completion refactor, fixes path with space for both dotnu module path and external executable ([#16715])
977
978
Module path completion for command `use`/`source` now behaviors in the same manner of basic file completion, which is less error prone when dealing with paths with spaces or other special characters.
978
979
979
980
Fixed the bug of empty result of external executable path completion at the head of a pipeline when the path prefix contains spaces.
980
981
981
-
### boolean coloring in light theme
982
+
### boolean coloring in light theme (TODO)
982
983
When using `std/config light-theme`, booleans inside structures are now colored in dark cyan instead of white, which was very hard to read in combination with a light terminal background.
983
984
984
-
### changed fallback for unknown color names
985
+
### changed fallback for unknown color names (TODO)
985
986
If some named color in `$env.config.color_config` is misspelled or otherwise unknown to nu, the corresponding element is now colored using the terminal's default (as in `ansi reset`) instead of white.
986
987
987
-
### Improve collection type inference
988
+
### Improve collection type inference ([#16530])
988
989
Fixes order-dependent table type inference bugs and introduces similar type widening for lists:
### Using `break`/`continue` outside loops raises a compile error
1004
+
### Using `break`/`continue` outside loops raises a compile error ([#16740])
1004
1005
1005
1006
Previously this error wasn't caught during compilation, and manifested as a runtime error when the execution reached the invalid `break`/`continue` call.
1006
1007
@@ -1026,11 +1027,11 @@ Error: [31m×[39m Main thread panicked.
1026
1027
[22;39m ╰────
1027
1028
```
1028
1029
1029
-
### Windows device path fixes
1030
+
### Windows device path fixes ([#16775])
1030
1031
* On Windows, UNC and device paths no longer get a trailing `\` appended when being cast to `path`
1031
1032
* On Windows, `open`, `save` and `source` now work with device paths like `\\.\NUL` or `\\.\CON`, as well as reserved device names like `NUL` and `CON`. Using full device paths is recommended.
1032
1033
1033
-
### Clean up error handlers when jumping outside of `try` blocks
1034
+
### Clean up error handlers when jumping outside of `try` blocks ([#16838])
1034
1035
1035
1036
Previously, jumping out of a `try` block (possible with `break`/`continue` commands) did not clean up the error handler properly the way exiting it normally does.
1036
1037
@@ -1070,7 +1071,7 @@ This was due to a miscompilation bug, which is now fixed.
1070
1071
1071
1072
* Fixed building `nu-command` by itself. ([#16616])
1072
1073
1073
-
*### `for` and `while` loop blocks starting with a range literal no longer causes a compiler error ([#16764])
1074
+
*`for` and `while` loop blocks starting with a range literal no longer causes a compiler error ([#16764])
1074
1075
1075
1076
* Some `attr` subcommands had incorrect output signatures, which are now fixed. ([#16774])
0 commit comments