From 2ce4ac31550e164b60918242e7be65224603503f Mon Sep 17 00:00:00 2001
From: sholderbach
Date: Tue, 29 Jul 2025 23:55:07 +0200
Subject: [PATCH 01/24] Release notes for `0.107.0`
Please add your new features and breaking changes to the release notes
by opening PRs against the `release-notes-0.107.0` branch.
## TODO
- [ ] PRs that need to land before the release, e.g. [deprecations](https://github.com/nushell/nushell/labels/deprecation) or [removals](https://github.com/nushell/nushell/pulls?q=is%3Apr+is%3Aopen+label%3Aremoval-after-deprecation)
- [ ] add the full changelog
- [ ] categorize each PR
- [ ] write all the sections and complete all the `TODO`s
---
blog/2025-09-02-nushell_0_107_0.md | 79 ++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
create mode 100644 blog/2025-09-02-nushell_0_107_0.md
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
new file mode 100644
index 00000000000..05348e6c1fb
--- /dev/null
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -0,0 +1,79 @@
+---
+title: Nushell 0.107.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.107.0 of Nu. This release adds...
+---
+
+
+
+
+
+# Nushell 0.107.0
+
+
+
+Today, we're releasing version 0.107.0 of Nu. This release adds...
+
+# Where to get it
+
+Nu 0.107.0 is available as [pre-built binaries](https://github.com/nushell/nushell/releases/tag/0.107.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
+
+
+
+
+# Changes
+
+## Additions
+
+## Breaking changes
+
+## Deprecations
+
+## Removals
+
+## Bug fixes and other changes
+
+# 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 | title | link |
+| ------------------------------------ | ----- | ------------------------------------------------------- |
+| [@author](https://github.com/author) | ... | [#12345](https://github.com/nushell/nushell/pull/12345) |
+
+# Full changelog
+
+
From fbb443d20eb256b14198db078c83addb31f4594f Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Sun, 31 Aug 2025 22:58:33 +0200
Subject: [PATCH 02/24] initial notes from generation script
---
blog/2025-09-02-nushell_0_107_0.md | 811 ++++++++++++++++++++++++++++-
1 file changed, 793 insertions(+), 18 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 05348e6c1fb..a1c3e4740cf 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -44,15 +44,640 @@ As part of this release, we also publish a set of optional [plugins](https://www
# Changes
+## Breaking changes
+
+### `find` is now case-sensitive by default
+
+The `find` command is now case-sensitive by default in all modes. Previously, you could use the `--ignore-case` flag to make `find` case-insensitive in the `--regex` mode, but the default "search term mode" would always be case-insensitive. Now, both modes are case-sensitive by default, and you can use the `--ignore-case` flag to make them case-insensitive.
+
+This change makes the different modes of `find` more consistent. It also makes `find` more consistent with other parts of Nushell, such as `where`'s `=~` operator and the recent [case-sensitive cell-paths change](https://www.nushell.sh/blog/2025-06-10-nushell_0_105_0.html#case-sensitive-cell-paths-or-not-toc).
+
+> TODO(release-notes): make sure this callout renders correctly on the blog
+
+> [!TIP]
+> If you want `find` to still be case-insensitive after this release, which might be desirable for interactive usage, you can add an alias to your config:
+>
+> ```nu
+> alias find = find -i
+> ```
+
+### New behavior for `find --multiline`
+
+Previously, `find` would always split multi-line input strings, making it impossible to perform proper multi-line regex matches unless a string was within list, table, or record. Now, the `--multiline` flag can be used to prevent this splitting, replacing its previous behavior of prepending `(?m)` to the regex.
+
+Before:
+
+```nu
+"hello\nworld" | find -mr 'lo\swo'
+# => no output
+```
+
+After:
+
+```nu
+"hello\nworld" | find -mr 'lo\swo'
+# => hello
+# => world
+```
+
+### `random dice` moved to `std`
+
+The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
+
+```nushell
+use std/random
+
+random dice
+```
+
+It's behavior, parameters, and defaults are the same.
+
+### `each` now passes through `null` input
+
+When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
+For example, before this change:
+
+```nu
+→ null | each { "something" }
+something
+```
+
+But after this change:
+
+```nu
+→ null | each { "something" }
+null
+```
+
+### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt`
+
+Before this release `env_change` hooks would execute _after_ `pre_prompt` hooks, and the prompt would be rendered after `env_change` hooks.
+
+This meant `env_change` hooks got _in between_ `pre_prompt` hooks and `PROMPT_COMMAND`.
+
+Now, order of execution is as follows:
+
+- `env_change` hooks
+- `pre_prompt` hooks
+- Rendering the prompt with `PROMPT_COMMAND`
+
+### `query xml` returns scalar results when possible
+
+Previously, `query xml` always returned a table, even for scalar results. Now scalar results will be returned as scalars.
+
+Here's an example of where this would apply:
+
+```nushell
+open -r tests/fixtures/formats/jt.xml
+| query xml 'false()'
+```
+
+Before this change, this would return:
+
+```
+╭───┬─────────╮
+│ # │ false() │
+├───┼─────────┤
+│ 0 │ false │
+╰───┴─────────╯
+```
+
+Now, this will just return `false`.
+
+### Use fixed column name for `query xml` output
+
+Previously, the `query xml` command outputs nodeset results in a table with a column name corresponding to the input expression. Now, the column name is fixed. This should make it easier to extract values from the output of `query xml`.
+
+Before:
+
+```nushell
+open -r tests/fixtures/formats/jt.xml
+| query xml '//channel/title|//item/title'
+# => ╭───┬───────────────────────────────────────────╮
+# => │ # │ //channel/title|/... │
+# => ├───┼───────────────────────────────────────────┤
+# => │ 0 │ JT │
+# => │ 1 │ Creating crossplatform Rust terminal apps │
+# => ╰───┴───────────────────────────────────────────╯
+```
+
+Now:
+
+```nushell
+open -r tests/fixtures/formats/jt.xml
+| query xml '//channel/title|//item/title'
+# => ╭───┬───────────────────────────────────────────╮
+# => │ # │ string_value │
+# => ├───┼───────────────────────────────────────────┤
+# => │ 0 │ JT │
+# => │ 1 │ Creating crossplatform Rust terminal apps │
+# => ╰───┴───────────────────────────────────────────╯
+```
+
+### Change the output of `format bits` to big endian instead of native endian
+
+While the most popular architectures use little endian, many people are used to reading binary numbers as little endian. However, until now, if you were in a little endian system, you would get:
+
+```nushell
+~> 258 | format bits
+00000010 00000001
+```
+
+If you copied and pasted that as a number, you would get a surprising result:
+
+```nushell
+~> 0b00000010_00000001
+513
+```
+
+Now, `format bits` always formats in big endian:
+
+```nushell
+~> 258 | format bits
+00000001 00000010
+```
+
+### Add active column to `overlay list`
+
+`overlay list` now returns table instead of list of overlays. Before, only active overlays were included in `overlay list`. Now, hidden overlays will be included as well, and there is a column indicating whether a given overlay is hidden or not.
+
+> TODO(release-notes): make sure this call out is formatted correctly for the blog
+
+> [!TIP]
+> The ordering of `overlay list` is still preserved. If you run `overlay list | last`, you will still get the most recently activated overlay.
+>
+> For migrating to the new behavior, you can update any usages of `overlay list | last` to `overlay list | last | get name`.
+
## Additions
-## Breaking changes
+### New `watch --debounce` option
+
+The `watch` command now has `--debounce` flag, which takes a duration value. This will replace the `--debounce-ms` flag which takes an int rather than a duration, and will eventually take over its `-d` short flag.
+
+### Deprecate `watch --debounce-ms`
+
+> TODO(release-notes): Move this to Deprecations section
+> TODO(release-notes): verify link works after generating ToC
+
+With the new [watch --debounce option](#new-watch-duration-option-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
+
+### Add `-h/--help` flag to testbin
+
+`nu --testbin` has a new flag `-h` to show available \
+
+```
+> nu --testbin -h
+Usage: nu --testbin
+:
+chop -> With no parameters, will chop a character off the end of each line
+cococo -> Cross platform echo using println!()(e.g: nu --testbin cococo a b c)
+echo_env -> Echo's value of env keys from args(e.g: nu --testbin echo_env FOO BAR)
+echo_env_mixed -> Mix echo of env keys from input(e.g: nu --testbin echo_env_mixed out-err FOO BAR; nu --testbin echo_env_mixed err-out FOO BAR)
+echo_env_stderr -> Echo's value of env keys from args to stderr(e.g: nu --testbin echo_env_stderr FOO BAR)
+echo_env_stderr_fail -> Echo's value of env keys from args to stderr, and exit with failure(e.g: nu --testbin echo_env_stderr_fail FOO BAR)
+fail -> Exits with failure code 1(e.g: nu --testbin fail)
+iecho -> Another type of echo that outputs a parameter per line, looping infinitely(e.g: nu --testbin iecho 3)
+input_bytes_length -> Prints the number of bytes received on stdin(e.g: 0x[deadbeef] | nu --testbin input_bytes_length)
+meow -> Cross platform cat (open a file, print the contents) using read_to_string and println!()(e.g: nu --testbin meow file.txt)
+meowb -> Cross platform cat (open a file, print the contents) using read() and write_all() / binary(e.g: nu --testbin meowb sample.db)
+nonu -> Cross platform echo but concats arguments without space and NO newline(e.g: nu --testbin nonu a b c)
+nu_repl -> Run a REPL with the given source lines
+relay -> Relays anything received on stdin to stdout(e.g: 0x[beef] | nu --testbin relay)
+repeat_bytes -> A version of repeater that can output binary data, even null bytes(e.g: nu --testbin repeat_bytes 003d9fbf 10)
+repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)
+```
+
+### New keybinding: `vichangemode`
+
+You can now set bindings which change the Vi mode.
+To do so send a `vichangemode` event with the `mode` field to set `normal`, `insert`, or `visual`
+
+```nushell
+$env.config.keybindings ++=
+ [{
+ name: modechangetest
+ modifier: control
+ keycode: "char_["
+ mode: [vi_normal, vi_insert]
+ event: {send: vichangemode, mode: normal}
+ }]
+```
+
+The available modifiers and keycodes, remain limited to single character bindings with modifiers. We don't yet provide access to the key-chord parsing of the vi mode.
+
+### JSON column support for `stor` and `query db`
+
+The 'stor create/insert/open' and 'query db' commands now support JSON and JSONB columns. This lets you store more kinds of structured data directly inside of an SQLite database without an explicit `to`/`from` step.
+
+Here's an example of storing a simple table inside a `stor` database, and retrieving it as structured data with `query db`:
+
+```nushell
+# create a table named my_table with a JSON column named data
+stor create -t my_table -c {data: json}
+
+# inset a row into the data column containing a table
+{data: [1 2 3]} | stor insert -t my_table
+
+# retrieve the data column from the table as structured data
+stor open | query db "select data from my_table"
+# => ╭───┬───────────╮
+# => │ # │ data │
+# => ├───┼───────────┤
+# => │ 0 │ ╭───┬───╮ │
+# => │ │ │ 0 │ 1 │ │
+# => │ │ │ 1 │ 2 │ │
+# => │ │ │ 2 │ 3 │ │
+# => │ │ ╰───┴───╯ │
+# => ╰───┴───────────╯
+```
+
+### New `random choice` command in `std-rfc`
+
+The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
+
+```nushell
+use std-rfc/random
+[1 2 3 4 5] | random choice 2
+# => ╭───┬───╮
+# => │ 0 │ 3 │
+# => │ 1 │ 2 │
+# => ╰───┴───╯
+```
+
+### Add `str align` to `std-rfc/str`
+
+The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
+
+```nushell
+[ "one = 1", "two = 2", "three = 3", "four = 4", "five = 5" ] | str align '='
+# => one = 1
+# => two = 2
+# => three = 3
+# => four = 4
+# => five = 5
+```
+
+### Spread `null` into collections or arguments
+
+`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
+
+```nushell
+[ 1 2 ...(null) ] == [ 1 2 ]
+
+{ a:1 b:2 ...(null) } == { a:1 b:2 }
+```
+
+### `get`, `select`, `reject` can `--ignore-case` of cell-path
+
+`get`, `select`, `reject` commands now have a `--ignore-case` flag, which makes the commands interpret all cell-path arguments as completely case insensitive.
+
+### `watch` streams events
+
+`watch` command can now be used to _return a stream_ of detected events instead of calling a closure with it's information, though using a closure is still possible and existing uses won't break.
+
+In addition to this:
+
+```nushell
+watch . {|operation, path, new_path|
+ if $operation == "Write" and $path like "*.md" {
+ md-lint $path
+ }
+}
+```
+
+Now this is also possible:
+
+```nushell
+watch .
+| where operation == Write and path like "*.md"
+| each { md-lint $in.path }
+```
+
+### Extend nodeset output formats for `query xml`
+
+`query xml` now can output additional information when it returns Nodesets:
+
+- `--output-type` enables `type` column. It includes the node type found, e.g. `element` or `comment`
+- `--output-names` adds `local_name`, `prefixed_name` and `namespace` columns
+- `--output-string-value` (re)adds `string_value` column
+
+If you're using any of the `--output-*` switches, and want `string_value` column to show up, pass `--output-string-value` explicitly. In the absence of any `--output-*` attributes, `--output-string-value` is assumed to be on.
+
+### `--endian` flag for `into binary`
+
+Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
+
+```nushell
+258 | into binary --endian little
+# => Length: 8 (0x8) bytes | printable whitespace ascii_other non_ascii
+# => 00000000: 02 01 00 00 00 00 00 00
+258 | into binary --endian big
+# => Length: 8 (0x8) bytes | printable whitespace ascii_other non_ascii
+# => 00000000: 00 00 00 00 00 00 01 02
+```
-## Deprecations
+Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
-## Removals
+### Other additions
-## Bug fixes and other changes
+- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373](https://github.com/nushell/nushell/pull/16373))
+
+- The `bench` command in the standard library now shows a progress bar (or spinner) on terminals which support `osc 9;4`. ([#16245](https://github.com/nushell/nushell/pull/16245))
+
+- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193](https://github.com/nushell/nushell/pull/16193))
+
+- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450](https://github.com/nushell/nushell/pull/16450))
+
+- Added information to the `run-external` and `help` descriptions that indicates these commands or any with the same names are automatically used for running externals and the `--help` flags respectively. ([#16493](https://github.com/nushell/nushell/pull/16493))
+
+## Other changes
+
+### `http` subcommands now keep track of redirects
+
+> TODO(release-notes): Move this subheading to Additions
+
+The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
+
+```nushell
+http get --full http://nushell.sh | get urls
+# => ╭───┬────────────────────────╮
+# => │ 0 │ http://nushell.sh/ │
+# => │ 1 │ http://www.nushell.sh/ │
+# => ╰───┴────────────────────────╯
+```
+
+> TODO(release-notes): make sure the callout below is in the correct format for the blog
+
+> [!NOTE]
+> This may break edge cases which relied on a lack of a `urls` column, for example:
+>
+> ```nushell
+> {urls: important} | merge (http get --full <...>)
+> ```
+
+### `http post` now sends body serialized as pretty json
+
+Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
+
+Before:
+
+```http
+POST / HTTP/1.1
+Host: localhost:1234
+User-Agent: nushell
+Accept: */*
+Content-Type: application/json
+accept-encoding: gzip
+Content-Length: 13
+
+{"foo":"bar"}
+```
+
+After:
+
+```http
+POST / HTTP/1.1
+accept-encoding: gzip
+content-length: 18
+user-agent: nushell
+accept: */*
+host: localhost:1234
+content-type: application/json; charset=utf-8
+
+{
+ "foo": "bar"
+}
+```
+
+### `http` commands will now fail on invalid headers
+
+Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
+
+In one Nushell instance, we create something resembling an HTTP server on port 1234:
+
+```nu
+[("HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: "| into binary) 0x[1F FF AA AA] ("\r\n\r\n" | into binary)] | bytes collect |
+```
+
+In another instance, we connect to port 1234. The `x-header` is not valid UTF-8, which now produces an error:
+
+```nushell
+http get --full --allow-errors http://localhost:1234
+# => Error: nu::shell::network_failure
+# =>
+# => × Network failure
+# => ╭─[entry #5:1:32]
+# => 1 │ http get --full --allow-errors http://localhost:1234
+# => · ──────────┬──────────
+# => · ╰── protocol: http parse fail: invalid header value
+# => ╰────
+```
+
+### Improved error messages for misspelled flags
+
+Previously, the help text for a missing flag would list all of them, which could get verbose on a single line:
+
+```nushell
+~> ls --full-path
+Error: nu::parser::unknown_flag
+
+ × The `ls` command doesn't have flag `full-path`.
+ ╭─[entry #8:1:4]
+ 1 │ ls --full-path
+ · ─────┬─────
+ · ╰── unknown flag
+ ╰────
+ help: Available flags: --help(-h), --all(-a), --long(-l), --short-names(-s), --full-paths(-f), --du(-d), --directory(-D), --mime-type(-m), --threads(-t). Use
+ `--help` for more information.
+```
+
+The new error message only suggests the closest flag:
+
+```nushell
+> ls --full-path
+Error: nu::parser::unknown_flag
+
+ × The `ls` command doesn't have flag `full-path`.
+ ╭─[entry #23:1:4]
+ 1 │ ls --full-path
+ · ─────┬─────
+ · ╰── unknown flag
+ ╰────
+ help: Did you mean: `--full-paths`?
+```
+
+### Improved default color theme
+
+We changed the default theme to use the ANSI default color (`39m`) instead of white (`37m`).
+This finally makes the default theme usable in the context of light terminal color settings. On dark terminal palettes this change should have no impact.
+
+
+
+### Reset content type for commands returning partial input
+
+The following commands no longer preserve `content_type` element of the input metadata:
+
+- `bytes at` - bytes 3..5 of an `image/png` stream are not valid `image/png` stream themselves
+- `bytes remove` - when you remove some bytes, the content type likely becomes invalid
+- `first` - first 5 bytes of an `image/png` stream are not valid `image/png` stream themselves
+- `skip` - bytes after 5th of an `image/png` stream are not valid `image/png` stream
+- `take` - see `first`
+- `str substring` - a random string slice of `application/json` isn't likely to be a valid `application/json` value
+
+### Additional changes
+
+- `format date` will respect `$env.LANG` and override it with `$env.LC_ALL`. ([#16369](https://github.com/nushell/nushell/pull/16369))
+
+- `query xml` now has `xml:` namespace prefix available by default, without the need to specify it via `--namespaces`. ([#16472](https://github.com/nushell/nushell/pull/16472))
+
+- Required named parameters will now always appear before regular named parameters/flags in the `help` output. ([#16476](https://github.com/nushell/nushell/pull/16476))
+
+- Trying to execute a non-existent script file used to return a confusing error pointing to an internal source code path. That error now points to the script file argument in the commandline. ([#16273](https://github.com/nushell/nushell/pull/16273))
+
+## Bug fixes
+
+### `input list` Plays Nicely With Styled Input
+
+`input list` had some trouble dealing with ANSI styled inputs, such as:
+
+- not resetting terminal styles after each item, leading to items' styles leaking and affecting how the following items are rendered
+- in fuzzy mode, resetting the styles _a little too much_ after emphasizing matching sections
+
+Here's a before/after comparison:
+
+| | Select | Fuzzy |
+| --- | ---------------- | --------------- |
+| ❌ | ![select-before] | ![fuzzy-before] |
+| ✅ | ![select-fixed] | ![fuzzy-fixed] |
+
+[select-before]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/select-before.svg
+[select-fixed]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/select-after.svg
+[fuzzy-before]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-before.svg
+[fuzzy-fixed]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-after.svg
+
+### Fixed spacing of `help` examples
+
+`help` command used to trim the outputs of examples, which could result in inconsistent white space:
+
+> Following snippets are generated with this config `$env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false}`
+
+Before:
+
+```
+ Find and replace all occurrences of found string in record using regular expression
+ > { KeyA: abc, KeyB: abc, KeyC: ads } | str replace --all --regex 'b' 'z' KeyA KeyC
+ KeyA azc
+ KeyB abc
+ KeyC ads
+```
+
+After:
+
+```
+ Find and replace all occurrences of found string in record using regular expression
+ > { KeyA: abc, KeyB: abc, KeyC: ads } | str replace --all --regex 'b' 'z' KeyA KeyC
+ KeyA azc
+ KeyB abc
+ KeyC ads
+```
+
+### Fix highlighting of aliases to external commands
+
+Aliases to external commands will now be properly highlighted as external commands.
+
+> TODO(release-notes): ensure these pictures render correctly on the blog
+
+Behavior _before_ this PR:
+
+
+Behavior _after_ this PR:
+
+
+### Prevent `detect columns` from creating invalid records with duplicate keys
+
+Previously `detect columns` created records (rows) with duplicate key names under some circumstances. The resulting table behaved inconsistently with different commands:
+
+```nushell
+let data = "meooooow cat\nkitty kitty woof"
+$data | detect columns
+# => ╭───┬──────────┬───────╮
+# => │ # │ meooooow │ cat │
+# => ├───┼──────────┼───────┤
+# => │ 0 │ kitty │ kitty │
+# => ╰───┴──────────┴───────╯
+
+$data | detect columns | get 0.cat
+# => woof
+```
+
+Now, this will result in an error suggesting using `detect columns --guess` or `parse`:
+
+```nushell
+let data = "meooooow cat\nkitty kitty woof"
+$data | detect columns
+# => Error: nu::shell::failed_to_detect_columns
+# =>
+# => × Failed to detect columns
+# => ╭─[entry #2:3:1]
+# => 2 │
+# => 3 │ $data | detect columns
+# => · ──┬── ───────┬──────
+# => · │ ╰── tried to detect columns here
+# => · ╰── value coming from here
+# => ╰────
+```
+
+### Improve errors for subcommands without a corresponding parent command
+
+Added missing parent ('namespace') commands to improve error reporting:
+
+- `attr`
+- `detect`
+- `error`
+- `query`
+- `registry`
+
+### Other fixes
+
+- `where` should now error on row condition expressions which are not booleans ([#16175](https://github.com/nushell/nushell/pull/16175))
+
+- Stepped range literals where `..=` precedes the second value no longer cause a parser panic. e.g: `random int 1..=3..5` ([#16231](https://github.com/nushell/nushell/pull/16231))
+
+- The gstat plugin will show correct branch in detached HEAD if commit hash starts with 0 ([#16309](https://github.com/nushell/nushell/pull/16309))
+
+- Parse-time pipeline type checking now properly supports commands with multiple pipeline output types for the same pipeline input type. ([#16111](https://github.com/nushell/nushell/pull/16111))
+
+- In `explore`, cursor position and search highlighting works better on non-ASCII characters. ([#16325](https://github.com/nushell/nushell/pull/16325))
+
+- `path relative-to` works better for case-insentitive filesystems, this works on `Windowes` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
+
+- `std help` displays better on binary exmaples. ([#16354](https://github.com/nushell/nushell/pull/16354))
+
+- `into sqlite` will respect `$env.PWD` rather than current working directory. ([#16349](https://github.com/nushell/nushell/pull/16349))
+
+- Arguments to external commands with subexpressions like `^/bin/echo ProxyCommand=($'hello')` are now parsed correctly ([#16346](https://github.com/nushell/nushell/pull/16346))
+
+- The index column in a table will get a highlight color if `$env.config.table.header_on_separator = true` ([#16377](https://github.com/nushell/nushell/pull/16377))
+
+- Errors which reference values originating from command examples in the output of `scope commands` should now be less confusing. ([#16395](https://github.com/nushell/nushell/pull/16395))
+
+- Short flags which require a value should now properly be tracked by the parser. Previously, something like the `-a` in `table -a` wouldn't be properly highlighted if no value for `-a` was provided. This also means that the `ast` command will now properly account for these flags. ([#16376](https://github.com/nushell/nushell/pull/16376))
+
+- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410](https://github.com/nushell/nushell/pull/16410))
+
+- Type errors involving boolean literals are now more precise. ([#16408](https://github.com/nushell/nushell/pull/16408))
+
+- Interrupting a script with `ctrl-c` now properly kills background jobs on exit. ([#16285](https://github.com/nushell/nushell/pull/16285))
+
+- Previously, a record key `=` would not be quoted in `to nuon`, producing invalid nuon output. It wasn't quoted in other string values either, but it didn't cause problems there. Now any string containing `=` gets quoted. ([#16440](https://github.com/nushell/nushell/pull/16440))
+
+- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393](https://github.com/nushell/nushell/pull/16393))
+
+- Argument variables for custom commands no longer leak outside of their scope. ([#16262](https://github.com/nushell/nushell/pull/16262))
+
+- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444](https://github.com/nushell/nushell/pull/16444))
+
+- Using `polars open --type tsv` will now correctly use tabs as the delimiter. ([#16524](https://github.com/nushell/nushell/pull/16524))
# Notes for plugin developers
@@ -60,20 +685,170 @@ As part of this release, we also publish a set of optional [plugins](https://www
Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! :pray:
-| author | title | link |
-| ------------------------------------ | ----- | ------------------------------------------------------- |
-| [@author](https://github.com/author) | ... | [#12345](https://github.com/nushell/nushell/pull/12345) |
+| author | change | link |
+| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
+| [@blindFS](https://github.com/blindFS) | Refactor(completion, parser): move custom_completion info from Expression to Signature | [#15613](https://github.com/nushell/nushell/pull/15613) |
+| [@ysthakur](https://github.com/ysthakur) | Revert "refactor(completion, parser): move custom_completion info from Expression to Signature" | [#16250](https://github.com/nushell/nushell/pull/16250) |
+| [@ysthakur](https://github.com/ysthakur) | Reapply "refactor(completion, parser): move custom_completion info from Expression to Signature" (#16250) | [#16259](https://github.com/nushell/nushell/pull/16259) |
+| [@sholderbach](https://github.com/sholderbach) | Bump version to 0.106.2 | [#16295](https://github.com/nushell/nushell/pull/16295) |
+| [@sholderbach](https://github.com/sholderbach) | Manual GH workflow for `cargo hack` before release | [#16304](https://github.com/nushell/nushell/pull/16304) |
+| [@sholderbach](https://github.com/sholderbach) | Fixup pre-release checkup workflow | [#16305](https://github.com/nushell/nushell/pull/16305) |
+| [@WindSoilder](https://github.com/WindSoilder) | Introduce 2 associated functions to `PipelineData` | [#16233](https://github.com/nushell/nushell/pull/16233) |
+| [@ItsHarper](https://github.com/ItsHarper) | `input` command has 1 more example on `--reedline` flag. | [#16329](https://github.com/nushell/nushell/pull/16329) |
+| [@sholderbach](https://github.com/sholderbach) | Forgo full build in the `cargo hack` wf | [#16328](https://github.com/nushell/nushell/pull/16328) |
+| [@Direwolfesp](https://github.com/Direwolfesp) | Fix typo: `help format filesize` has a wrong example | [#16336](https://github.com/nushell/nushell/pull/16336) |
+| [@sholderbach](https://github.com/sholderbach) | Fix panic in unit parsing with non-UTF8 code | [#16355](https://github.com/nushell/nushell/pull/16355) |
+| [@Tyarel8](https://github.com/Tyarel8) | Fix (std/help): fix bug and use `is-not-empty` | [#16394](https://github.com/nushell/nushell/pull/16394) |
+| [@ItsHarper](https://github.com/ItsHarper) | Clarify that `input`'s history feature uses reedline | [#16334](https://github.com/nushell/nushell/pull/16334) |
+| [@ItsHarper](https://github.com/ItsHarper) | Add examples for sending and receiving data across jobs | [#16372](https://github.com/nushell/nushell/pull/16372) |
+| [@Bahex](https://github.com/Bahex) | Impl<B> for (From/Into)Value for Cow<'\_, B> where B::Owned: (From/Into)Value | [#16380](https://github.com/nushell/nushell/pull/16380) |
+| [@Bahex](https://github.com/Bahex) | Implement `FromValue` for `std::time::Duration` and refactor relevant commands to utilize that | [#16414](https://github.com/nushell/nushell/pull/16414) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | Document undocumented `Signature` methods | [#16417](https://github.com/nushell/nushell/pull/16417) |
+| [@weirdan](https://github.com/weirdan) | std/random dice ensure `sides` and `dice` are positive | [#16430](https://github.com/nushell/nushell/pull/16430) |
+| [@132ikl](https://github.com/132ikl) | Rework PR template | [#16412](https://github.com/nushell/nushell/pull/16412) |
+| [@fdncred](https://github.com/fdncred) | Users can use rust version 1.87.0 to compile nushell now | [#16437](https://github.com/nushell/nushell/pull/16437) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Add well-optimized string types | [#16446](https://github.com/nushell/nushell/pull/16446) |
+| [@WindSoilder](https://github.com/WindSoilder) | Fix uninlined_format_args clippy warnings | [#16452](https://github.com/nushell/nushell/pull/16452) |
+| [@132ikl](https://github.com/132ikl) | Add "Motivation and technical details | [#16458](https://github.com/nushell/nushell/pull/16458) |
+| [@132ikl](https://github.com/132ikl) | Redirect "Questions" issue option to Discussions | [#16443](https://github.com/nushell/nushell/pull/16443) |
+| [@132ikl](https://github.com/132ikl) | Tweak PR template | [#16460](https://github.com/nushell/nushell/pull/16460) |
+| [@Jan9103](https://github.com/Jan9103) | Hover on external 0x08 handling | [#16316](https://github.com/nushell/nushell/pull/16316) |
+| [@sholderbach](https://github.com/sholderbach) | Use direct `Value.as_str()` in string commands | [#16468](https://github.com/nushell/nushell/pull/16468) |
+| [@hustcer](https://github.com/hustcer) | Fix loongarch64 builds for rust 1.87.0 | [#16455](https://github.com/nushell/nushell/pull/16455) |
+| [@sholderbach](https://github.com/sholderbach) | Update PLATFORM_SUPPORT to mention loongarch limitations | [#16470](https://github.com/nushell/nushell/pull/16470) |
+| [@sholderbach](https://github.com/sholderbach) | Clippy and dead code elimination pass | [#16469](https://github.com/nushell/nushell/pull/16469) |
+| [@132ikl](https://github.com/132ikl) | Mitigate `watch -d` breaking change | [#16473](https://github.com/nushell/nushell/pull/16473) |
+| [@132ikl](https://github.com/132ikl) | Add assertion that DeprecationEntry flag do not have dashes | [#16475](https://github.com/nushell/nushell/pull/16475) |
+| [@132ikl](https://github.com/132ikl) | Make `Span` mandatory for some fields in `ShellError` | [#16471](https://github.com/nushell/nushell/pull/16471) |
+| [@blindFS](https://github.com/blindFS) | Env shorthand false positive | [#16337](https://github.com/nushell/nushell/pull/16337) |
+| [@sholderbach](https://github.com/sholderbach) | Add a benchmark `use`ing the whole `std` | [#16485](https://github.com/nushell/nushell/pull/16485) |
+| [@fdncred](https://github.com/fdncred) | Update reedline dep to latest commit | [#16487](https://github.com/nushell/nushell/pull/16487) |
+| [@Bahex](https://github.com/Bahex) | Move `SplitRead` and `MultiLife` into `nu-utils` | [#16482](https://github.com/nushell/nushell/pull/16482) |
+| [@sholderbach](https://github.com/sholderbach) | Update benchmarking README | [#16486](https://github.com/nushell/nushell/pull/16486) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix `native-tls` feature | [#16518](https://github.com/nushell/nushell/pull/16518) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix some broken doc links | [#16519](https://github.com/nushell/nushell/pull/16519) |
+| [@Bahex](https://github.com/Bahex) | Refactor `Record` api. Reduce code duplication and make future refactors easier. | [#16490](https://github.com/nushell/nushell/pull/16490) |
+| [@sholderbach](https://github.com/sholderbach) | Add "did my homework" checkboxes to issue template | [#16520](https://github.com/nushell/nushell/pull/16520) |
+| [@fdncred](https://github.com/fdncred) | Pin polars dependency planus to version 1.1.1 | [#16538](https://github.com/nushell/nushell/pull/16538) |
+| [@sholderbach](https://github.com/sholderbach) | Fix issue form syntax | [#16541](https://github.com/nushell/nushell/pull/16541) |
+| [@ItsHarper](https://github.com/ItsHarper) | Fixes incorrect documentation of the default behavior of the `bits rol`, `bits ror`, `bits shl`, and `bits shr` commands when the `--number-bytes` flag is not provided | [#16542](https://github.com/nushell/nushell/pull/16542) |
# Full changelog
-
+| author | title | link |
+| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
+| [@132ikl](https://github.com/132ikl) | Fix parse-time pipeline type checking to support multiple output types for same input type | [#16111](https://github.com/nushell/nushell/pull/16111) |
+| [@132ikl](https://github.com/132ikl) | Check type of row conditions at parse-time | [#16175](https://github.com/nushell/nushell/pull/16175) |
+| [@132ikl](https://github.com/132ikl) | Rework PR template | [#16412](https://github.com/nushell/nushell/pull/16412) |
+| [@132ikl](https://github.com/132ikl) | Redirect "Questions" issue option to Discussions | [#16443](https://github.com/nushell/nushell/pull/16443) |
+| [@132ikl](https://github.com/132ikl) | Add "Motivation and technical details | [#16458](https://github.com/nushell/nushell/pull/16458) |
+| [@132ikl](https://github.com/132ikl) | Tweak PR template | [#16460](https://github.com/nushell/nushell/pull/16460) |
+| [@132ikl](https://github.com/132ikl) | Make `Span` mandatory for some fields in `ShellError` | [#16471](https://github.com/nushell/nushell/pull/16471) |
+| [@132ikl](https://github.com/132ikl) | Mitigate `watch -d` breaking change | [#16473](https://github.com/nushell/nushell/pull/16473) |
+| [@132ikl](https://github.com/132ikl) | Add assertion that DeprecationEntry flag do not have dashes | [#16475](https://github.com/nushell/nushell/pull/16475) |
+| [@Bahex](https://github.com/Bahex) | script file not found error should point to commandline, not rust code | [#16273](https://github.com/nushell/nushell/pull/16273) |
+| [@Bahex](https://github.com/Bahex) | fix(input list): don't leak ansi styling, fuzzy match indicator preserves styles | [#16276](https://github.com/nushell/nushell/pull/16276) |
+| [@Bahex](https://github.com/Bahex) | refactor: run `env_change` hooks before `pre_prompt` hooks | [#16356](https://github.com/nushell/nushell/pull/16356) |
+| [@Bahex](https://github.com/Bahex) | feat: impl<B> for (From/Into)Value for Cow<'\_, B> where B::Owned: (From/Into)Value | [#16380](https://github.com/nushell/nushell/pull/16380) |
+| [@Bahex](https://github.com/Bahex) | feat: `null` values can be spread as if they are empty lists or records. | [#16399](https://github.com/nushell/nushell/pull/16399) |
+| [@Bahex](https://github.com/Bahex) | feat(get,select,reject): add `--ignore-case` which interprets cell-paths case insensitively, analogous to `--optional` | [#16401](https://github.com/nushell/nushell/pull/16401) |
+| [@Bahex](https://github.com/Bahex) | implement `FromValue` for `std::time::Duration` and refactor relevant commands to utilize that | [#16414](https://github.com/nushell/nushell/pull/16414) |
+| [@Bahex](https://github.com/Bahex) | feat: `watch` returns a stream of events as a table when called without a closure | [#16428](https://github.com/nushell/nushell/pull/16428) |
+| [@Bahex](https://github.com/Bahex) | refactor: move `SplitRead` and `MultiLife` into `nu-utils` | [#16482](https://github.com/nushell/nushell/pull/16482) |
+| [@Bahex](https://github.com/Bahex) | Refactor `Record` api. Reduce code duplication and make future refactors easier. | [#16490](https://github.com/nushell/nushell/pull/16490) |
+| [@Direwolfesp](https://github.com/Direwolfesp) | fix typo: `help format filesize` has a wrong example | [#16336](https://github.com/nushell/nushell/pull/16336) |
+| [@Ecorous](https://github.com/Ecorous) | Add `--raw` flag to `to html` | [#16373](https://github.com/nushell/nushell/pull/16373) |
+| [@Ecorous](https://github.com/Ecorous) | Fix missing $env.PATH unhelpful error and breaking CMD builtins | [#16410](https://github.com/nushell/nushell/pull/16410) |
+| [@ItsHarper](https://github.com/ItsHarper) | Add multiline example for `input` command | [#16329](https://github.com/nushell/nushell/pull/16329) |
+| [@ItsHarper](https://github.com/ItsHarper) | Clarify that `input`'s history feature uses reedline | [#16334](https://github.com/nushell/nushell/pull/16334) |
+| [@ItsHarper](https://github.com/ItsHarper) | Add examples for receiving data from a job | [#16372](https://github.com/nushell/nushell/pull/16372) |
+| [@ItsHarper](https://github.com/ItsHarper) | Fix error message: custom commands cannot be `const` | [#16393](https://github.com/nushell/nushell/pull/16393) |
+| [@ItsHarper](https://github.com/ItsHarper) | Fix documentation of `--number-bytes` flag for several `bits` commands | [#16542](https://github.com/nushell/nushell/pull/16542) |
+| [@Jan9103](https://github.com/Jan9103) | fix(nu-lsp): hover on external 0x08 handling | [#16316](https://github.com/nushell/nushell/pull/16316) |
+| [@NotTheDr01ds](https://github.com/NotTheDr01ds) | Ability to specify a table name for kv commands | [#16450](https://github.com/nushell/nushell/pull/16450) |
+| [@Sheape](https://github.com/Sheape) | Use default color in default theme for light-theme terminals | [#16509](https://github.com/nushell/nushell/pull/16509) |
+| [@Tyarel8](https://github.com/Tyarel8) | feat(std-rfc/str): add `str align` | [#16062](https://github.com/nushell/nushell/pull/16062) |
+| [@Tyarel8](https://github.com/Tyarel8) | feat(std/bench) add `osc 9;4` progress bar | [#16245](https://github.com/nushell/nushell/pull/16245) |
+| [@Tyarel8](https://github.com/Tyarel8) | fix(help): don't trim example result beginning | [#16353](https://github.com/nushell/nushell/pull/16353) |
+| [@Tyarel8](https://github.com/Tyarel8) | fix(std/help): trim example results and fix binary examples | [#16354](https://github.com/nushell/nushell/pull/16354) |
+| [@Tyarel8](https://github.com/Tyarel8) | fix (std/help): fix bug and use `is-not-empty` | [#16394](https://github.com/nushell/nushell/pull/16394) |
+| [@Tyarel8](https://github.com/Tyarel8) | feat(each): noop on single null input, `map-null` equivalent | [#16396](https://github.com/nushell/nushell/pull/16396) |
+| [@Tyarel8](https://github.com/Tyarel8) | feat(docs): add to `run-external` and `help` command descriptions | [#16493](https://github.com/nushell/nushell/pull/16493) |
+| [@WindSoilder](https://github.com/WindSoilder) | Add `-h/--help` flag to testbin | [#16196](https://github.com/nushell/nushell/pull/16196) |
+| [@WindSoilder](https://github.com/WindSoilder) | Refactor: introduce 2 associated functions to `PipelineData` | [#16233](https://github.com/nushell/nushell/pull/16233) |
+| [@WindSoilder](https://github.com/WindSoilder) | fix uninlined_format_args clippy warnings | [#16452](https://github.com/nushell/nushell/pull/16452) |
+| [@YPares](https://github.com/YPares) | 'stor create/insert/open' & 'query db' now support JSON columns | [#16258](https://github.com/nushell/nushell/pull/16258) |
+| [@andoalon](https://github.com/andoalon) | Change the output of `format bits` to big endian instead of native endian | [#16435](https://github.com/nushell/nushell/pull/16435) |
+| [@andoalon](https://github.com/andoalon) | Add `--endian` flag to `into binary` | [#16466](https://github.com/nushell/nushell/pull/16466) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump oem_cp from 2.0.0 to 2.1.0 | [#16298](https://github.com/nushell/nushell/pull/16298) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.34.0 to 1.35.1 | [#16360](https://github.com/nushell/nushell/pull/16360) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump mach2 from 0.4.2 to 0.4.3 | [#16363](https://github.com/nushell/nushell/pull/16363) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump fancy-regex from 0.14.0 to 0.16.1 | [#16365](https://github.com/nushell/nushell/pull/16365) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump rayon from 1.10.0 to 1.11.0 | [#16422](https://github.com/nushell/nushell/pull/16422) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump sysinfo from 0.36.0 to 0.36.1 | [#16423](https://github.com/nushell/nushell/pull/16423) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.35.1 to 1.35.4 | [#16424](https://github.com/nushell/nushell/pull/16424) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump actions/checkout from 4 to 5 | [#16426](https://github.com/nushell/nushell/pull/16426) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.35.4 to 1.35.5 | [#16478](https://github.com/nushell/nushell/pull/16478) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump tempfile from 3.20.0 to 3.21.0 | [#16480](https://github.com/nushell/nushell/pull/16480) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump indexmap from 2.10.0 to 2.11.0 | [#16516](https://github.com/nushell/nushell/pull/16516) |
+| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump heapless from 0.8.0 to 0.9.1 | [#16517](https://github.com/nushell/nushell/pull/16517) |
+| [@blindFS](https://github.com/blindFS) | refactor(completion, parser): move custom_completion info from Expression to Signature | [#15613](https://github.com/nushell/nushell/pull/15613) |
+| [@blindFS](https://github.com/blindFS) | fix(parser): `export def` exposes arguments to current scope | [#16262](https://github.com/nushell/nushell/pull/16262) |
+| [@blindFS](https://github.com/blindFS) | fix(parser): env shorthand false positive | [#16337](https://github.com/nushell/nushell/pull/16337) |
+| [@blindFS](https://github.com/blindFS) | fix(parser): external argument with subexpressions | [#16346](https://github.com/nushell/nushell/pull/16346) |
+| [@blindFS](https://github.com/blindFS) | fix(parser): missing span of short flag that requires a value | [#16376](https://github.com/nushell/nushell/pull/16376) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fully qualify the sqlite path for `into sqlite` | [#16349](https://github.com/nushell/nushell/pull/16349) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Add well-optimized string types | [#16446](https://github.com/nushell/nushell/pull/16446) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix `native-tls` feature | [#16518](https://github.com/nushell/nushell/pull/16518) |
+| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix some broken doc links | [#16519](https://github.com/nushell/nushell/pull/16519) |
+| [@cyradotpink](https://github.com/cyradotpink) | Fix highlighting of aliases to external commands | [#15408](https://github.com/nushell/nushell/pull/15408) |
+| [@fdncred](https://github.com/fdncred) | update to rust version 1.87.0 | [#16437](https://github.com/nushell/nushell/pull/16437) |
+| [@fdncred](https://github.com/fdncred) | update reedline dep to latest commit | [#16487](https://github.com/nushell/nushell/pull/16487) |
+| [@fdncred](https://github.com/fdncred) | pin polars dependency planus to version 1.1.1 | [#16538](https://github.com/nushell/nushell/pull/16538) |
+| [@hardfau1t](https://github.com/hardfau1t) | feat(overlay): add active column to `overlay list` | [#16125](https://github.com/nushell/nushell/pull/16125) |
+| [@hustcer](https://github.com/hustcer) | Fix commit ID hex formatting in gstat | [#16309](https://github.com/nushell/nushell/pull/16309) |
+| [@hustcer](https://github.com/hustcer) | Fix path relative-to for case-insensitive filesystems | [#16310](https://github.com/nushell/nushell/pull/16310) |
+| [@hustcer](https://github.com/hustcer) | Fix loongarch64 builds for rust 1.87.0 | [#16455](https://github.com/nushell/nushell/pull/16455) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | [nu-std] std-rfc/random: add `random choice` | [#16270](https://github.com/nushell/nushell/pull/16270) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | [parser] Improve type errors for boolean literals | [#16408](https://github.com/nushell/nushell/pull/16408) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | docs: document undocumented `Signature` methods | [#16417](https://github.com/nushell/nushell/pull/16417) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | feat: move random dice to std | [#16420](https://github.com/nushell/nushell/pull/16420) |
+| [@kaathewisegit](https://github.com/kaathewisegit) | Improve wrong flag help | [#16427](https://github.com/nushell/nushell/pull/16427) |
+| [@lucascherzer](https://github.com/lucascherzer) | feat(watch): implement --debounce flag with duration | [#16187](https://github.com/nushell/nushell/pull/16187) |
+| [@new-years-eve](https://github.com/new-years-eve) | Change the behavior of `--ignore-case` and `--multiline` options for `find` | [#16323](https://github.com/nushell/nushell/pull/16323) |
+| [@nitsky](https://github.com/nitsky) | Kill background jobs on interrupt | [#16285](https://github.com/nushell/nushell/pull/16285) |
+| [@pyz4](https://github.com/pyz4) | fix(polars): fix `polars fill-null` signature to also accept expression as input | [#16444](https://github.com/nushell/nushell/pull/16444) |
+| [@samoylovfp](https://github.com/samoylovfp) | Bump ureq, get redirect history. | [#16078](https://github.com/nushell/nushell/pull/16078) |
+| [@sgvictorino](https://github.com/sgvictorino) | fix panic when `..=` syntax is used in stepped ranges | [#16231](https://github.com/nushell/nushell/pull/16231) |
+| [@sholderbach](https://github.com/sholderbach) | Bump version to 0.106.2 | [#16295](https://github.com/nushell/nushell/pull/16295) |
+| [@sholderbach](https://github.com/sholderbach) | Manual GH workflow for `cargo hack` before release | [#16304](https://github.com/nushell/nushell/pull/16304) |
+| [@sholderbach](https://github.com/sholderbach) | Fixup pre-release checkup workflow | [#16305](https://github.com/nushell/nushell/pull/16305) |
+| [@sholderbach](https://github.com/sholderbach) | Fix UTF-8 multibyte handling in `explore` inputs | [#16325](https://github.com/nushell/nushell/pull/16325) |
+| [@sholderbach](https://github.com/sholderbach) | Add `send: vichangemode` to reedline config | [#16327](https://github.com/nushell/nushell/pull/16327) |
+| [@sholderbach](https://github.com/sholderbach) | Forgo full build in the `cargo hack` wf | [#16328](https://github.com/nushell/nushell/pull/16328) |
+| [@sholderbach](https://github.com/sholderbach) | Fix panic in unit parsing with non-UTF8 code | [#16355](https://github.com/nushell/nushell/pull/16355) |
+| [@sholderbach](https://github.com/sholderbach) | Use direct `Value.as_str()` in string commands | [#16468](https://github.com/nushell/nushell/pull/16468) |
+| [@sholderbach](https://github.com/sholderbach) | chore: Clippy and dead code elimination pass | [#16469](https://github.com/nushell/nushell/pull/16469) |
+| [@sholderbach](https://github.com/sholderbach) | Update PLATFORM_SUPPORT to mention loongarch limitations | [#16470](https://github.com/nushell/nushell/pull/16470) |
+| [@sholderbach](https://github.com/sholderbach) | Add a benchmark `use`ing the whole `std` | [#16485](https://github.com/nushell/nushell/pull/16485) |
+| [@sholderbach](https://github.com/sholderbach) | Update benchmarking README | [#16486](https://github.com/nushell/nushell/pull/16486) |
+| [@sholderbach](https://github.com/sholderbach) | Add "did my homework" checkboxes to issue template | [#16520](https://github.com/nushell/nushell/pull/16520) |
+| [@sholderbach](https://github.com/sholderbach) | Fix `polars open` to use tab as separator for TSV | [#16524](https://github.com/nushell/nushell/pull/16524) |
+| [@sholderbach](https://github.com/sholderbach) | Fix issue form syntax | [#16541](https://github.com/nushell/nushell/pull/16541) |
+| [@stuartcarnie](https://github.com/stuartcarnie) | feat: `commandline edit --accept` to instantly execute command | [#16193](https://github.com/nushell/nushell/pull/16193) |
+| [@uraneko](https://github.com/uraneko) | Sort help message flags by required field | [#16476](https://github.com/nushell/nushell/pull/16476) |
+| [@weirdan](https://github.com/weirdan) | Respect `$env.LC_ALL` and `$env.LANG` in `format date` | [#16369](https://github.com/nushell/nushell/pull/16369) |
+| [@weirdan](https://github.com/weirdan) | Fix example result span | [#16395](https://github.com/nushell/nushell/pull/16395) |
+| [@weirdan](https://github.com/weirdan) | Fix `watch` return type | [#16400](https://github.com/nushell/nushell/pull/16400) |
+| [@weirdan](https://github.com/weirdan) | Validate `std/random dice` args | [#16430](https://github.com/nushell/nushell/pull/16430) |
+| [@weirdan](https://github.com/weirdan) | Quote strings containing `=` | [#16440](https://github.com/nushell/nushell/pull/16440) |
+| [@weirdan](https://github.com/weirdan) | Multiple output types for `query xml` | [#16459](https://github.com/nushell/nushell/pull/16459) |
+| [@weirdan](https://github.com/weirdan) | Use fixed column name for `query xml` output | [#16461](https://github.com/nushell/nushell/pull/16461) |
+| [@weirdan](https://github.com/weirdan) | Extend nodeset output formats for `query xml` | [#16465](https://github.com/nushell/nushell/pull/16465) |
+| [@weirdan](https://github.com/weirdan) | Make `xml:` prefix always available in `query xml` | [#16472](https://github.com/nushell/nushell/pull/16472) |
+| [@weirdan](https://github.com/weirdan) | Reset content type for commands returning partial input | [#16500](https://github.com/nushell/nushell/pull/16500) |
+| [@weirdan](https://github.com/weirdan) | Prevent `detect columns` from creating invalid records with duplicate keys | [#16527](https://github.com/nushell/nushell/pull/16527) |
+| [@weirdan](https://github.com/weirdan) | Dummy 'namespace' commands for multiword orphans | [#16529](https://github.com/nushell/nushell/pull/16529) |
+| [@ysthakur](https://github.com/ysthakur) | Revert "refactor(completion, parser): move custom_completion info from Expression to Signature" | [#16250](https://github.com/nushell/nushell/pull/16250) |
+| [@ysthakur](https://github.com/ysthakur) | Reapply "refactor(completion, parser): move custom_completion info from Expression to Signature" (#16250) | [#16259](https://github.com/nushell/nushell/pull/16259) |
+| [@zhiburt](https://github.com/zhiburt) | nu-table: Fix header on border index coloring | [#16377](https://github.com/nushell/nushell/pull/16377) |
From 36e60c58526574d8617e4b5303ecfa7741975b07 Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 00:29:35 +0200
Subject: [PATCH 03/24] handled some todos
---
blog/2025-09-02-nushell_0_107_0.md | 41 +++++++++++++++++++-----------
1 file changed, 26 insertions(+), 15 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index a1c3e4740cf..73b90d6f5be 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -52,14 +52,14 @@ The `find` command is now case-sensitive by default in all modes. Previously, yo
This change makes the different modes of `find` more consistent. It also makes `find` more consistent with other parts of Nushell, such as `where`'s `=~` operator and the recent [case-sensitive cell-paths change](https://www.nushell.sh/blog/2025-06-10-nushell_0_105_0.html#case-sensitive-cell-paths-or-not-toc).
-> TODO(release-notes): make sure this callout renders correctly on the blog
+::: tip
+If you want `find` to still be case-insensitive after this release, which might be desirable for interactive usage, you can add an alias to your config:
-> [!TIP]
-> If you want `find` to still be case-insensitive after this release, which might be desirable for interactive usage, you can add an alias to your config:
->
-> ```nu
-> alias find = find -i
-> ```
+```nu
+alias find = find -i
+```
+
+:::
### New behavior for `find --multiline`
@@ -201,12 +201,10 @@ Now, `format bits` always formats in big endian:
`overlay list` now returns table instead of list of overlays. Before, only active overlays were included in `overlay list`. Now, hidden overlays will be included as well, and there is a column indicating whether a given overlay is hidden or not.
-> TODO(release-notes): make sure this call out is formatted correctly for the blog
-
-> [!TIP]
-> The ordering of `overlay list` is still preserved. If you run `overlay list | last`, you will still get the most recently activated overlay.
->
-> For migrating to the new behavior, you can update any usages of `overlay list | last` to `overlay list | last | get name`.
+::: tip
+The ordering of `overlay list` is still preserved. If you run `overlay list | last`, you will still get the most recently activated overlay.
+For migrating to the new behavior, you can update any usages of `overlay list | last` to `overlay list | last | get name`.
+:::
## Additions
@@ -225,6 +223,9 @@ With the new [watch --debounce option](#new-watch-duration-option-toc), the `--d
`nu --testbin` has a new flag `-h` to show available \
+
+
+
```
> nu --testbin -h
Usage: nu --testbin
@@ -247,6 +248,9 @@ repeat_bytes -> A version of repeater that can output binary data, even null byt
repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)
```
+
+
+
### New keybinding: `vichangemode`
You can now set bindings which change the Vi mode.
@@ -267,7 +271,7 @@ The available modifiers and keycodes, remain limited to single character binding
### JSON column support for `stor` and `query db`
-The 'stor create/insert/open' and 'query db' commands now support JSON and JSONB columns. This lets you store more kinds of structured data directly inside of an SQLite database without an explicit `to`/`from` step.
+The `stor create/insert/open` and `query db` commands now support JSON and JSONB columns. This lets you store more kinds of structured data directly inside of an SQLite database without an explicit `to`/`from` step.
Here's an example of storing a simple table inside a `stor` database, and retrieving it as structured data with `query db`:
@@ -559,7 +563,14 @@ Here's a before/after comparison:
`help` command used to trim the outputs of examples, which could result in inconsistent white space:
-> Following snippets are generated with this config `$env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false}`
+::: info
+Following snippets are generated with this config:
+
+```nu
+$env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false}
+```
+
+:::
Before:
From 3061c023f18e5ebf53222671216344902e54a2aa Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 00:31:54 +0200
Subject: [PATCH 04/24] typo fixes
---
blog/2025-09-02-nushell_0_107_0.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 73b90d6f5be..90d65e401b9 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -660,9 +660,9 @@ Added missing parent ('namespace') commands to improve error reporting:
- In `explore`, cursor position and search highlighting works better on non-ASCII characters. ([#16325](https://github.com/nushell/nushell/pull/16325))
-- `path relative-to` works better for case-insentitive filesystems, this works on `Windowes` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
+- `path relative-to` works better for case-insensitive filesystems, this works on `Windowes` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
-- `std help` displays better on binary exmaples. ([#16354](https://github.com/nushell/nushell/pull/16354))
+- `std help` displays better on binary examples. ([#16354](https://github.com/nushell/nushell/pull/16354))
- `into sqlite` will respect `$env.PWD` rather than current working directory. ([#16349](https://github.com/nushell/nushell/pull/16349))
From f30ba23a765f8d7a55dcc4a542a040a8b459df6e Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 14:28:38 +0200
Subject: [PATCH 05/24] handle external alias todo
---
blog/2025-09-02-nushell_0_107_0.md | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 90d65e401b9..adf057adbf8 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -596,13 +596,31 @@ After:
Aliases to external commands will now be properly highlighted as external commands.
-> TODO(release-notes): ensure these pictures render correctly on the blog
-
Behavior _before_ this PR:
-
+
+```ansi
+[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
+> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
+[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
+[0m[96m> [0;1m[34malias[0m [32mexternal-alias [0;1m[36m=[0m [0;1m[33mcoreutils[0m [0;1m[32mecho
+[0m[96m> [0;1m[34malias[0m [32munresolvable-alias [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [0;1m[34malias[0m [32mbash [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [32m"internal-alias; external-alias; unresolvable-alias; bash;" [0;1m[35m|[0m [0;1m[34mnu-highlight
+internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[33mbash[0m;
+```
Behavior _after_ this PR:
-
+
+```ansi
+[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
+> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
+[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
+[0m[96m> [0;1m[34malias[0m [32mexternal-alias [0;1m[36m=[0m [0;1m[33mcoreutils[0m [0;1m[32mecho
+[0m[96m> [0;1m[34malias[0m [32munresolvable-alias [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [0;1m[34malias[0m [32mbash [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [32m"internal-alias; external-alias; unresolvable-alias; bash;" [0;1m[35m|[0m [0;1m[34mnu-highlight
+internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[31mbash[0m;
+```
### Prevent `detect columns` from creating invalid records with duplicate keys
From 88f62b593909cf51bcd6211a1917d20702daf633 Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 16:03:06 +0200
Subject: [PATCH 06/24] use ansi escape codes for command output
---
blog/2025-09-02-nushell_0_107_0.md | 274 ++++++++++++++++-------------
1 file changed, 151 insertions(+), 123 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index adf057adbf8..81481456671 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -67,27 +67,31 @@ Previously, `find` would always split multi-line input strings, making it imposs
Before:
-```nu
-"hello\nworld" | find -mr 'lo\swo'
-# => no output
+```ansi
+[38;5;14m> [32m"hello\nworld"[39m [1m[35m|[22m[39m [1m[36mfind[22m[39m [1m[34m-mr[22m[39m [32m'lo\swo'[37m
+╭────────────╮
+│[39m [2mempty list[22m [37m│
+╰────────────╯[0m
```
After:
-```nu
-"hello\nworld" | find -mr 'lo\swo'
-# => hello
-# => world
+```ansi
+[38;5;14m> [32m"hello\nworld"[39m [1m[35m|[22m[39m [1m[36mfind[22m[39m [1m[34m-mr[22m[39m [32m'lo\swo'[39m
+hel[41mlo
+wo[49mrl[0m
```
### `random dice` moved to `std`
The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
-```nushell
-use std/random
-
-random dice
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd/random[38;5;14m
+> [1m[36mrandom dice[22m[39m
+╭───┬───╮
+│ [1m[32m0[22m[39m │ 6 │
+╰───┴───╯[0m
```
It's behavior, parameters, and defaults are the same.
@@ -97,16 +101,21 @@ It's behavior, parameters, and defaults are the same.
When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
For example, before this change:
-```nu
-→ null | each { "something" }
-something
+```ansi
+[38;5;14m> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m [1m[35m|[22m[39m [1m[36mdescribe[22m[39m
+string[38;5;14m
+> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m
+something[38;5;14m
+>[0m
```
But after this change:
-```nu
-→ null | each { "something" }
-null
+```ansi
+[38;5;14m> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m [1m[35m|[22m[39m [1m[36mdescribe[22m[39m
+nothing[38;5;14m
+> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[38;5;14m
+>[0m
```
### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt`
@@ -134,12 +143,12 @@ open -r tests/fixtures/formats/jt.xml
Before this change, this would return:
-```
-╭───┬─────────╮
-│ # │ false() │
+```ansi
+[37m╭───┬─────────╮
+│[39m [1m[32m#[22m[39m [37m│[39m [1m[32mfalse()[22m[39m [37m│
├───┼─────────┤
-│ 0 │ false │
-╰───┴─────────╯
+│[39m [1m[32m0[22m[39m [37m│[39m [96mfalse[39m [37m│
+╰───┴─────────╯[0m
```
Now, this will just return `false`.
@@ -178,23 +187,23 @@ open -r tests/fixtures/formats/jt.xml
While the most popular architectures use little endian, many people are used to reading binary numbers as little endian. However, until now, if you were in a little endian system, you would get:
-```nushell
-~> 258 | format bits
-00000010 00000001
+```ansi
+[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
+00000010 00000001[0m
```
If you copied and pasted that as a number, you would get a surprising result:
-```nushell
-~> 0b00000010_00000001
-513
+```ansi
+[38;5;14m> [1m[35m0b00000010_00000001[22m[39m
+513[0m
```
Now, `format bits` always formats in big endian:
-```nushell
-~> 258 | format bits
-00000001 00000010
+```ansi
+[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
+00000001 00000010[0m
```
### Add active column to `overlay list`
@@ -275,60 +284,76 @@ The `stor create/insert/open` and `query db` commands now support JSON and JSONB
Here's an example of storing a simple table inside a `stor` database, and retrieving it as structured data with `query db`:
-```nushell
+```ansi
# create a table named my_table with a JSON column named data
-stor create -t my_table -c {data: json}
+[38;5;14m> [1m[36mstor create[22m[39m [1m[34m-t[22m[39m [32mmy_table[39m [1m[34m-c[22m[39m [1m[36m{[22m[32mdata[1m[36m: [22m[32mjson[1m[36m}[22m[39m
+╭──────────┬────────────────╮
+│ [1m[32mmy_table[22m[39m │ [list 0 items] │
+╰──────────┴────────────────╯
# inset a row into the data column containing a table
-{data: [1 2 3]} | stor insert -t my_table
+[38;5;14m> [1m[36m{[22m[32mdata[1m[36m: [[35m1[36m [35m2[36m [35m3[36m]}[22m[39m [1m[35m|[22m[39m [1m[36mstor insert[22m[39m [1m[34m-t[22m[39m [32mmy_table[39m
+╭──────────┬───────────────────╮
+│ │ ╭───┬───────────╮ │
+│ [1m[32mmy_table[22m[39m │ │ [1m[32m#[22m[39m │ [1m[32mdata[22m[39m │ │
+│ │ ├───┼───────────┤ │
+│ │ │ [1m[32m0[22m[39m │ ╭───┬───╮ │ │
+│ │ │ │ │ [1m[32m0[22m[39m │ 1 │ │ │
+│ │ │ │ │ [1m[32m1[22m[39m │ 2 │ │ │
+│ │ │ │ │ [1m[32m2[22m[39m │ 3 │ │ │
+│ │ │ │ ╰───┴───╯ │ │
+│ │ ╰───┴───────────╯ │
+╰──────────┴───────────────────╯
# retrieve the data column from the table as structured data
-stor open | query db "select data from my_table"
-# => ╭───┬───────────╮
-# => │ # │ data │
-# => ├───┼───────────┤
-# => │ 0 │ ╭───┬───╮ │
-# => │ │ │ 0 │ 1 │ │
-# => │ │ │ 1 │ 2 │ │
-# => │ │ │ 2 │ 3 │ │
-# => │ │ ╰───┴───╯ │
-# => ╰───┴───────────╯
+[38;5;14m> [1m[36mstor open[22m[39m [1m[35m|[22m[39m [1m[36mquery db[22m[39m [32m"select data from my_table"[39m
+╭───┬───────────╮
+│ [1m[32m#[22m[39m │ [1m[32mdata[22m[39m │
+├───┼───────────┤
+│ [1m[32m0[22m[39m │ ╭───┬───╮ │
+│ │ │ [1m[32m0[22m[39m │ 1 │ │
+│ │ │ [1m[32m1[22m[39m │ 2 │ │
+│ │ │ [1m[32m2[22m[39m │ 3 │ │
+│ │ ╰───┴───╯ │
+╰───┴───────────╯[0m
```
### New `random choice` command in `std-rfc`
The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
-```nushell
-use std-rfc/random
-[1 2 3 4 5] | random choice 2
-# => ╭───┬───╮
-# => │ 0 │ 3 │
-# => │ 1 │ 2 │
-# => ╰───┴───╯
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd-rfc/random[38;5;14m
+> [1m[36m[[35m1[36m [35m2[36m [35m3[36m [35m4[36m [35m5[36m][22m[39m [1m[35m|[22m[39m [1m[36mrandom choice[22m[39m [1m[35m2[22m[39m
+╭───┬───╮
+│ [1m[32m0[22m[39m │ 1 │
+│ [1m[32m1[22m[39m │ 3 │
+╰───┴───╯[0m
```
### Add `str align` to `std-rfc/str`
The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
-```nushell
-[ "one = 1", "two = 2", "three = 3", "four = 4", "five = 5" ] | str align '='
-# => one = 1
-# => two = 2
-# => three = 3
-# => four = 4
-# => five = 5
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd-rfc/str[38;5;14m
+> [1m[36m[ [22m[32m"one = 1"[1m[36m, [22m[32m"two = 2"[1m[36m, [22m[32m"three = 3"[1m[36m, [22m[32m"four = 4"[1m[36m, [22m[32m"five = 5"[1m[36m ][22m[39m [1m[35m|[22m[39m [1m[36mstr align[22m[39m [32m'='[39m
+one = 1
+two = 2
+three = 3
+four = 4
+five = 5[0m
```
### Spread `null` into collections or arguments
`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
-```nushell
-[ 1 2 ...(null) ] == [ 1 2 ]
-
-{ a:1 b:2 ...(null) } == { a:1 b:2 }
+```ansi
+[38;5;14m> [1m[36m[ [35m1[36m [35m2[36m [22m[33m...[1m[34m([22m[96mnull[1m[34m)[36m ][22m[39m [33m==[39m [1m[36m[ [35m1[36m [35m2[36m ][22m[39m
+true[38;5;14m
+> [1m[36m{ [22m[32ma[1m[36m:[35m1[36m [22m[32mb[1m[36m:[35m2[36m [22m[33m...[1m[34m([22m[96mnull[1m[34m)[36m }[22m[39m [33m==[39m [1m[36m{ [22m[32ma[1m[36m:[35m1[36m [22m[32mb[1m[36m:[35m2[36m }[22m[39m
+true[0m
```
### `get`, `select`, `reject` can `--ignore-case` of cell-path
@@ -371,13 +396,13 @@ If you're using any of the `--output-*` switches, and want `string_value` column
Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
-```nushell
-258 | into binary --endian little
-# => Length: 8 (0x8) bytes | printable whitespace ascii_other non_ascii
-# => 00000000: 02 01 00 00 00 00 00 00
-258 | into binary --endian big
-# => Length: 8 (0x8) bytes | printable whitespace ascii_other non_ascii
-# => 00000000: 00 00 00 00 00 00 01 02
+```ansi
+[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36minto binary[22m[39m [1m[34m--endian[22m[39m [32mlittle[39m
+Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33mnon_ascii[22m[36m
+00000000[39m: [1m[35m02[22m[39m [1m[35m01[22m[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [1m[35m••[22m[38;5;242m000000[38;5;14m
+> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36minto binary[22m[39m [1m[34m--endian[22m[39m [32mbig[39m
+Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33mnon_ascii[22m[36m
+00000000[39m: [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [1m[35m01[22m[39m [1m[35m02[22m[39m [38;5;242m000000[1m[35m••[0m
```
Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
@@ -402,12 +427,12 @@ Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i
The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
-```nushell
-http get --full http://nushell.sh | get urls
-# => ╭───┬────────────────────────╮
-# => │ 0 │ http://nushell.sh/ │
-# => │ 1 │ http://www.nushell.sh/ │
-# => ╰───┴────────────────────────╯
+```ansi
+[38;5;14m> [1m[36mhttp get[22m[39m [1m[34m--full[22m[39m [32mhttp://nushell.sh[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32murls[39m
+╭───┬────────────────────────╮
+│ [1m[32m0[22m[39m │ http://nushell.sh/ │
+│ [1m[32m1[22m[39m │ http://www.nushell.sh/ │
+╰───┴────────────────────────╯[0m
```
> TODO(release-notes): make sure the callout below is in the correct format for the blog
@@ -481,33 +506,33 @@ http get --full --allow-errors http://localhost:1234
Previously, the help text for a missing flag would list all of them, which could get verbose on a single line:
-```nushell
-~> ls --full-path
-Error: nu::parser::unknown_flag
-
- × The `ls` command doesn't have flag `full-path`.
- ╭─[entry #8:1:4]
- 1 │ ls --full-path
- · ─────┬─────
- · ╰── unknown flag
- ╰────
- help: Available flags: --help(-h), --all(-a), --long(-l), --short-names(-s), --full-paths(-f), --du(-d), --directory(-D), --mime-type(-m), --threads(-t). Use
- `--help` for more information.
+```ansi
+[38;5;14m> [1m[36mls[22m[39m [1m[34m--full-path[22m[39m
+Error: [31mnu::parser::unknown_flag
+[39m
+ [31m×[39m The `ls` command doesn't have flag `full-path`.
+ ╭─[[1m[4m[36mentry #26:1:4[22m[24m[39m]
+ [2m1[22m │ ls --full-path
+ · [1m[35m ─────┬─────[22m[39m
+ · [1m[35m╰── unknown flag[22m[39m
+ ╰────[36m
+ help: [39mAvailable flags: --help(-h), --all(-a), --long(-l), --short-names(-s), --full-paths(-f), --du(-d),
+ --directory(-D), --mime-type(-m), --threads(-t). Use `--help` for more information.[0m
```
The new error message only suggests the closest flag:
-```nushell
-> ls --full-path
-Error: nu::parser::unknown_flag
-
- × The `ls` command doesn't have flag `full-path`.
- ╭─[entry #23:1:4]
- 1 │ ls --full-path
- · ─────┬─────
- · ╰── unknown flag
- ╰────
- help: Did you mean: `--full-paths`?
+```ansi
+[38;5;14m> [1m[36mls[22m[39m [1m[34m--full-path[22m[39m
+Error: [31mnu::parser::unknown_flag
+[39m
+ [31m×[39m The `ls` command doesn't have flag `full-path`.
+ ╭─[[1m[4m[36mentry #45:1:4[22m[24m[39m]
+ [2m1[22m │ ls --full-path
+ · [1m[35m ─────┬─────[22m[39m
+ · [1m[35m╰── unknown flag[22m[39m
+ ╰────[36m
+ help: [39mDid you mean: `--full-paths`?[0m
```
### Improved default color theme
@@ -515,7 +540,12 @@ Error: nu::parser::unknown_flag
We changed the default theme to use the ANSI default color (`39m`) instead of white (`37m`).
This finally makes the default theme usable in the context of light terminal color settings. On dark terminal palettes this change should have no impact.
-
+Comparison of white vs default color on Solarized Light theme, before and after:
+
+
+
+
+
### Reset content type for commands returning partial input
@@ -626,34 +656,32 @@ internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias
Previously `detect columns` created records (rows) with duplicate key names under some circumstances. The resulting table behaved inconsistently with different commands:
-```nushell
-let data = "meooooow cat\nkitty kitty woof"
-$data | detect columns
-# => ╭───┬──────────┬───────╮
-# => │ # │ meooooow │ cat │
-# => ├───┼──────────┼───────┤
-# => │ 0 │ kitty │ kitty │
-# => ╰───┴──────────┴───────╯
-
-$data | detect columns | get 0.cat
-# => woof
+```ansi
+[38;5;14m> [1m[36mlet[22m[39m [35mdata[39m = [32m"meooooow cat\nkitty kitty woof"[38;5;14m
+> [35m$data[39m [1m[35m|[22m[39m [1m[36mdetect columns[22m[37m
+╭───┬──────────┬───────╮
+│[39m [1m[32m#[22m[39m [37m│[39m [1m[32mmeooooow[22m[39m [37m│[39m [1m[32mcat[22m[39m [37m│
+├───┼──────────┼───────┤
+│[39m [1m[32m0[22m[39m [37m│[39m [37mkitty[39m [37m│[39m [37mkitty[39m [37m│
+╰───┴──────────┴───────╯[38;5;14m
+> [35m$data[39m [1m[35m|[22m[39m [1m[36mdetect columns[22m[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [1m[35m0[22m[39m.[32mcat[39m
+woof[0m
```
Now, this will result in an error suggesting using `detect columns --guess` or `parse`:
-```nushell
-let data = "meooooow cat\nkitty kitty woof"
-$data | detect columns
-# => Error: nu::shell::failed_to_detect_columns
-# =>
-# => × Failed to detect columns
-# => ╭─[entry #2:3:1]
-# => 2 │
-# => 3 │ $data | detect columns
-# => · ──┬── ───────┬──────
-# => · │ ╰── tried to detect columns here
-# => · ╰── value coming from here
-# => ╰────
+```ansi
+[38;5;14m> [1m[36mlet[22m[39m [35mdata[39m = [32m"meooooow cat\nkitty kitty woof"[38;5;14m
+> [35m$data[39m [1m[35m|[22m[39m [1m[36mdetect columns[22m[39m
+Error: [31mnu::shell::failed_to_detect_columns
+[39m
+ [31m×[39m Failed to detect columns
+ ╭─[[1m[4m[36mentry #48:1:1[22m[24m[39m]
+ [2m1[22m │ $data | detect columns
+ · [1m[35m──┬──[33m ───────┬──────[22m[39m
+ · [1m[35m│[22m[39m [1m[33m╰── tried to detect columns here[22m[39m
+ · [1m[35m╰── value coming from here[22m[39m
+ ╰────[0m
```
### Improve errors for subcommands without a corresponding parent command
From 863d35c2b6a955356023b1419b7867297e3e91e0 Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 16:22:57 +0200
Subject: [PATCH 07/24] made a note work in vuepress
---
blog/2025-09-02-nushell_0_107_0.md | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 81481456671..895615a2be2 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -435,14 +435,14 @@ The `http` subcommands can now maintain a list of redirects when using the `--fu
╰───┴────────────────────────╯[0m
```
-> TODO(release-notes): make sure the callout below is in the correct format for the blog
-
-> [!NOTE]
-> This may break edge cases which relied on a lack of a `urls` column, for example:
->
-> ```nushell
-> {urls: important} | merge (http get --full <...>)
-> ```
+::: note
+This may break edge cases which relied on a lack of a `urls` column, for example:
+
+```nushell
+{urls: important} | merge (http get --full <...>)
+```
+
+:::
### `http post` now sends body serialized as pretty json
From 049941c300677ffdabbb6415b2de0e6a8fd2c6bf Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 16:38:57 +0200
Subject: [PATCH 08/24] use some shiki options
---
.vuepress/config.js | 12 +++++++-
blog/2025-09-02-nushell_0_107_0.md | 48 ++++++++----------------------
2 files changed, 24 insertions(+), 36 deletions(-)
diff --git a/.vuepress/config.js b/.vuepress/config.js
index 994162498b5..6b228a8dae5 100755
--- a/.vuepress/config.js
+++ b/.vuepress/config.js
@@ -90,7 +90,16 @@ export default defineUserConfig({
},
},
head: [
- ["link", { rel: "preload", href: "/fonts/FiraCode-Regular.woff2", as: "font", type: "font/woff2", crossorigin: "anonymous" }],
+ [
+ 'link',
+ {
+ rel: 'preload',
+ href: '/fonts/FiraCode-Regular.woff2',
+ as: 'font',
+ type: 'font/woff2',
+ crossorigin: 'anonymous',
+ },
+ ],
['meta', { name: 'theme-color', content: '#3eaf7c' }],
['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }],
[
@@ -199,6 +208,7 @@ export default defineUserConfig({
onedarkpro: 'one-dark-pro', // pre-load one-dark-pro for ansi code blocks
},
lineNumbers: 10,
+ collapsedLines: false,
transformers: [
// use one-dark-pro theme for ansi code blocks
{
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 895615a2be2..66c15b4d318 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -65,18 +65,14 @@ alias find = find -i
Previously, `find` would always split multi-line input strings, making it impossible to perform proper multi-line regex matches unless a string was within list, table, or record. Now, the `--multiline` flag can be used to prevent this splitting, replacing its previous behavior of prepending `(?m)` to the regex.
-Before:
-
-```ansi
+```ansi:title="Before"
[38;5;14m> [32m"hello\nworld"[39m [1m[35m|[22m[39m [1m[36mfind[22m[39m [1m[34m-mr[22m[39m [32m'lo\swo'[37m
╭────────────╮
│[39m [2mempty list[22m [37m│
╰────────────╯[0m
```
-After:
-
-```ansi
+```ansi:title="After"
[38;5;14m> [32m"hello\nworld"[39m [1m[35m|[22m[39m [1m[36mfind[22m[39m [1m[34m-mr[22m[39m [32m'lo\swo'[39m
hel[41mlo
wo[49mrl[0m
@@ -232,11 +228,8 @@ With the new [watch --debounce option](#new-watch-duration-option-toc), the `--d
`nu --testbin` has a new flag `-h` to show available \
-
-
-
-```
-> nu --testbin -h
+```ansi:collapsed-lines=4
+[38;5;14m> [36mnu[39m [1m[32m--testbin[22m[39m [1m[32m-h[22m[39m
Usage: nu --testbin
:
chop -> With no parameters, will chop a character off the end of each line
@@ -251,15 +244,12 @@ input_bytes_length -> Prints the number of bytes received on stdin(e.g: 0x[deadb
meow -> Cross platform cat (open a file, print the contents) using read_to_string and println!()(e.g: nu --testbin meow file.txt)
meowb -> Cross platform cat (open a file, print the contents) using read() and write_all() / binary(e.g: nu --testbin meowb sample.db)
nonu -> Cross platform echo but concats arguments without space and NO newline(e.g: nu --testbin nonu a b c)
-nu_repl -> Run a REPL with the given source lines
+nu_repl -> Run a REPL with the given source lines, it must be called with `--testbin=nu_repl`, `--testbin nu_repl` will not work due to argument count logic
relay -> Relays anything received on stdin to stdout(e.g: 0x[beef] | nu --testbin relay)
repeat_bytes -> A version of repeater that can output binary data, even null bytes(e.g: nu --testbin repeat_bytes 003d9fbf 10)
-repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)
+repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
```
-
-
-
### New keybinding: `vichangemode`
You can now set bindings which change the Vi mode.
@@ -284,7 +274,7 @@ The `stor create/insert/open` and `query db` commands now support JSON and JSONB
Here's an example of storing a simple table inside a `stor` database, and retrieving it as structured data with `query db`:
-```ansi
+```ansi:no-line-numbers
# create a table named my_table with a JSON column named data
[38;5;14m> [1m[36mstor create[22m[39m [1m[34m-t[22m[39m [32mmy_table[39m [1m[34m-c[22m[39m [1m[36m{[22m[32mdata[1m[36m: [22m[32mjson[1m[36m}[22m[39m
╭──────────┬────────────────╮
@@ -448,9 +438,7 @@ This may break edge cases which relied on a lack of a `urls` column, for example
Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
-Before:
-
-```http
+```http:title="Before"
POST / HTTP/1.1
Host: localhost:1234
User-Agent: nushell
@@ -462,9 +450,7 @@ Content-Length: 13
{"foo":"bar"}
```
-After:
-
-```http
+```http:title="After"
POST / HTTP/1.1
accept-encoding: gzip
content-length: 18
@@ -602,9 +588,7 @@ $env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false
:::
-Before:
-
-```
+```txt:title="Before"
Find and replace all occurrences of found string in record using regular expression
> { KeyA: abc, KeyB: abc, KeyC: ads } | str replace --all --regex 'b' 'z' KeyA KeyC
KeyA azc
@@ -612,9 +596,7 @@ Before:
KeyC ads
```
-After:
-
-```
+```txt:title="After"
Find and replace all occurrences of found string in record using regular expression
> { KeyA: abc, KeyB: abc, KeyC: ads } | str replace --all --regex 'b' 'z' KeyA KeyC
KeyA azc
@@ -626,9 +608,7 @@ After:
Aliases to external commands will now be properly highlighted as external commands.
-Behavior _before_ this PR:
-
-```ansi
+```ansi:title="Behavior in 0.106.1"
[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
@@ -639,9 +619,7 @@ Behavior _before_ this PR:
internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[33mbash[0m;
```
-Behavior _after_ this PR:
-
-```ansi
+```ansi:title="Behavior in 0.107.0"
[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
From 836bbdc74e2fd82544dfcf6b14c53ac0b00c7a5f Mon Sep 17 00:00:00 2001
From: Tim 'Piepmatz' Hesse
Date: Mon, 1 Sep 2025 16:55:58 +0200
Subject: [PATCH 09/24] add false positive entry
---
typos.toml | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/typos.toml b/typos.toml
index 7c0b2a359cb..b89a226153c 100644
--- a/typos.toml
+++ b/typos.toml
@@ -7,15 +7,16 @@ extend-ignore-identifiers-re = [
]
[default.extend-words]
-ons = "ons" # false positive in commands/docs/str_replace.md
-ful = "ful" # false positive in commands/docs/str_replace.md
-optio = "optio" # false positive in cookbook/http.md
"ime" = "ime" # false positive in cookbook/polars_v_pandas_v_nushell.md
-ws = "ws" # false positive in book/nushell_map.md
-ratatui = "ratatui"
+ba = "ba"
doas = "doas"
+ful = "ful" # false positive in commands/docs/str_replace.md
+guid = "guid"
+hel = "hel" # false positive in blog/2025-09-02-nushell_0_107_0.md
iterm = "iterm"
nushell = "nushell"
-ba = "ba"
-guid = "guid"
+ons = "ons" # false positive in commands/docs/str_replace.md
+optio = "optio" # false positive in cookbook/http.md
+ratatui = "ratatui"
+ws = "ws" # false positive in book/nushell_map.md
From 00526731387c23fe06adafa8de1852b541c2f878 Mon Sep 17 00:00:00 2001
From: Harper Andrews
Date: Mon, 1 Sep 2025 09:58:04 -0500
Subject: [PATCH 10/24] Fix big vs little endianness mistake in release notes
(#2027)
---
blog/2025-09-02-nushell_0_107_0.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 66c15b4d318..bed3147b2a0 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -181,7 +181,7 @@ open -r tests/fixtures/formats/jt.xml
### Change the output of `format bits` to big endian instead of native endian
-While the most popular architectures use little endian, many people are used to reading binary numbers as little endian. However, until now, if you were in a little endian system, you would get:
+While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
```ansi
[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
From caeb5225bb97a3417dc1da1e64ace4fa4d68a30d Mon Sep 17 00:00:00 2001
From: Harper Andrews
Date: Mon, 1 Sep 2025 11:36:47 -0500
Subject: [PATCH 11/24] Fix incorrect tense in release notes entry (#2029)
---
blog/2025-09-02-nushell_0_107_0.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index bed3147b2a0..44fa1045bc5 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -766,7 +766,7 @@ Thanks to all the contributors below for helping us solve issues, improve docume
| [@sholderbach](https://github.com/sholderbach) | Add "did my homework" checkboxes to issue template | [#16520](https://github.com/nushell/nushell/pull/16520) |
| [@fdncred](https://github.com/fdncred) | Pin polars dependency planus to version 1.1.1 | [#16538](https://github.com/nushell/nushell/pull/16538) |
| [@sholderbach](https://github.com/sholderbach) | Fix issue form syntax | [#16541](https://github.com/nushell/nushell/pull/16541) |
-| [@ItsHarper](https://github.com/ItsHarper) | Fixes incorrect documentation of the default behavior of the `bits rol`, `bits ror`, `bits shl`, and `bits shr` commands when the `--number-bytes` flag is not provided | [#16542](https://github.com/nushell/nushell/pull/16542) |
+| [@ItsHarper](https://github.com/ItsHarper) | Fix incorrect documentation of the default behavior of the `bits rol`, `bits ror`, `bits shl`, and `bits shr` commands when the `--number-bytes` flag is not provided | [#16542](https://github.com/nushell/nushell/pull/16542) |
# Full changelog
From 155bdea2869d74e05310a0cdb0f03342f99022c2 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 11:11:01 -0400
Subject: [PATCH 12/24] Add PR links to headers
---
blog/2025-09-02-nushell_0_107_0.md | 64 +++++++++++++++---------------
1 file changed, 32 insertions(+), 32 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 44fa1045bc5..4e3be8844db 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -46,7 +46,7 @@ As part of this release, we also publish a set of optional [plugins](https://www
## Breaking changes
-### `find` is now case-sensitive by default
+### `find` is now case-sensitive by default ([#16323](https://github.com/nushell/nushell/pull/16323))
The `find` command is now case-sensitive by default in all modes. Previously, you could use the `--ignore-case` flag to make `find` case-insensitive in the `--regex` mode, but the default "search term mode" would always be case-insensitive. Now, both modes are case-sensitive by default, and you can use the `--ignore-case` flag to make them case-insensitive.
@@ -61,7 +61,7 @@ alias find = find -i
:::
-### New behavior for `find --multiline`
+### New behavior for `find --multiline` ([#16323](https://github.com/nushell/nushell/pull/16323))
Previously, `find` would always split multi-line input strings, making it impossible to perform proper multi-line regex matches unless a string was within list, table, or record. Now, the `--multiline` flag can be used to prevent this splitting, replacing its previous behavior of prepending `(?m)` to the regex.
@@ -78,7 +78,7 @@ hel[41mlo
wo[49mrl[0m
```
-### `random dice` moved to `std`
+### `random dice` moved to `std` ([#16420](https://github.com/nushell/nushell/pull/16420))
The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
@@ -92,7 +92,7 @@ The `random dice` command has been rewritten in Nushell and moved to the standar
It's behavior, parameters, and defaults are the same.
-### `each` now passes through `null` input
+### `each` now passes through `null` input ([#16396](https://github.com/nushell/nushell/pull/16396))
When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
For example, before this change:
@@ -114,7 +114,7 @@ nothing[38;5;14m
>[0m
```
-### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt`
+### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt` ([#16356](https://github.com/nushell/nushell/pull/16356))
Before this release `env_change` hooks would execute _after_ `pre_prompt` hooks, and the prompt would be rendered after `env_change` hooks.
@@ -126,7 +126,7 @@ Now, order of execution is as follows:
- `pre_prompt` hooks
- Rendering the prompt with `PROMPT_COMMAND`
-### `query xml` returns scalar results when possible
+### `query xml` returns scalar results when possible ([#16459](https://github.com/nushell/nushell/pull/16459))
Previously, `query xml` always returned a table, even for scalar results. Now scalar results will be returned as scalars.
@@ -149,7 +149,7 @@ Before this change, this would return:
Now, this will just return `false`.
-### Use fixed column name for `query xml` output
+### Use fixed column name for `query xml` output ([#16461](https://github.com/nushell/nushell/pull/16461))
Previously, the `query xml` command outputs nodeset results in a table with a column name corresponding to the input expression. Now, the column name is fixed. This should make it easier to extract values from the output of `query xml`.
@@ -179,7 +179,7 @@ open -r tests/fixtures/formats/jt.xml
# => ╰───┴───────────────────────────────────────────╯
```
-### Change the output of `format bits` to big endian instead of native endian
+### Change the output of `format bits` to big endian instead of native endian ([#16435](https://github.com/nushell/nushell/pull/16435))
While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
@@ -202,7 +202,7 @@ Now, `format bits` always formats in big endian:
00000001 00000010[0m
```
-### Add active column to `overlay list`
+### Add active column to `overlay list` ([#16125](https://github.com/nushell/nushell/pull/16125))
`overlay list` now returns table instead of list of overlays. Before, only active overlays were included in `overlay list`. Now, hidden overlays will be included as well, and there is a column indicating whether a given overlay is hidden or not.
@@ -213,18 +213,18 @@ For migrating to the new behavior, you can update any usages of `overlay list |
## Additions
-### New `watch --debounce` option
+### New `watch --debounce` option ([#16187](https://github.com/nushell/nushell/pull/16187))
The `watch` command now has `--debounce` flag, which takes a duration value. This will replace the `--debounce-ms` flag which takes an int rather than a duration, and will eventually take over its `-d` short flag.
-### Deprecate `watch --debounce-ms`
+### Deprecate `watch --debounce-ms` ([#16187](https://github.com/nushell/nushell/pull/16187))
> TODO(release-notes): Move this to Deprecations section
> TODO(release-notes): verify link works after generating ToC
With the new [watch --debounce option](#new-watch-duration-option-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
-### Add `-h/--help` flag to testbin
+### Add `-h/--help` flag to testbin ([#16196](https://github.com/nushell/nushell/pull/16196))
`nu --testbin` has a new flag `-h` to show available \
@@ -250,7 +250,7 @@ repeat_bytes -> A version of repeater that can output binary data, even null byt
repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
```
-### New keybinding: `vichangemode`
+### New keybinding: `vichangemode` ([#16327](https://github.com/nushell/nushell/pull/16327))
You can now set bindings which change the Vi mode.
To do so send a `vichangemode` event with the `mode` field to set `normal`, `insert`, or `visual`
@@ -268,7 +268,7 @@ $env.config.keybindings ++=
The available modifiers and keycodes, remain limited to single character bindings with modifiers. We don't yet provide access to the key-chord parsing of the vi mode.
-### JSON column support for `stor` and `query db`
+### JSON column support for `stor` and `query db` ([#16258](https://github.com/nushell/nushell/pull/16258))
The `stor create/insert/open` and `query db` commands now support JSON and JSONB columns. This lets you store more kinds of structured data directly inside of an SQLite database without an explicit `to`/`from` step.
@@ -308,7 +308,7 @@ Here's an example of storing a simple table inside a `stor` database, and retrie
╰───┴───────────╯[0m
```
-### New `random choice` command in `std-rfc`
+### New `random choice` command in `std-rfc` ([#16270](https://github.com/nushell/nushell/pull/16270))
The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
@@ -321,7 +321,7 @@ The `random choice` command has been added as a new candidate for our standard l
╰───┴───╯[0m
```
-### Add `str align` to `std-rfc/str`
+### Add `str align` to `std-rfc/str` ([#16062](https://github.com/nushell/nushell/pull/16062))
The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
@@ -335,7 +335,7 @@ four = 4
five = 5[0m
```
-### Spread `null` into collections or arguments
+### Spread `null` into collections or arguments ([#16399](https://github.com/nushell/nushell/pull/16399))
`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
@@ -346,11 +346,11 @@ true[38;5;14m
true[0m
```
-### `get`, `select`, `reject` can `--ignore-case` of cell-path
+### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401](https://github.com/nushell/nushell/pull/16401))
`get`, `select`, `reject` commands now have a `--ignore-case` flag, which makes the commands interpret all cell-path arguments as completely case insensitive.
-### `watch` streams events
+### `watch` streams events ([#16428](https://github.com/nushell/nushell/pull/16428))
`watch` command can now be used to _return a stream_ of detected events instead of calling a closure with it's information, though using a closure is still possible and existing uses won't break.
@@ -372,7 +372,7 @@ watch .
| each { md-lint $in.path }
```
-### Extend nodeset output formats for `query xml`
+### Extend nodeset output formats for `query xml` ([#16465](github.com/nushell/nushell/pull/16465))
`query xml` now can output additional information when it returns Nodesets:
@@ -382,7 +382,7 @@ watch .
If you're using any of the `--output-*` switches, and want `string_value` column to show up, pass `--output-string-value` explicitly. In the absence of any `--output-*` attributes, `--output-string-value` is assumed to be on.
-### `--endian` flag for `into binary`
+### `--endian` flag for `into binary` ([#16466](https://github.com/nushell/nushell/pull/16466))
Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
@@ -411,7 +411,7 @@ Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i
## Other changes
-### `http` subcommands now keep track of redirects
+### `http` subcommands now keep track of redirects ([#16078](https://github.com/nushell/nushell/pull/16078))
> TODO(release-notes): Move this subheading to Additions
@@ -434,7 +434,7 @@ This may break edge cases which relied on a lack of a `urls` column, for example
:::
-### `http post` now sends body serialized as pretty json
+### `http post` now sends body serialized as pretty json ([#16078](https://github.com/nushell/nushell/pull/16078))
Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
@@ -464,7 +464,7 @@ content-type: application/json; charset=utf-8
}
```
-### `http` commands will now fail on invalid headers
+### `http` commands will now fail on invalid headers ([#16078](https://github.com/nushell/nushell/pull/16078))
Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
@@ -488,7 +488,7 @@ http get --full --allow-errors http://localhost:1234
# => ╰────
```
-### Improved error messages for misspelled flags
+### Improved error messages for misspelled flags ([#16427](https://github.com/nushell/nushell/pull/16427))
Previously, the help text for a missing flag would list all of them, which could get verbose on a single line:
@@ -521,7 +521,7 @@ Error: [31mnu::parser::unknown_flag
help: [39mDid you mean: `--full-paths`?[0m
```
-### Improved default color theme
+### Improved default color theme ([#16509](https://github.com/nushell/nushell/pull/16509))
We changed the default theme to use the ANSI default color (`39m`) instead of white (`37m`).
This finally makes the default theme usable in the context of light terminal color settings. On dark terminal palettes this change should have no impact.
@@ -533,7 +533,7 @@ Comparison of white vs default color on Solarized Light theme, before and after:
-### Reset content type for commands returning partial input
+### Reset content type for commands returning partial input ([#16500](https://github.com/nushell/nushell/pull/16500))
The following commands no longer preserve `content_type` element of the input metadata:
@@ -556,7 +556,7 @@ The following commands no longer preserve `content_type` element of the input me
## Bug fixes
-### `input list` Plays Nicely With Styled Input
+### `input list` Plays Nicely With Styled Input ([#16276](https://github.com/nushell/nushell/pull/16276))
`input list` had some trouble dealing with ANSI styled inputs, such as:
@@ -575,7 +575,7 @@ Here's a before/after comparison:
[fuzzy-before]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-before.svg
[fuzzy-fixed]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-after.svg
-### Fixed spacing of `help` examples
+### Fixed spacing of `help` examples ([#16353](https://github.com/nushell/nushell/pull/16353))
`help` command used to trim the outputs of examples, which could result in inconsistent white space:
@@ -604,7 +604,7 @@ $env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false
KeyC ads
```
-### Fix highlighting of aliases to external commands
+### Fix highlighting of aliases to external commands ([#15408](https://github.com/nushell/nushell/pull/15408))
Aliases to external commands will now be properly highlighted as external commands.
@@ -630,7 +630,7 @@ internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias
internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[31mbash[0m;
```
-### Prevent `detect columns` from creating invalid records with duplicate keys
+### Prevent `detect columns` from creating invalid records with duplicate keys ([#16527](https://github.com/nushell/nushell/pull/16527))
Previously `detect columns` created records (rows) with duplicate key names under some circumstances. The resulting table behaved inconsistently with different commands:
@@ -662,7 +662,7 @@ Error: [31mnu::shell::failed_to_detect_columns
╰────[0m
```
-### Improve errors for subcommands without a corresponding parent command
+### Improve errors for subcommands without a corresponding parent command ([#16529](https://github.com/nushell/nushell/pull/16529))
Added missing parent ('namespace') commands to improve error reporting:
From 811ef53a5a8a3fac62bb7a734f06ce89f6cd2e2a Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 11:20:02 -0400
Subject: [PATCH 13/24] Fix example for #16078
---
blog/2025-09-02-nushell_0_107_0.md | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 4e3be8844db..184822076b0 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -471,21 +471,24 @@ Before, non-UTF-8 headers would be silently ignored. Now, these will cause an er
In one Nushell instance, we create something resembling an HTTP server on port 1234:
```nu
-[("HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: "| into binary) 0x[1F FF AA AA] ("\r\n\r\n" | into binary)] | bytes collect |
+["HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: " 0x[1F FF AA AA] "\r\n\r\n"]
+| each { into binary }
+| bytes collect
+| ncat -l 1234
```
In another instance, we connect to port 1234. The `x-header` is not valid UTF-8, which now produces an error:
-```nushell
-http get --full --allow-errors http://localhost:1234
-# => Error: nu::shell::network_failure
-# =>
-# => × Network failure
-# => ╭─[entry #5:1:32]
-# => 1 │ http get --full --allow-errors http://localhost:1234
-# => · ──────────┬──────────
-# => · ╰── protocol: http parse fail: invalid header value
-# => ╰────
+```ansi
+[38;5;6m> [1;36mhttp get [34m--full --allow-errors [0m[32mhttp://localhost:1234[0m
+[39mError: [31mnu::shell::network_failure[0m
+
+ [31m× [39mNetwork failure[0m
+ [39m╭─[[1;4;36mentry #1:1:1[0m[39m][0m
+ [2;39m1 [0m[39m│ http get --full --allow-errors http://localhost:1234[0m
+ [39m· [1;35m────┬───[0m
+ [39m· [1;35m╰── protocol: http parse fail: invalid header value[0m
+ [39m╰────[0m
```
### Improved error messages for misspelled flags ([#16427](https://github.com/nushell/nushell/pull/16427))
From 65496edc8d7dd648775276341d0882ab3ef5b50f Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:09:58 -0400
Subject: [PATCH 14/24] Move subsections as noted in TODOs
---
blog/2025-09-02-nushell_0_107_0.md | 43 +++++++++++++++---------------
1 file changed, 22 insertions(+), 21 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 184822076b0..0ca14bf275a 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -217,12 +217,6 @@ For migrating to the new behavior, you can update any usages of `overlay list |
The `watch` command now has `--debounce` flag, which takes a duration value. This will replace the `--debounce-ms` flag which takes an int rather than a duration, and will eventually take over its `-d` short flag.
-### Deprecate `watch --debounce-ms` ([#16187](https://github.com/nushell/nushell/pull/16187))
-
-> TODO(release-notes): Move this to Deprecations section
-> TODO(release-notes): verify link works after generating ToC
-
-With the new [watch --debounce option](#new-watch-duration-option-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
### Add `-h/--help` flag to testbin ([#16196](https://github.com/nushell/nushell/pull/16196))
@@ -397,24 +391,9 @@ Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33
Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
-### Other additions
-
-- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373](https://github.com/nushell/nushell/pull/16373))
-
-- The `bench` command in the standard library now shows a progress bar (or spinner) on terminals which support `osc 9;4`. ([#16245](https://github.com/nushell/nushell/pull/16245))
-
-- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193](https://github.com/nushell/nushell/pull/16193))
-
-- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450](https://github.com/nushell/nushell/pull/16450))
-
-- Added information to the `run-external` and `help` descriptions that indicates these commands or any with the same names are automatically used for running externals and the `--help` flags respectively. ([#16493](https://github.com/nushell/nushell/pull/16493))
-
-## Other changes
### `http` subcommands now keep track of redirects ([#16078](https://github.com/nushell/nushell/pull/16078))
-> TODO(release-notes): Move this subheading to Additions
-
The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
```ansi
@@ -434,6 +413,28 @@ This may break edge cases which relied on a lack of a `urls` column, for example
:::
+### Other additions
+
+- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373](https://github.com/nushell/nushell/pull/16373))
+
+- The `bench` command in the standard library now shows a progress bar (or spinner) on terminals which support `osc 9;4`. ([#16245](https://github.com/nushell/nushell/pull/16245))
+
+- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193](https://github.com/nushell/nushell/pull/16193))
+
+- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450](https://github.com/nushell/nushell/pull/16450))
+
+- Added information to the `run-external` and `help` descriptions that indicates these commands or any with the same names are automatically used for running externals and the `--help` flags respectively. ([#16493](https://github.com/nushell/nushell/pull/16493))
+
+## Deprecations
+
+### Deprecate `watch --debounce-ms` ([#16187](https://github.com/nushell/nushell/pull/16187))
+
+> TODO(release-notes): verify link works after generating ToC
+
+With the new [watch --debounce option](#new-watch-duration-option-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
+
+## Other changes
+
### `http post` now sends body serialized as pretty json ([#16078](https://github.com/nushell/nushell/pull/16078))
Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
From 02cdacdb997bb6dc1e8068282d38de6052146db6 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:14:45 -0400
Subject: [PATCH 15/24] Reorder subsections
---
blog/2025-09-02-nushell_0_107_0.md | 483 +++++++++++++++--------------
1 file changed, 242 insertions(+), 241 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 0ca14bf275a..7052c4fbb14 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -78,6 +78,28 @@ hel[41mlo
wo[49mrl[0m
```
+### `each` now passes through `null` input ([#16396](https://github.com/nushell/nushell/pull/16396))
+
+When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
+For example, before this change:
+
+```ansi
+[38;5;14m> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m [1m[35m|[22m[39m [1m[36mdescribe[22m[39m
+string[38;5;14m
+> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m
+something[38;5;14m
+>[0m
+```
+
+But after this change:
+
+```ansi
+[38;5;14m> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m [1m[35m|[22m[39m [1m[36mdescribe[22m[39m
+nothing[38;5;14m
+> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[38;5;14m
+>[0m
+```
+
### `random dice` moved to `std` ([#16420](https://github.com/nushell/nushell/pull/16420))
The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
@@ -92,26 +114,27 @@ The `random dice` command has been rewritten in Nushell and moved to the standar
It's behavior, parameters, and defaults are the same.
-### `each` now passes through `null` input ([#16396](https://github.com/nushell/nushell/pull/16396))
+### Change the output of `format bits` to big endian instead of native endian ([#16435](https://github.com/nushell/nushell/pull/16435))
-When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
-For example, before this change:
+While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
```ansi
-[38;5;14m> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m [1m[35m|[22m[39m [1m[36mdescribe[22m[39m
-string[38;5;14m
-> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m
-something[38;5;14m
->[0m
+[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
+00000010 00000001[0m
```
-But after this change:
+If you copied and pasted that as a number, you would get a surprising result:
```ansi
-[38;5;14m> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[39m [1m[35m|[22m[39m [1m[36mdescribe[22m[39m
-nothing[38;5;14m
-> [96mnull[39m [1m[35m|[22m[39m [1m[36meach[22m[39m [1m[32m{ [22m"something"[1m }[22m[38;5;14m
->[0m
+[38;5;14m> [1m[35m0b00000010_00000001[22m[39m
+513[0m
+```
+
+Now, `format bits` always formats in big endian:
+
+```ansi
+[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
+00000001 00000010[0m
```
### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt` ([#16356](https://github.com/nushell/nushell/pull/16356))
@@ -179,29 +202,6 @@ open -r tests/fixtures/formats/jt.xml
# => ╰───┴───────────────────────────────────────────╯
```
-### Change the output of `format bits` to big endian instead of native endian ([#16435](https://github.com/nushell/nushell/pull/16435))
-
-While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
-
-```ansi
-[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
-00000010 00000001[0m
-```
-
-If you copied and pasted that as a number, you would get a surprising result:
-
-```ansi
-[38;5;14m> [1m[35m0b00000010_00000001[22m[39m
-513[0m
-```
-
-Now, `format bits` always formats in big endian:
-
-```ansi
-[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36mformat bits[22m[39m
-00000001 00000010[0m
-```
-
### Add active column to `overlay list` ([#16125](https://github.com/nushell/nushell/pull/16125))
`overlay list` now returns table instead of list of overlays. Before, only active overlays were included in `overlay list`. Now, hidden overlays will be included as well, and there is a column indicating whether a given overlay is hidden or not.
@@ -213,54 +213,110 @@ For migrating to the new behavior, you can update any usages of `overlay list |
## Additions
+### `watch` streams events ([#16428](https://github.com/nushell/nushell/pull/16428))
+
+`watch` command can now be used to _return a stream_ of detected events instead of calling a closure with it's information, though using a closure is still possible and existing uses won't break.
+
+In addition to this:
+
+```nushell
+watch . {|operation, path, new_path|
+ if $operation == "Write" and $path like "*.md" {
+ md-lint $path
+ }
+}
+```
+
+Now this is also possible:
+
+```nushell
+watch .
+| where operation == Write and path like "*.md"
+| each { md-lint $in.path }
+```
+
### New `watch --debounce` option ([#16187](https://github.com/nushell/nushell/pull/16187))
The `watch` command now has `--debounce` flag, which takes a duration value. This will replace the `--debounce-ms` flag which takes an int rather than a duration, and will eventually take over its `-d` short flag.
-### Add `-h/--help` flag to testbin ([#16196](https://github.com/nushell/nushell/pull/16196))
+### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401](https://github.com/nushell/nushell/pull/16401))
-`nu --testbin` has a new flag `-h` to show available \
+`get`, `select`, `reject` commands now have a `--ignore-case` flag, which makes the commands interpret all cell-path arguments as completely case insensitive.
-```ansi:collapsed-lines=4
-[38;5;14m> [36mnu[39m [1m[32m--testbin[22m[39m [1m[32m-h[22m[39m
-Usage: nu --testbin
-:
-chop -> With no parameters, will chop a character off the end of each line
-cococo -> Cross platform echo using println!()(e.g: nu --testbin cococo a b c)
-echo_env -> Echo's value of env keys from args(e.g: nu --testbin echo_env FOO BAR)
-echo_env_mixed -> Mix echo of env keys from input(e.g: nu --testbin echo_env_mixed out-err FOO BAR; nu --testbin echo_env_mixed err-out FOO BAR)
-echo_env_stderr -> Echo's value of env keys from args to stderr(e.g: nu --testbin echo_env_stderr FOO BAR)
-echo_env_stderr_fail -> Echo's value of env keys from args to stderr, and exit with failure(e.g: nu --testbin echo_env_stderr_fail FOO BAR)
-fail -> Exits with failure code 1(e.g: nu --testbin fail)
-iecho -> Another type of echo that outputs a parameter per line, looping infinitely(e.g: nu --testbin iecho 3)
-input_bytes_length -> Prints the number of bytes received on stdin(e.g: 0x[deadbeef] | nu --testbin input_bytes_length)
-meow -> Cross platform cat (open a file, print the contents) using read_to_string and println!()(e.g: nu --testbin meow file.txt)
-meowb -> Cross platform cat (open a file, print the contents) using read() and write_all() / binary(e.g: nu --testbin meowb sample.db)
-nonu -> Cross platform echo but concats arguments without space and NO newline(e.g: nu --testbin nonu a b c)
-nu_repl -> Run a REPL with the given source lines, it must be called with `--testbin=nu_repl`, `--testbin nu_repl` will not work due to argument count logic
-relay -> Relays anything received on stdin to stdout(e.g: 0x[beef] | nu --testbin relay)
-repeat_bytes -> A version of repeater that can output binary data, even null bytes(e.g: nu --testbin repeat_bytes 003d9fbf 10)
-repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
+### `--endian` flag for `into binary` ([#16466](https://github.com/nushell/nushell/pull/16466))
+
+Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
+
+```ansi
+[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36minto binary[22m[39m [1m[34m--endian[22m[39m [32mlittle[39m
+Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33mnon_ascii[22m[36m
+00000000[39m: [1m[35m02[22m[39m [1m[35m01[22m[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [1m[35m••[22m[38;5;242m000000[38;5;14m
+> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36minto binary[22m[39m [1m[34m--endian[22m[39m [32mbig[39m
+Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33mnon_ascii[22m[36m
+00000000[39m: [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [1m[35m01[22m[39m [1m[35m02[22m[39m [38;5;242m000000[1m[35m••[0m
```
-### New keybinding: `vichangemode` ([#16327](https://github.com/nushell/nushell/pull/16327))
+Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
-You can now set bindings which change the Vi mode.
-To do so send a `vichangemode` event with the `mode` field to set `normal`, `insert`, or `visual`
+### Spread `null` into collections or arguments ([#16399](https://github.com/nushell/nushell/pull/16399))
+
+`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
+
+```ansi
+[38;5;14m> [1m[36m[ [35m1[36m [35m2[36m [22m[33m...[1m[34m([22m[96mnull[1m[34m)[36m ][22m[39m [33m==[39m [1m[36m[ [35m1[36m [35m2[36m ][22m[39m
+true[38;5;14m
+> [1m[36m{ [22m[32ma[1m[36m:[35m1[36m [22m[32mb[1m[36m:[35m2[36m [22m[33m...[1m[34m([22m[96mnull[1m[34m)[36m }[22m[39m [33m==[39m [1m[36m{ [22m[32ma[1m[36m:[35m1[36m [22m[32mb[1m[36m:[35m2[36m }[22m[39m
+true[0m
+```
+
+### `http` subcommands now keep track of redirects ([#16078](https://github.com/nushell/nushell/pull/16078))
+
+The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
+
+```ansi
+[38;5;14m> [1m[36mhttp get[22m[39m [1m[34m--full[22m[39m [32mhttp://nushell.sh[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32murls[39m
+╭───┬────────────────────────╮
+│ [1m[32m0[22m[39m │ http://nushell.sh/ │
+│ [1m[32m1[22m[39m │ http://www.nushell.sh/ │
+╰───┴────────────────────────╯[0m
+```
+
+::: note
+This may break edge cases which relied on a lack of a `urls` column, for example:
```nushell
-$env.config.keybindings ++=
- [{
- name: modechangetest
- modifier: control
- keycode: "char_["
- mode: [vi_normal, vi_insert]
- event: {send: vichangemode, mode: normal}
- }]
+{urls: important} | merge (http get --full <...>)
```
-The available modifiers and keycodes, remain limited to single character bindings with modifiers. We don't yet provide access to the key-chord parsing of the vi mode.
+:::
+
+### New `random choice` command in `std-rfc` ([#16270](https://github.com/nushell/nushell/pull/16270))
+
+The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd-rfc/random[38;5;14m
+> [1m[36m[[35m1[36m [35m2[36m [35m3[36m [35m4[36m [35m5[36m][22m[39m [1m[35m|[22m[39m [1m[36mrandom choice[22m[39m [1m[35m2[22m[39m
+╭───┬───╮
+│ [1m[32m0[22m[39m │ 1 │
+│ [1m[32m1[22m[39m │ 3 │
+╰───┴───╯[0m
+```
+
+### Add `str align` to `std-rfc/str` ([#16062](https://github.com/nushell/nushell/pull/16062))
+
+The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd-rfc/str[38;5;14m
+> [1m[36m[ [22m[32m"one = 1"[1m[36m, [22m[32m"two = 2"[1m[36m, [22m[32m"three = 3"[1m[36m, [22m[32m"four = 4"[1m[36m, [22m[32m"five = 5"[1m[36m ][22m[39m [1m[35m|[22m[39m [1m[36mstr align[22m[39m [32m'='[39m
+one = 1
+two = 2
+three = 3
+four = 4
+five = 5[0m
+```
### JSON column support for `stor` and `query db` ([#16258](https://github.com/nushell/nushell/pull/16258))
@@ -302,70 +358,6 @@ Here's an example of storing a simple table inside a `stor` database, and retrie
╰───┴───────────╯[0m
```
-### New `random choice` command in `std-rfc` ([#16270](https://github.com/nushell/nushell/pull/16270))
-
-The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
-
-```ansi
-[38;5;14m> [1m[36muse[22m[39m [32mstd-rfc/random[38;5;14m
-> [1m[36m[[35m1[36m [35m2[36m [35m3[36m [35m4[36m [35m5[36m][22m[39m [1m[35m|[22m[39m [1m[36mrandom choice[22m[39m [1m[35m2[22m[39m
-╭───┬───╮
-│ [1m[32m0[22m[39m │ 1 │
-│ [1m[32m1[22m[39m │ 3 │
-╰───┴───╯[0m
-```
-
-### Add `str align` to `std-rfc/str` ([#16062](https://github.com/nushell/nushell/pull/16062))
-
-The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
-
-```ansi
-[38;5;14m> [1m[36muse[22m[39m [32mstd-rfc/str[38;5;14m
-> [1m[36m[ [22m[32m"one = 1"[1m[36m, [22m[32m"two = 2"[1m[36m, [22m[32m"three = 3"[1m[36m, [22m[32m"four = 4"[1m[36m, [22m[32m"five = 5"[1m[36m ][22m[39m [1m[35m|[22m[39m [1m[36mstr align[22m[39m [32m'='[39m
-one = 1
-two = 2
-three = 3
-four = 4
-five = 5[0m
-```
-
-### Spread `null` into collections or arguments ([#16399](https://github.com/nushell/nushell/pull/16399))
-
-`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
-
-```ansi
-[38;5;14m> [1m[36m[ [35m1[36m [35m2[36m [22m[33m...[1m[34m([22m[96mnull[1m[34m)[36m ][22m[39m [33m==[39m [1m[36m[ [35m1[36m [35m2[36m ][22m[39m
-true[38;5;14m
-> [1m[36m{ [22m[32ma[1m[36m:[35m1[36m [22m[32mb[1m[36m:[35m2[36m [22m[33m...[1m[34m([22m[96mnull[1m[34m)[36m }[22m[39m [33m==[39m [1m[36m{ [22m[32ma[1m[36m:[35m1[36m [22m[32mb[1m[36m:[35m2[36m }[22m[39m
-true[0m
-```
-
-### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401](https://github.com/nushell/nushell/pull/16401))
-
-`get`, `select`, `reject` commands now have a `--ignore-case` flag, which makes the commands interpret all cell-path arguments as completely case insensitive.
-
-### `watch` streams events ([#16428](https://github.com/nushell/nushell/pull/16428))
-
-`watch` command can now be used to _return a stream_ of detected events instead of calling a closure with it's information, though using a closure is still possible and existing uses won't break.
-
-In addition to this:
-
-```nushell
-watch . {|operation, path, new_path|
- if $operation == "Write" and $path like "*.md" {
- md-lint $path
- }
-}
-```
-
-Now this is also possible:
-
-```nushell
-watch .
-| where operation == Write and path like "*.md"
-| each { md-lint $in.path }
-```
-
### Extend nodeset output formats for `query xml` ([#16465](github.com/nushell/nushell/pull/16465))
`query xml` now can output additional information when it returns Nodesets:
@@ -376,55 +368,62 @@ watch .
If you're using any of the `--output-*` switches, and want `string_value` column to show up, pass `--output-string-value` explicitly. In the absence of any `--output-*` attributes, `--output-string-value` is assumed to be on.
-### `--endian` flag for `into binary` ([#16466](https://github.com/nushell/nushell/pull/16466))
+### New keybinding: `vichangemode` ([#16327](https://github.com/nushell/nushell/pull/16327))
-Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
+You can now set bindings which change the Vi mode.
+To do so send a `vichangemode` event with the `mode` field to set `normal`, `insert`, or `visual`
-```ansi
-[38;5;14m> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36minto binary[22m[39m [1m[34m--endian[22m[39m [32mlittle[39m
-Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33mnon_ascii[22m[36m
-00000000[39m: [1m[35m02[22m[39m [1m[35m01[22m[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [1m[35m••[22m[38;5;242m000000[38;5;14m
-> [1m[35m258[22m[39m [1m[35m|[22m[39m [1m[36minto binary[22m[39m [1m[34m--endian[22m[39m [32mbig[39m
-Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33mnon_ascii[22m[36m
-00000000[39m: [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [38;5;242m00[39m [1m[35m01[22m[39m [1m[35m02[22m[39m [38;5;242m000000[1m[35m••[0m
+```nushell
+$env.config.keybindings ++=
+ [{
+ name: modechangetest
+ modifier: control
+ keycode: "char_["
+ mode: [vi_normal, vi_insert]
+ event: {send: vichangemode, mode: normal}
+ }]
```
-Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
-
-
-### `http` subcommands now keep track of redirects ([#16078](https://github.com/nushell/nushell/pull/16078))
-
-The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
+The available modifiers and keycodes, remain limited to single character bindings with modifiers. We don't yet provide access to the key-chord parsing of the vi mode.
-```ansi
-[38;5;14m> [1m[36mhttp get[22m[39m [1m[34m--full[22m[39m [32mhttp://nushell.sh[39m [1m[35m|[22m[39m [1m[36mget[22m[39m [32murls[39m
-╭───┬────────────────────────╮
-│ [1m[32m0[22m[39m │ http://nushell.sh/ │
-│ [1m[32m1[22m[39m │ http://www.nushell.sh/ │
-╰───┴────────────────────────╯[0m
-```
+### Add `-h/--help` flag to testbin ([#16196](https://github.com/nushell/nushell/pull/16196))
-::: note
-This may break edge cases which relied on a lack of a `urls` column, for example:
+`nu --testbin` has a new flag `-h` to show available \
-```nushell
-{urls: important} | merge (http get --full <...>)
+```ansi:collapsed-lines=4
+[38;5;14m> [36mnu[39m [1m[32m--testbin[22m[39m [1m[32m-h[22m[39m
+Usage: nu --testbin
+:
+chop -> With no parameters, will chop a character off the end of each line
+cococo -> Cross platform echo using println!()(e.g: nu --testbin cococo a b c)
+echo_env -> Echo's value of env keys from args(e.g: nu --testbin echo_env FOO BAR)
+echo_env_mixed -> Mix echo of env keys from input(e.g: nu --testbin echo_env_mixed out-err FOO BAR; nu --testbin echo_env_mixed err-out FOO BAR)
+echo_env_stderr -> Echo's value of env keys from args to stderr(e.g: nu --testbin echo_env_stderr FOO BAR)
+echo_env_stderr_fail -> Echo's value of env keys from args to stderr, and exit with failure(e.g: nu --testbin echo_env_stderr_fail FOO BAR)
+fail -> Exits with failure code 1(e.g: nu --testbin fail)
+iecho -> Another type of echo that outputs a parameter per line, looping infinitely(e.g: nu --testbin iecho 3)
+input_bytes_length -> Prints the number of bytes received on stdin(e.g: 0x[deadbeef] | nu --testbin input_bytes_length)
+meow -> Cross platform cat (open a file, print the contents) using read_to_string and println!()(e.g: nu --testbin meow file.txt)
+meowb -> Cross platform cat (open a file, print the contents) using read() and write_all() / binary(e.g: nu --testbin meowb sample.db)
+nonu -> Cross platform echo but concats arguments without space and NO newline(e.g: nu --testbin nonu a b c)
+nu_repl -> Run a REPL with the given source lines, it must be called with `--testbin=nu_repl`, `--testbin nu_repl` will not work due to argument count logic
+relay -> Relays anything received on stdin to stdout(e.g: 0x[beef] | nu --testbin relay)
+repeat_bytes -> A version of repeater that can output binary data, even null bytes(e.g: nu --testbin repeat_bytes 003d9fbf 10)
+repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
```
-:::
-
### Other additions
-- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373](https://github.com/nushell/nushell/pull/16373))
+- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193](https://github.com/nushell/nushell/pull/16193))
- The `bench` command in the standard library now shows a progress bar (or spinner) on terminals which support `osc 9;4`. ([#16245](https://github.com/nushell/nushell/pull/16245))
-- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193](https://github.com/nushell/nushell/pull/16193))
-
-- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450](https://github.com/nushell/nushell/pull/16450))
+- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373](https://github.com/nushell/nushell/pull/16373))
- Added information to the `run-external` and `help` descriptions that indicates these commands or any with the same names are automatically used for running externals and the `--help` flags respectively. ([#16493](https://github.com/nushell/nushell/pull/16493))
+- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450](https://github.com/nushell/nushell/pull/16450))
+
## Deprecations
### Deprecate `watch --debounce-ms` ([#16187](https://github.com/nushell/nushell/pull/16187))
@@ -435,6 +434,33 @@ With the new [watch --debounce option](#new-watch-duration-option-toc), the `--d
## Other changes
+### `http` commands will now fail on invalid headers ([#16078](https://github.com/nushell/nushell/pull/16078))
+
+Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
+
+In one Nushell instance, we create something resembling an HTTP server on port 1234:
+
+```nu
+["HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: " 0x[1F FF AA AA] "\r\n\r\n"]
+| each { into binary }
+| bytes collect
+| ncat -l 1234
+```
+
+In another instance, we connect to port 1234. The `x-header` is not valid UTF-8, which now produces an error:
+
+```ansi
+[38;5;6m> [1;36mhttp get [34m--full --allow-errors [0m[32mhttp://localhost:1234[0m
+[39mError: [31mnu::shell::network_failure[0m
+
+ [31m× [39mNetwork failure[0m
+ [39m╭─[[1;4;36mentry #1:1:1[0m[39m][0m
+ [2;39m1 [0m[39m│ http get --full --allow-errors http://localhost:1234[0m
+ [39m· [1;35m────┬───[0m
+ [39m· [1;35m╰── protocol: http parse fail: invalid header value[0m
+ [39m╰────[0m
+```
+
### `http post` now sends body serialized as pretty json ([#16078](https://github.com/nushell/nushell/pull/16078))
Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
@@ -465,33 +491,6 @@ content-type: application/json; charset=utf-8
}
```
-### `http` commands will now fail on invalid headers ([#16078](https://github.com/nushell/nushell/pull/16078))
-
-Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
-
-In one Nushell instance, we create something resembling an HTTP server on port 1234:
-
-```nu
-["HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: " 0x[1F FF AA AA] "\r\n\r\n"]
-| each { into binary }
-| bytes collect
-| ncat -l 1234
-```
-
-In another instance, we connect to port 1234. The `x-header` is not valid UTF-8, which now produces an error:
-
-```ansi
-[38;5;6m> [1;36mhttp get [34m--full --allow-errors [0m[32mhttp://localhost:1234[0m
-[39mError: [31mnu::shell::network_failure[0m
-
- [31m× [39mNetwork failure[0m
- [39m╭─[[1;4;36mentry #1:1:1[0m[39m][0m
- [2;39m1 [0m[39m│ http get --full --allow-errors http://localhost:1234[0m
- [39m· [1;35m────┬───[0m
- [39m· [1;35m╰── protocol: http parse fail: invalid header value[0m
- [39m╰────[0m
-```
-
### Improved error messages for misspelled flags ([#16427](https://github.com/nushell/nushell/pull/16427))
Previously, the help text for a missing flag would list all of them, which could get verbose on a single line:
@@ -550,16 +549,42 @@ The following commands no longer preserve `content_type` element of the input me
### Additional changes
-- `format date` will respect `$env.LANG` and override it with `$env.LC_ALL`. ([#16369](https://github.com/nushell/nushell/pull/16369))
+- Trying to execute a non-existent script file used to return a confusing error pointing to an internal source code path. That error now points to the script file argument in the commandline. ([#16273](https://github.com/nushell/nushell/pull/16273))
-- `query xml` now has `xml:` namespace prefix available by default, without the need to specify it via `--namespaces`. ([#16472](https://github.com/nushell/nushell/pull/16472))
+- `format date` will respect `$env.LANG` and override it with `$env.LC_ALL`. ([#16369](https://github.com/nushell/nushell/pull/16369))
- Required named parameters will now always appear before regular named parameters/flags in the `help` output. ([#16476](https://github.com/nushell/nushell/pull/16476))
-- Trying to execute a non-existent script file used to return a confusing error pointing to an internal source code path. That error now points to the script file argument in the commandline. ([#16273](https://github.com/nushell/nushell/pull/16273))
+- `query xml` now has `xml:` namespace prefix available by default, without the need to specify it via `--namespaces`. ([#16472](https://github.com/nushell/nushell/pull/16472))
## Bug fixes
+### Fix highlighting of aliases to external commands ([#15408](https://github.com/nushell/nushell/pull/15408))
+
+Aliases to external commands will now be properly highlighted as external commands.
+
+```ansi:title="Behavior in 0.106.1"
+[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
+> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
+[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
+[0m[96m> [0;1m[34malias[0m [32mexternal-alias [0;1m[36m=[0m [0;1m[33mcoreutils[0m [0;1m[32mecho
+[0m[96m> [0;1m[34malias[0m [32munresolvable-alias [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [0;1m[34malias[0m [32mbash [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [32m"internal-alias; external-alias; unresolvable-alias; bash;" [0;1m[35m|[0m [0;1m[34mnu-highlight
+internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[33mbash[0m;
+```
+
+```ansi:title="Behavior in 0.107.0"
+[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
+> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
+[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
+[0m[96m> [0;1m[34malias[0m [32mexternal-alias [0;1m[36m=[0m [0;1m[33mcoreutils[0m [0;1m[32mecho
+[0m[96m> [0;1m[34malias[0m [32munresolvable-alias [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [0;1m[34malias[0m [32mbash [0;1m[36m=[0m [0;1m[31mnotacommand
+[0m[96m> [32m"internal-alias; external-alias; unresolvable-alias; bash;" [0;1m[35m|[0m [0;1m[34mnu-highlight
+internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[31mbash[0m;
+```
+
### `input list` Plays Nicely With Styled Input ([#16276](https://github.com/nushell/nushell/pull/16276))
`input list` had some trouble dealing with ANSI styled inputs, such as:
@@ -608,32 +633,6 @@ $env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false
KeyC ads
```
-### Fix highlighting of aliases to external commands ([#15408](https://github.com/nushell/nushell/pull/15408))
-
-Aliases to external commands will now be properly highlighted as external commands.
-
-```ansi:title="Behavior in 0.106.1"
-[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
-> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
-[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
-[0m[96m> [0;1m[34malias[0m [32mexternal-alias [0;1m[36m=[0m [0;1m[33mcoreutils[0m [0;1m[32mecho
-[0m[96m> [0;1m[34malias[0m [32munresolvable-alias [0;1m[36m=[0m [0;1m[31mnotacommand
-[0m[96m> [0;1m[34malias[0m [32mbash [0;1m[36m=[0m [0;1m[31mnotacommand
-[0m[96m> [32m"internal-alias; external-alias; unresolvable-alias; bash;" [0;1m[35m|[0m [0;1m[34mnu-highlight
-internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[33mbash[0m;
-```
-
-```ansi:title="Behavior in 0.107.0"
-[96m> [35m$env[39m.[32mconfig[39m.[32mhighlight_resolved_externals [33m= [96mtrue
-> [35m$env[39m.[32mconfig[39m.[32mcolor_config [33m= [0;1m[36m{ [0m[32mshape_external[0;1m[36m: [0m[32mred_bold[0;1m[36m, [0m[32mshape_external_resolved[0;1m[36m: [0m[32myellow_bold[0;1m[36m, [0m[32mshape_internalcall[0;1m[36m: [0m[32mblue_bold[0;1m[36m }[0m
-[0m[96m> [0;1m[34malias[0m [32minternal-alias [0;1m[36m=[0m [0;1m[34mecho
-[0m[96m> [0;1m[34malias[0m [32mexternal-alias [0;1m[36m=[0m [0;1m[33mcoreutils[0m [0;1m[32mecho
-[0m[96m> [0;1m[34malias[0m [32munresolvable-alias [0;1m[36m=[0m [0;1m[31mnotacommand
-[0m[96m> [0;1m[34malias[0m [32mbash [0;1m[36m=[0m [0;1m[31mnotacommand
-[0m[96m> [32m"internal-alias; external-alias; unresolvable-alias; bash;" [0;1m[35m|[0m [0;1m[34mnu-highlight
-internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[31mbash[0m;
-```
-
### Prevent `detect columns` from creating invalid records with duplicate keys ([#16527](https://github.com/nushell/nushell/pull/16527))
Previously `detect columns` created records (rows) with duplicate key names under some circumstances. The resulting table behaved inconsistently with different commands:
@@ -676,48 +675,50 @@ Added missing parent ('namespace') commands to improve error reporting:
- `query`
- `registry`
-### Other fixes
-
-- `where` should now error on row condition expressions which are not booleans ([#16175](https://github.com/nushell/nushell/pull/16175))
-- Stepped range literals where `..=` precedes the second value no longer cause a parser panic. e.g: `random int 1..=3..5` ([#16231](https://github.com/nushell/nushell/pull/16231))
+### Other fixes
-- The gstat plugin will show correct branch in detached HEAD if commit hash starts with 0 ([#16309](https://github.com/nushell/nushell/pull/16309))
+- Short flags which require a value should now properly be tracked by the parser. Previously, something like the `-a` in `table -a` wouldn't be properly highlighted if no value for `-a` was provided. This also means that the `ast` command will now properly account for these flags. ([#16376](https://github.com/nushell/nushell/pull/16376))
- Parse-time pipeline type checking now properly supports commands with multiple pipeline output types for the same pipeline input type. ([#16111](https://github.com/nushell/nushell/pull/16111))
-- In `explore`, cursor position and search highlighting works better on non-ASCII characters. ([#16325](https://github.com/nushell/nushell/pull/16325))
-
-- `path relative-to` works better for case-insensitive filesystems, this works on `Windowes` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
-
-- `std help` displays better on binary examples. ([#16354](https://github.com/nushell/nushell/pull/16354))
+- Previously, a record key `=` would not be quoted in `to nuon`, producing invalid nuon output. It wasn't quoted in other string values either, but it didn't cause problems there. Now any string containing `=` gets quoted. ([#16440](https://github.com/nushell/nushell/pull/16440))
-- `into sqlite` will respect `$env.PWD` rather than current working directory. ([#16349](https://github.com/nushell/nushell/pull/16349))
-- Arguments to external commands with subexpressions like `^/bin/echo ProxyCommand=($'hello')` are now parsed correctly ([#16346](https://github.com/nushell/nushell/pull/16346))
+- `path relative-to` works better for case-insensitive filesystems, this works on `Windows` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
-- The index column in a table will get a highlight color if `$env.config.table.header_on_separator = true` ([#16377](https://github.com/nushell/nushell/pull/16377))
+- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410](https://github.com/nushell/nushell/pull/16410))
- Errors which reference values originating from command examples in the output of `scope commands` should now be less confusing. ([#16395](https://github.com/nushell/nushell/pull/16395))
-- Short flags which require a value should now properly be tracked by the parser. Previously, something like the `-a` in `table -a` wouldn't be properly highlighted if no value for `-a` was provided. This also means that the `ast` command will now properly account for these flags. ([#16376](https://github.com/nushell/nushell/pull/16376))
+- `where` should now error at parse-time on row condition expressions which are not booleans, in addition to at run-time ([#16175](https://github.com/nushell/nushell/pull/16175))
-- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410](https://github.com/nushell/nushell/pull/16410))
+- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393](https://github.com/nushell/nushell/pull/16393))
- Type errors involving boolean literals are now more precise. ([#16408](https://github.com/nushell/nushell/pull/16408))
-- Interrupting a script with `ctrl-c` now properly kills background jobs on exit. ([#16285](https://github.com/nushell/nushell/pull/16285))
+- Stepped range literals where `..=` precedes the second value no longer cause a parser panic. e.g: `random int 1..=3..5` ([#16231](https://github.com/nushell/nushell/pull/16231))
-- Previously, a record key `=` would not be quoted in `to nuon`, producing invalid nuon output. It wasn't quoted in other string values either, but it didn't cause problems there. Now any string containing `=` gets quoted. ([#16440](https://github.com/nushell/nushell/pull/16440))
+- Arguments to external commands with subexpressions like `^/bin/echo ProxyCommand=($'hello')` are now parsed correctly ([#16346](https://github.com/nushell/nushell/pull/16346))
-- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393](https://github.com/nushell/nushell/pull/16393))
+- The index column in a table will get a highlight color if `$env.config.table.header_on_separator = true` ([#16377](https://github.com/nushell/nushell/pull/16377))
+
+- In `explore`, cursor position and search highlighting works better on non-ASCII characters. ([#16325](https://github.com/nushell/nushell/pull/16325))
+
+- The gstat plugin will show correct branch in detached HEAD if commit hash starts with 0 ([#16309](https://github.com/nushell/nushell/pull/16309))
+
+- Interrupting a script with `ctrl-c` now properly kills background jobs on exit. ([#16285](https://github.com/nushell/nushell/pull/16285))
- Argument variables for custom commands no longer leak outside of their scope. ([#16262](https://github.com/nushell/nushell/pull/16262))
-- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444](https://github.com/nushell/nushell/pull/16444))
+- `into sqlite` will respect `$env.PWD` rather than current working directory. ([#16349](https://github.com/nushell/nushell/pull/16349))
+
+- `std help` displays better on binary examples. ([#16354](https://github.com/nushell/nushell/pull/16354))
- Using `polars open --type tsv` will now correctly use tabs as the delimiter. ([#16524](https://github.com/nushell/nushell/pull/16524))
+- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444](https://github.com/nushell/nushell/pull/16444))
+
# Notes for plugin developers
# Hall of fame
From 2cc814f015d6c9c42ce6457d89de0f8e7cb93e33 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:16:40 -0400
Subject: [PATCH 16/24] Move random/dice change from Breaking changes to Other
changes
---
blog/2025-09-02-nushell_0_107_0.md | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 7052c4fbb14..7962156bf6d 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -100,20 +100,6 @@ nothing[38;5;14m
>[0m
```
-### `random dice` moved to `std` ([#16420](https://github.com/nushell/nushell/pull/16420))
-
-The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
-
-```ansi
-[38;5;14m> [1m[36muse[22m[39m [32mstd/random[38;5;14m
-> [1m[36mrandom dice[22m[39m
-╭───┬───╮
-│ [1m[32m0[22m[39m │ 6 │
-╰───┴───╯[0m
-```
-
-It's behavior, parameters, and defaults are the same.
-
### Change the output of `format bits` to big endian instead of native endian ([#16435](https://github.com/nushell/nushell/pull/16435))
While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
@@ -434,6 +420,20 @@ With the new [watch --debounce option](#new-watch-duration-option-toc), the `--d
## Other changes
+### `random dice` moved to `std` ([#16420](https://github.com/nushell/nushell/pull/16420))
+
+The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
+
+```ansi
+[38;5;14m> [1m[36muse[22m[39m [32mstd/random[38;5;14m
+> [1m[36mrandom dice[22m[39m
+╭───┬───╮
+│ [1m[32m0[22m[39m │ 6 │
+╰───┴───╯[0m
+```
+
+It's behavior, parameters, and defaults are the same.
+
### `http` commands will now fail on invalid headers ([#16078](https://github.com/nushell/nushell/pull/16078))
Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
From bb64d579eb1540c1ed60df5b762897f4b93e5e6b Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:18:24 -0400
Subject: [PATCH 17/24] Add note under deprecations about random dice
---
blog/2025-09-02-nushell_0_107_0.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 7962156bf6d..26ba716cc65 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -412,6 +412,10 @@ repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
## Deprecations
+### Built-in `random dice` deprecated
+
+With `random dice` being moved to `std`, the built-in command is no longer necessary. See [`random dice` moved to `std`](#random-dice-moved-to-std-16420) for more information.
+
### Deprecate `watch --debounce-ms` ([#16187](https://github.com/nushell/nushell/pull/16187))
> TODO(release-notes): verify link works after generating ToC
From c67c78ced6e6994c0bec943a65382a15ade13945 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:32:01 -0400
Subject: [PATCH 18/24] Highlight error fixes in their own section
---
blog/2025-09-02-nushell_0_107_0.md | 37 +++++++++++++++---------------
1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 26ba716cc65..27ee92bb6b6 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -669,16 +669,28 @@ Error: [31mnu::shell::failed_to_detect_columns
╰────[0m
```
-### Improve errors for subcommands without a corresponding parent command ([#16529](https://github.com/nushell/nushell/pull/16529))
+### Improvements to errors
-Added missing parent ('namespace') commands to improve error reporting:
+This release has a number of improvements to errors in specific circumstances:
-- `attr`
-- `detect`
-- `error`
-- `query`
-- `registry`
+- Improve errors for subcommands without a corresponding parent command ([#16529](https://github.com/nushell/nushell/pull/16529))
+
+ Added missing parent ('namespace') commands to improve error reporting:
+ - `attr`
+ - `detect`
+ - `error`
+ - `query`
+ - `registry`
+- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410](https://github.com/nushell/nushell/pull/16410))
+
+- Errors which reference values originating from command examples in the output of `scope commands` should now be less confusing. ([#16395](https://github.com/nushell/nushell/pull/16395))
+
+- `where` should now error at parse-time on row condition expressions which are not booleans, in addition to at run-time ([#16175](https://github.com/nushell/nushell/pull/16175))
+
+- Type errors involving boolean literals are now more precise. ([#16408](https://github.com/nushell/nushell/pull/16408))
+
+- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393](https://github.com/nushell/nushell/pull/16393))
### Other fixes
@@ -688,19 +700,8 @@ Added missing parent ('namespace') commands to improve error reporting:
- Previously, a record key `=` would not be quoted in `to nuon`, producing invalid nuon output. It wasn't quoted in other string values either, but it didn't cause problems there. Now any string containing `=` gets quoted. ([#16440](https://github.com/nushell/nushell/pull/16440))
-
- `path relative-to` works better for case-insensitive filesystems, this works on `Windows` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
-- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410](https://github.com/nushell/nushell/pull/16410))
-
-- Errors which reference values originating from command examples in the output of `scope commands` should now be less confusing. ([#16395](https://github.com/nushell/nushell/pull/16395))
-
-- `where` should now error at parse-time on row condition expressions which are not booleans, in addition to at run-time ([#16175](https://github.com/nushell/nushell/pull/16175))
-
-- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393](https://github.com/nushell/nushell/pull/16393))
-
-- Type errors involving boolean literals are now more precise. ([#16408](https://github.com/nushell/nushell/pull/16408))
-
- Stepped range literals where `..=` precedes the second value no longer cause a parser panic. e.g: `random int 1..=3..5` ([#16231](https://github.com/nushell/nushell/pull/16231))
- Arguments to external commands with subexpressions like `^/bin/echo ProxyCommand=($'hello')` are now parsed correctly ([#16346](https://github.com/nushell/nushell/pull/16346))
From 844fae7ee584d686e193694e29e6bbc60f62816e Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:38:08 -0400
Subject: [PATCH 19/24] Remove notes for plugin developers
---
blog/2025-09-02-nushell_0_107_0.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 27ee92bb6b6..0df00c61dac 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -724,8 +724,6 @@ This release has a number of improvements to errors in specific circumstances:
- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444](https://github.com/nushell/nushell/pull/16444))
-# 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:
From 83bfddf13e2f817c80ee95a68fd8007af56c9e03 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:44:20 -0400
Subject: [PATCH 20/24] Make links to authors and PRs references
---
blog/2025-09-02-nushell_0_107_0.md | 590 ++++++++++++++++++-----------
1 file changed, 369 insertions(+), 221 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 0df00c61dac..e4a3500aae6 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -46,7 +46,7 @@ As part of this release, we also publish a set of optional [plugins](https://www
## Breaking changes
-### `find` is now case-sensitive by default ([#16323](https://github.com/nushell/nushell/pull/16323))
+### `find` is now case-sensitive by default ([#16323])
The `find` command is now case-sensitive by default in all modes. Previously, you could use the `--ignore-case` flag to make `find` case-insensitive in the `--regex` mode, but the default "search term mode" would always be case-insensitive. Now, both modes are case-sensitive by default, and you can use the `--ignore-case` flag to make them case-insensitive.
@@ -61,7 +61,7 @@ alias find = find -i
:::
-### New behavior for `find --multiline` ([#16323](https://github.com/nushell/nushell/pull/16323))
+### New behavior for `find --multiline` ([#16323])
Previously, `find` would always split multi-line input strings, making it impossible to perform proper multi-line regex matches unless a string was within list, table, or record. Now, the `--multiline` flag can be used to prevent this splitting, replacing its previous behavior of prepending `(?m)` to the regex.
@@ -78,7 +78,7 @@ hel[41mlo
wo[49mrl[0m
```
-### `each` now passes through `null` input ([#16396](https://github.com/nushell/nushell/pull/16396))
+### `each` now passes through `null` input ([#16396])
When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
For example, before this change:
@@ -100,7 +100,7 @@ nothing[38;5;14m
>[0m
```
-### Change the output of `format bits` to big endian instead of native endian ([#16435](https://github.com/nushell/nushell/pull/16435))
+### Change the output of `format bits` to big endian instead of native endian ([#16435])
While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
@@ -123,7 +123,7 @@ Now, `format bits` always formats in big endian:
00000001 00000010[0m
```
-### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt` ([#16356](https://github.com/nushell/nushell/pull/16356))
+### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt` ([#16356])
Before this release `env_change` hooks would execute _after_ `pre_prompt` hooks, and the prompt would be rendered after `env_change` hooks.
@@ -135,7 +135,7 @@ Now, order of execution is as follows:
- `pre_prompt` hooks
- Rendering the prompt with `PROMPT_COMMAND`
-### `query xml` returns scalar results when possible ([#16459](https://github.com/nushell/nushell/pull/16459))
+### `query xml` returns scalar results when possible ([#16459])
Previously, `query xml` always returned a table, even for scalar results. Now scalar results will be returned as scalars.
@@ -158,7 +158,7 @@ Before this change, this would return:
Now, this will just return `false`.
-### Use fixed column name for `query xml` output ([#16461](https://github.com/nushell/nushell/pull/16461))
+### Use fixed column name for `query xml` output ([#16461])
Previously, the `query xml` command outputs nodeset results in a table with a column name corresponding to the input expression. Now, the column name is fixed. This should make it easier to extract values from the output of `query xml`.
@@ -188,7 +188,7 @@ open -r tests/fixtures/formats/jt.xml
# => ╰───┴───────────────────────────────────────────╯
```
-### Add active column to `overlay list` ([#16125](https://github.com/nushell/nushell/pull/16125))
+### Add active column to `overlay list` ([#16125])
`overlay list` now returns table instead of list of overlays. Before, only active overlays were included in `overlay list`. Now, hidden overlays will be included as well, and there is a column indicating whether a given overlay is hidden or not.
@@ -199,7 +199,7 @@ For migrating to the new behavior, you can update any usages of `overlay list |
## Additions
-### `watch` streams events ([#16428](https://github.com/nushell/nushell/pull/16428))
+### `watch` streams events ([#16428])
`watch` command can now be used to _return a stream_ of detected events instead of calling a closure with it's information, though using a closure is still possible and existing uses won't break.
@@ -221,16 +221,16 @@ watch .
| each { md-lint $in.path }
```
-### New `watch --debounce` option ([#16187](https://github.com/nushell/nushell/pull/16187))
+### New `watch --debounce` option ([#16187])
The `watch` command now has `--debounce` flag, which takes a duration value. This will replace the `--debounce-ms` flag which takes an int rather than a duration, and will eventually take over its `-d` short flag.
-### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401](https://github.com/nushell/nushell/pull/16401))
+### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401])
`get`, `select`, `reject` commands now have a `--ignore-case` flag, which makes the commands interpret all cell-path arguments as completely case insensitive.
-### `--endian` flag for `into binary` ([#16466](https://github.com/nushell/nushell/pull/16466))
+### `--endian` flag for `into binary` ([#16466])
Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
@@ -245,7 +245,7 @@ Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33
Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
-### Spread `null` into collections or arguments ([#16399](https://github.com/nushell/nushell/pull/16399))
+### Spread `null` into collections or arguments ([#16399])
`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
@@ -256,7 +256,7 @@ true[38;5;14m
true[0m
```
-### `http` subcommands now keep track of redirects ([#16078](https://github.com/nushell/nushell/pull/16078))
+### `http` subcommands now keep track of redirects ([#16078])
The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
@@ -277,7 +277,7 @@ This may break edge cases which relied on a lack of a `urls` column, for example
:::
-### New `random choice` command in `std-rfc` ([#16270](https://github.com/nushell/nushell/pull/16270))
+### New `random choice` command in `std-rfc` ([#16270])
The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
@@ -290,7 +290,7 @@ The `random choice` command has been added as a new candidate for our standard l
╰───┴───╯[0m
```
-### Add `str align` to `std-rfc/str` ([#16062](https://github.com/nushell/nushell/pull/16062))
+### Add `str align` to `std-rfc/str` ([#16062])
The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
@@ -304,7 +304,7 @@ four = 4
five = 5[0m
```
-### JSON column support for `stor` and `query db` ([#16258](https://github.com/nushell/nushell/pull/16258))
+### JSON column support for `stor` and `query db` ([#16258])
The `stor create/insert/open` and `query db` commands now support JSON and JSONB columns. This lets you store more kinds of structured data directly inside of an SQLite database without an explicit `to`/`from` step.
@@ -344,7 +344,7 @@ Here's an example of storing a simple table inside a `stor` database, and retrie
╰───┴───────────╯[0m
```
-### Extend nodeset output formats for `query xml` ([#16465](github.com/nushell/nushell/pull/16465))
+### Extend nodeset output formats for `query xml` ([#16465])
`query xml` now can output additional information when it returns Nodesets:
@@ -354,7 +354,7 @@ Here's an example of storing a simple table inside a `stor` database, and retrie
If you're using any of the `--output-*` switches, and want `string_value` column to show up, pass `--output-string-value` explicitly. In the absence of any `--output-*` attributes, `--output-string-value` is assumed to be on.
-### New keybinding: `vichangemode` ([#16327](https://github.com/nushell/nushell/pull/16327))
+### New keybinding: `vichangemode` ([#16327])
You can now set bindings which change the Vi mode.
To do so send a `vichangemode` event with the `mode` field to set `normal`, `insert`, or `visual`
@@ -372,7 +372,7 @@ $env.config.keybindings ++=
The available modifiers and keycodes, remain limited to single character bindings with modifiers. We don't yet provide access to the key-chord parsing of the vi mode.
-### Add `-h/--help` flag to testbin ([#16196](https://github.com/nushell/nushell/pull/16196))
+### Add `-h/--help` flag to testbin ([#16196])
`nu --testbin` has a new flag `-h` to show available \
@@ -400,15 +400,15 @@ repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
### Other additions
-- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193](https://github.com/nushell/nushell/pull/16193))
+- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193])
-- The `bench` command in the standard library now shows a progress bar (or spinner) on terminals which support `osc 9;4`. ([#16245](https://github.com/nushell/nushell/pull/16245))
+- The `bench` command in the standard library now shows a progress bar (or spinner) on terminals which support `osc 9;4`. ([#16245])
-- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373](https://github.com/nushell/nushell/pull/16373))
+- The `to html` command has a new `--raw` flag, which doesn't escape HTML tags in the input. ([#16373])
-- Added information to the `run-external` and `help` descriptions that indicates these commands or any with the same names are automatically used for running externals and the `--help` flags respectively. ([#16493](https://github.com/nushell/nushell/pull/16493))
+- Added information to the `run-external` and `help` descriptions that indicates these commands or any with the same names are automatically used for running externals and the `--help` flags respectively. ([#16493])
-- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450](https://github.com/nushell/nushell/pull/16450))
+- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450])
## Deprecations
@@ -416,7 +416,7 @@ repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
With `random dice` being moved to `std`, the built-in command is no longer necessary. See [`random dice` moved to `std`](#random-dice-moved-to-std-16420) for more information.
-### Deprecate `watch --debounce-ms` ([#16187](https://github.com/nushell/nushell/pull/16187))
+### Deprecate `watch --debounce-ms` ([#16187])
> TODO(release-notes): verify link works after generating ToC
@@ -424,7 +424,7 @@ With the new [watch --debounce option](#new-watch-duration-option-toc), the `--d
## Other changes
-### `random dice` moved to `std` ([#16420](https://github.com/nushell/nushell/pull/16420))
+### `random dice` moved to `std` ([#16420])
The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
@@ -438,7 +438,7 @@ The `random dice` command has been rewritten in Nushell and moved to the standar
It's behavior, parameters, and defaults are the same.
-### `http` commands will now fail on invalid headers ([#16078](https://github.com/nushell/nushell/pull/16078))
+### `http` commands will now fail on invalid headers ([#16078])
Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
@@ -465,7 +465,7 @@ In another instance, we connect to port 1234. The `x-header` is not valid UTF-8,
[39m╰────[0m
```
-### `http post` now sends body serialized as pretty json ([#16078](https://github.com/nushell/nushell/pull/16078))
+### `http post` now sends body serialized as pretty json ([#16078])
Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
@@ -495,7 +495,7 @@ content-type: application/json; charset=utf-8
}
```
-### Improved error messages for misspelled flags ([#16427](https://github.com/nushell/nushell/pull/16427))
+### Improved error messages for misspelled flags ([#16427])
Previously, the help text for a missing flag would list all of them, which could get verbose on a single line:
@@ -528,7 +528,7 @@ Error: [31mnu::parser::unknown_flag
help: [39mDid you mean: `--full-paths`?[0m
```
-### Improved default color theme ([#16509](https://github.com/nushell/nushell/pull/16509))
+### Improved default color theme ([#16509])
We changed the default theme to use the ANSI default color (`39m`) instead of white (`37m`).
This finally makes the default theme usable in the context of light terminal color settings. On dark terminal palettes this change should have no impact.
@@ -540,7 +540,7 @@ Comparison of white vs default color on Solarized Light theme, before and after:
-### Reset content type for commands returning partial input ([#16500](https://github.com/nushell/nushell/pull/16500))
+### Reset content type for commands returning partial input ([#16500])
The following commands no longer preserve `content_type` element of the input metadata:
@@ -553,17 +553,17 @@ The following commands no longer preserve `content_type` element of the input me
### Additional changes
-- Trying to execute a non-existent script file used to return a confusing error pointing to an internal source code path. That error now points to the script file argument in the commandline. ([#16273](https://github.com/nushell/nushell/pull/16273))
+- Trying to execute a non-existent script file used to return a confusing error pointing to an internal source code path. That error now points to the script file argument in the commandline. ([#16273])
-- `format date` will respect `$env.LANG` and override it with `$env.LC_ALL`. ([#16369](https://github.com/nushell/nushell/pull/16369))
+- `format date` will respect `$env.LANG` and override it with `$env.LC_ALL`. ([#16369])
-- Required named parameters will now always appear before regular named parameters/flags in the `help` output. ([#16476](https://github.com/nushell/nushell/pull/16476))
+- Required named parameters will now always appear before regular named parameters/flags in the `help` output. ([#16476])
-- `query xml` now has `xml:` namespace prefix available by default, without the need to specify it via `--namespaces`. ([#16472](https://github.com/nushell/nushell/pull/16472))
+- `query xml` now has `xml:` namespace prefix available by default, without the need to specify it via `--namespaces`. ([#16472])
## Bug fixes
-### Fix highlighting of aliases to external commands ([#15408](https://github.com/nushell/nushell/pull/15408))
+### Fix highlighting of aliases to external commands ([#15408])
Aliases to external commands will now be properly highlighted as external commands.
@@ -589,7 +589,7 @@ internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias
internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[31mbash[0m;
```
-### `input list` Plays Nicely With Styled Input ([#16276](https://github.com/nushell/nushell/pull/16276))
+### `input list` Plays Nicely With Styled Input ([#16276])
`input list` had some trouble dealing with ANSI styled inputs, such as:
@@ -608,7 +608,7 @@ Here's a before/after comparison:
[fuzzy-before]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-before.svg
[fuzzy-fixed]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-after.svg
-### Fixed spacing of `help` examples ([#16353](https://github.com/nushell/nushell/pull/16353))
+### Fixed spacing of `help` examples ([#16353])
`help` command used to trim the outputs of examples, which could result in inconsistent white space:
@@ -637,7 +637,7 @@ $env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false
KeyC ads
```
-### Prevent `detect columns` from creating invalid records with duplicate keys ([#16527](https://github.com/nushell/nushell/pull/16527))
+### Prevent `detect columns` from creating invalid records with duplicate keys ([#16527])
Previously `detect columns` created records (rows) with duplicate key names under some circumstances. The resulting table behaved inconsistently with different commands:
@@ -673,7 +673,7 @@ Error: [31mnu::shell::failed_to_detect_columns
This release has a number of improvements to errors in specific circumstances:
-- Improve errors for subcommands without a corresponding parent command ([#16529](https://github.com/nushell/nushell/pull/16529))
+- Improve errors for subcommands without a corresponding parent command ([#16529])
Added missing parent ('namespace') commands to improve error reporting:
- `attr`
@@ -682,47 +682,47 @@ This release has a number of improvements to errors in specific circumstances:
- `query`
- `registry`
-- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410](https://github.com/nushell/nushell/pull/16410))
+- Before, attempting to run an external command when `$env.PATH` was not set could result in a confusing error. This release improves the error. ([#16410])
-- Errors which reference values originating from command examples in the output of `scope commands` should now be less confusing. ([#16395](https://github.com/nushell/nushell/pull/16395))
+- Errors which reference values originating from command examples in the output of `scope commands` should now be less confusing. ([#16395])
-- `where` should now error at parse-time on row condition expressions which are not booleans, in addition to at run-time ([#16175](https://github.com/nushell/nushell/pull/16175))
+- `where` should now error at parse-time on row condition expressions which are not booleans, in addition to at run-time ([#16175])
-- Type errors involving boolean literals are now more precise. ([#16408](https://github.com/nushell/nushell/pull/16408))
+- Type errors involving boolean literals are now more precise. ([#16408])
-- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393](https://github.com/nushell/nushell/pull/16393))
+- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393])
### Other fixes
-- Short flags which require a value should now properly be tracked by the parser. Previously, something like the `-a` in `table -a` wouldn't be properly highlighted if no value for `-a` was provided. This also means that the `ast` command will now properly account for these flags. ([#16376](https://github.com/nushell/nushell/pull/16376))
+- Short flags which require a value should now properly be tracked by the parser. Previously, something like the `-a` in `table -a` wouldn't be properly highlighted if no value for `-a` was provided. This also means that the `ast` command will now properly account for these flags. ([#16376])
-- Parse-time pipeline type checking now properly supports commands with multiple pipeline output types for the same pipeline input type. ([#16111](https://github.com/nushell/nushell/pull/16111))
+- Parse-time pipeline type checking now properly supports commands with multiple pipeline output types for the same pipeline input type. ([#16111])
-- Previously, a record key `=` would not be quoted in `to nuon`, producing invalid nuon output. It wasn't quoted in other string values either, but it didn't cause problems there. Now any string containing `=` gets quoted. ([#16440](https://github.com/nushell/nushell/pull/16440))
+- Previously, a record key `=` would not be quoted in `to nuon`, producing invalid nuon output. It wasn't quoted in other string values either, but it didn't cause problems there. Now any string containing `=` gets quoted. ([#16440])
-- `path relative-to` works better for case-insensitive filesystems, this works on `Windows` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310](https://github.com/nushell/nushell/pull/16310))
+- `path relative-to` works better for case-insensitive filesystems, this works on `Windows` or `macOS`: `"/etc" | path relative-to "/Etc"` ([#16310])
-- Stepped range literals where `..=` precedes the second value no longer cause a parser panic. e.g: `random int 1..=3..5` ([#16231](https://github.com/nushell/nushell/pull/16231))
+- Stepped range literals where `..=` precedes the second value no longer cause a parser panic. e.g: `random int 1..=3..5` ([#16231])
-- Arguments to external commands with subexpressions like `^/bin/echo ProxyCommand=($'hello')` are now parsed correctly ([#16346](https://github.com/nushell/nushell/pull/16346))
+- Arguments to external commands with subexpressions like `^/bin/echo ProxyCommand=($'hello')` are now parsed correctly ([#16346])
-- The index column in a table will get a highlight color if `$env.config.table.header_on_separator = true` ([#16377](https://github.com/nushell/nushell/pull/16377))
+- The index column in a table will get a highlight color if `$env.config.table.header_on_separator = true` ([#16377])
-- In `explore`, cursor position and search highlighting works better on non-ASCII characters. ([#16325](https://github.com/nushell/nushell/pull/16325))
+- In `explore`, cursor position and search highlighting works better on non-ASCII characters. ([#16325])
-- The gstat plugin will show correct branch in detached HEAD if commit hash starts with 0 ([#16309](https://github.com/nushell/nushell/pull/16309))
+- The gstat plugin will show correct branch in detached HEAD if commit hash starts with 0 ([#16309])
-- Interrupting a script with `ctrl-c` now properly kills background jobs on exit. ([#16285](https://github.com/nushell/nushell/pull/16285))
+- Interrupting a script with `ctrl-c` now properly kills background jobs on exit. ([#16285])
-- Argument variables for custom commands no longer leak outside of their scope. ([#16262](https://github.com/nushell/nushell/pull/16262))
+- Argument variables for custom commands no longer leak outside of their scope. ([#16262])
-- `into sqlite` will respect `$env.PWD` rather than current working directory. ([#16349](https://github.com/nushell/nushell/pull/16349))
+- `into sqlite` will respect `$env.PWD` rather than current working directory. ([#16349])
-- `std help` displays better on binary examples. ([#16354](https://github.com/nushell/nushell/pull/16354))
+- `std help` displays better on binary examples. ([#16354])
-- Using `polars open --type tsv` will now correctly use tabs as the delimiter. ([#16524](https://github.com/nushell/nushell/pull/16524))
+- Using `polars open --type tsv` will now correctly use tabs as the delimiter. ([#16524])
-- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444](https://github.com/nushell/nushell/pull/16444))
+- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444])
# Hall of fame
@@ -730,168 +730,316 @@ Thanks to all the contributors below for helping us solve issues, improve docume
| author | change | link |
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
-| [@blindFS](https://github.com/blindFS) | Refactor(completion, parser): move custom_completion info from Expression to Signature | [#15613](https://github.com/nushell/nushell/pull/15613) |
-| [@ysthakur](https://github.com/ysthakur) | Revert "refactor(completion, parser): move custom_completion info from Expression to Signature" | [#16250](https://github.com/nushell/nushell/pull/16250) |
-| [@ysthakur](https://github.com/ysthakur) | Reapply "refactor(completion, parser): move custom_completion info from Expression to Signature" (#16250) | [#16259](https://github.com/nushell/nushell/pull/16259) |
-| [@sholderbach](https://github.com/sholderbach) | Bump version to 0.106.2 | [#16295](https://github.com/nushell/nushell/pull/16295) |
-| [@sholderbach](https://github.com/sholderbach) | Manual GH workflow for `cargo hack` before release | [#16304](https://github.com/nushell/nushell/pull/16304) |
-| [@sholderbach](https://github.com/sholderbach) | Fixup pre-release checkup workflow | [#16305](https://github.com/nushell/nushell/pull/16305) |
-| [@WindSoilder](https://github.com/WindSoilder) | Introduce 2 associated functions to `PipelineData` | [#16233](https://github.com/nushell/nushell/pull/16233) |
-| [@ItsHarper](https://github.com/ItsHarper) | `input` command has 1 more example on `--reedline` flag. | [#16329](https://github.com/nushell/nushell/pull/16329) |
-| [@sholderbach](https://github.com/sholderbach) | Forgo full build in the `cargo hack` wf | [#16328](https://github.com/nushell/nushell/pull/16328) |
-| [@Direwolfesp](https://github.com/Direwolfesp) | Fix typo: `help format filesize` has a wrong example | [#16336](https://github.com/nushell/nushell/pull/16336) |
-| [@sholderbach](https://github.com/sholderbach) | Fix panic in unit parsing with non-UTF8 code | [#16355](https://github.com/nushell/nushell/pull/16355) |
-| [@Tyarel8](https://github.com/Tyarel8) | Fix (std/help): fix bug and use `is-not-empty` | [#16394](https://github.com/nushell/nushell/pull/16394) |
-| [@ItsHarper](https://github.com/ItsHarper) | Clarify that `input`'s history feature uses reedline | [#16334](https://github.com/nushell/nushell/pull/16334) |
-| [@ItsHarper](https://github.com/ItsHarper) | Add examples for sending and receiving data across jobs | [#16372](https://github.com/nushell/nushell/pull/16372) |
-| [@Bahex](https://github.com/Bahex) | Impl<B> for (From/Into)Value for Cow<'\_, B> where B::Owned: (From/Into)Value | [#16380](https://github.com/nushell/nushell/pull/16380) |
-| [@Bahex](https://github.com/Bahex) | Implement `FromValue` for `std::time::Duration` and refactor relevant commands to utilize that | [#16414](https://github.com/nushell/nushell/pull/16414) |
-| [@kaathewisegit](https://github.com/kaathewisegit) | Document undocumented `Signature` methods | [#16417](https://github.com/nushell/nushell/pull/16417) |
-| [@weirdan](https://github.com/weirdan) | std/random dice ensure `sides` and `dice` are positive | [#16430](https://github.com/nushell/nushell/pull/16430) |
-| [@132ikl](https://github.com/132ikl) | Rework PR template | [#16412](https://github.com/nushell/nushell/pull/16412) |
-| [@fdncred](https://github.com/fdncred) | Users can use rust version 1.87.0 to compile nushell now | [#16437](https://github.com/nushell/nushell/pull/16437) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Add well-optimized string types | [#16446](https://github.com/nushell/nushell/pull/16446) |
-| [@WindSoilder](https://github.com/WindSoilder) | Fix uninlined_format_args clippy warnings | [#16452](https://github.com/nushell/nushell/pull/16452) |
-| [@132ikl](https://github.com/132ikl) | Add "Motivation and technical details | [#16458](https://github.com/nushell/nushell/pull/16458) |
-| [@132ikl](https://github.com/132ikl) | Redirect "Questions" issue option to Discussions | [#16443](https://github.com/nushell/nushell/pull/16443) |
-| [@132ikl](https://github.com/132ikl) | Tweak PR template | [#16460](https://github.com/nushell/nushell/pull/16460) |
-| [@Jan9103](https://github.com/Jan9103) | Hover on external 0x08 handling | [#16316](https://github.com/nushell/nushell/pull/16316) |
-| [@sholderbach](https://github.com/sholderbach) | Use direct `Value.as_str()` in string commands | [#16468](https://github.com/nushell/nushell/pull/16468) |
-| [@hustcer](https://github.com/hustcer) | Fix loongarch64 builds for rust 1.87.0 | [#16455](https://github.com/nushell/nushell/pull/16455) |
-| [@sholderbach](https://github.com/sholderbach) | Update PLATFORM_SUPPORT to mention loongarch limitations | [#16470](https://github.com/nushell/nushell/pull/16470) |
-| [@sholderbach](https://github.com/sholderbach) | Clippy and dead code elimination pass | [#16469](https://github.com/nushell/nushell/pull/16469) |
-| [@132ikl](https://github.com/132ikl) | Mitigate `watch -d` breaking change | [#16473](https://github.com/nushell/nushell/pull/16473) |
-| [@132ikl](https://github.com/132ikl) | Add assertion that DeprecationEntry flag do not have dashes | [#16475](https://github.com/nushell/nushell/pull/16475) |
-| [@132ikl](https://github.com/132ikl) | Make `Span` mandatory for some fields in `ShellError` | [#16471](https://github.com/nushell/nushell/pull/16471) |
-| [@blindFS](https://github.com/blindFS) | Env shorthand false positive | [#16337](https://github.com/nushell/nushell/pull/16337) |
-| [@sholderbach](https://github.com/sholderbach) | Add a benchmark `use`ing the whole `std` | [#16485](https://github.com/nushell/nushell/pull/16485) |
-| [@fdncred](https://github.com/fdncred) | Update reedline dep to latest commit | [#16487](https://github.com/nushell/nushell/pull/16487) |
-| [@Bahex](https://github.com/Bahex) | Move `SplitRead` and `MultiLife` into `nu-utils` | [#16482](https://github.com/nushell/nushell/pull/16482) |
-| [@sholderbach](https://github.com/sholderbach) | Update benchmarking README | [#16486](https://github.com/nushell/nushell/pull/16486) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix `native-tls` feature | [#16518](https://github.com/nushell/nushell/pull/16518) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix some broken doc links | [#16519](https://github.com/nushell/nushell/pull/16519) |
-| [@Bahex](https://github.com/Bahex) | Refactor `Record` api. Reduce code duplication and make future refactors easier. | [#16490](https://github.com/nushell/nushell/pull/16490) |
-| [@sholderbach](https://github.com/sholderbach) | Add "did my homework" checkboxes to issue template | [#16520](https://github.com/nushell/nushell/pull/16520) |
-| [@fdncred](https://github.com/fdncred) | Pin polars dependency planus to version 1.1.1 | [#16538](https://github.com/nushell/nushell/pull/16538) |
-| [@sholderbach](https://github.com/sholderbach) | Fix issue form syntax | [#16541](https://github.com/nushell/nushell/pull/16541) |
-| [@ItsHarper](https://github.com/ItsHarper) | Fix incorrect documentation of the default behavior of the `bits rol`, `bits ror`, `bits shl`, and `bits shr` commands when the `--number-bytes` flag is not provided | [#16542](https://github.com/nushell/nushell/pull/16542) |
+| [@blindFS] | Refactor(completion, parser): move custom_completion info from Expression to Signature | [#15613] |
+| [@ysthakur] | Revert "refactor(completion, parser): move custom_completion info from Expression to Signature" | [#16250] |
+| [@ysthakur] | Reapply "refactor(completion, parser): move custom_completion info from Expression to Signature" (#16250) | [#16259] |
+| [@sholderbach] | Bump version to 0.106.2 | [#16295] |
+| [@sholderbach] | Manual GH workflow for `cargo hack` before release | [#16304] |
+| [@sholderbach] | Fixup pre-release checkup workflow | [#16305] |
+| [@WindSoilder] | Introduce 2 associated functions to `PipelineData` | [#16233] |
+| [@ItsHarper] | `input` command has 1 more example on `--reedline` flag. | [#16329] |
+| [@sholderbach] | Forgo full build in the `cargo hack` wf | [#16328] |
+| [@Direwolfesp] | Fix typo: `help format filesize` has a wrong example | [#16336] |
+| [@sholderbach] | Fix panic in unit parsing with non-UTF8 code | [#16355] |
+| [@Tyarel8] | Fix (std/help): fix bug and use `is-not-empty` | [#16394] |
+| [@ItsHarper] | Clarify that `input`'s history feature uses reedline | [#16334] |
+| [@ItsHarper] | Add examples for sending and receiving data across jobs | [#16372] |
+| [@Bahex] | Impl<B> for (From/Into)Value for Cow<'\_, B> where B::Owned: (From/Into)Value | [#16380] |
+| [@Bahex] | Implement `FromValue` for `std::time::Duration` and refactor relevant commands to utilize that | [#16414] |
+| [@kaathewisegit] | Document undocumented `Signature` methods | [#16417] |
+| [@weirdan] | std/random dice ensure `sides` and `dice` are positive | [#16430] |
+| [@132ikl] | Rework PR template | [#16412] |
+| [@fdncred] | Users can use rust version 1.87.0 to compile nushell now | [#16437] |
+| [@cptpiepmatz] | Add well-optimized string types | [#16446] |
+| [@WindSoilder] | Fix uninlined_format_args clippy warnings | [#16452] |
+| [@132ikl] | Add "Motivation and technical details | [#16458] |
+| [@132ikl] | Redirect "Questions" issue option to Discussions | [#16443] |
+| [@132ikl] | Tweak PR template | [#16460] |
+| [@Jan9103] | Hover on external 0x08 handling | [#16316] |
+| [@sholderbach] | Use direct `Value.as_str()` in string commands | [#16468] |
+| [@hustcer] | Fix loongarch64 builds for rust 1.87.0 | [#16455] |
+| [@sholderbach] | Update PLATFORM_SUPPORT to mention loongarch limitations | [#16470] |
+| [@sholderbach] | Clippy and dead code elimination pass | [#16469] |
+| [@132ikl] | Mitigate `watch -d` breaking change | [#16473] |
+| [@132ikl] | Add assertion that DeprecationEntry flag do not have dashes | [#16475] |
+| [@132ikl] | Make `Span` mandatory for some fields in `ShellError` | [#16471] |
+| [@blindFS] | Env shorthand false positive | [#16337] |
+| [@sholderbach] | Add a benchmark `use`ing the whole `std` | [#16485] |
+| [@fdncred] | Update reedline dep to latest commit | [#16487] |
+| [@Bahex] | Move `SplitRead` and `MultiLife` into `nu-utils` | [#16482] |
+| [@sholderbach] | Update benchmarking README | [#16486] |
+| [@cptpiepmatz] | Fix `native-tls` feature | [#16518] |
+| [@cptpiepmatz] | Fix some broken doc links | [#16519] |
+| [@Bahex] | Refactor `Record` api. Reduce code duplication and make future refactors easier. | [#16490] |
+| [@sholderbach] | Add "did my homework" checkboxes to issue template | [#16520] |
+| [@fdncred] | Pin polars dependency planus to version 1.1.1 | [#16538] |
+| [@sholderbach] | Fix issue form syntax | [#16541] |
+| [@ItsHarper] | Fix incorrect documentation of the default behavior of the `bits rol`, `bits ror`, `bits shl`, and `bits shr` commands when the `--number-bytes` flag is not provided | [#16542] |
# Full changelog
| author | title | link |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
-| [@132ikl](https://github.com/132ikl) | Fix parse-time pipeline type checking to support multiple output types for same input type | [#16111](https://github.com/nushell/nushell/pull/16111) |
-| [@132ikl](https://github.com/132ikl) | Check type of row conditions at parse-time | [#16175](https://github.com/nushell/nushell/pull/16175) |
-| [@132ikl](https://github.com/132ikl) | Rework PR template | [#16412](https://github.com/nushell/nushell/pull/16412) |
-| [@132ikl](https://github.com/132ikl) | Redirect "Questions" issue option to Discussions | [#16443](https://github.com/nushell/nushell/pull/16443) |
-| [@132ikl](https://github.com/132ikl) | Add "Motivation and technical details | [#16458](https://github.com/nushell/nushell/pull/16458) |
-| [@132ikl](https://github.com/132ikl) | Tweak PR template | [#16460](https://github.com/nushell/nushell/pull/16460) |
-| [@132ikl](https://github.com/132ikl) | Make `Span` mandatory for some fields in `ShellError` | [#16471](https://github.com/nushell/nushell/pull/16471) |
-| [@132ikl](https://github.com/132ikl) | Mitigate `watch -d` breaking change | [#16473](https://github.com/nushell/nushell/pull/16473) |
-| [@132ikl](https://github.com/132ikl) | Add assertion that DeprecationEntry flag do not have dashes | [#16475](https://github.com/nushell/nushell/pull/16475) |
-| [@Bahex](https://github.com/Bahex) | script file not found error should point to commandline, not rust code | [#16273](https://github.com/nushell/nushell/pull/16273) |
-| [@Bahex](https://github.com/Bahex) | fix(input list): don't leak ansi styling, fuzzy match indicator preserves styles | [#16276](https://github.com/nushell/nushell/pull/16276) |
-| [@Bahex](https://github.com/Bahex) | refactor: run `env_change` hooks before `pre_prompt` hooks | [#16356](https://github.com/nushell/nushell/pull/16356) |
-| [@Bahex](https://github.com/Bahex) | feat: impl<B> for (From/Into)Value for Cow<'\_, B> where B::Owned: (From/Into)Value | [#16380](https://github.com/nushell/nushell/pull/16380) |
-| [@Bahex](https://github.com/Bahex) | feat: `null` values can be spread as if they are empty lists or records. | [#16399](https://github.com/nushell/nushell/pull/16399) |
-| [@Bahex](https://github.com/Bahex) | feat(get,select,reject): add `--ignore-case` which interprets cell-paths case insensitively, analogous to `--optional` | [#16401](https://github.com/nushell/nushell/pull/16401) |
-| [@Bahex](https://github.com/Bahex) | implement `FromValue` for `std::time::Duration` and refactor relevant commands to utilize that | [#16414](https://github.com/nushell/nushell/pull/16414) |
-| [@Bahex](https://github.com/Bahex) | feat: `watch` returns a stream of events as a table when called without a closure | [#16428](https://github.com/nushell/nushell/pull/16428) |
-| [@Bahex](https://github.com/Bahex) | refactor: move `SplitRead` and `MultiLife` into `nu-utils` | [#16482](https://github.com/nushell/nushell/pull/16482) |
-| [@Bahex](https://github.com/Bahex) | Refactor `Record` api. Reduce code duplication and make future refactors easier. | [#16490](https://github.com/nushell/nushell/pull/16490) |
-| [@Direwolfesp](https://github.com/Direwolfesp) | fix typo: `help format filesize` has a wrong example | [#16336](https://github.com/nushell/nushell/pull/16336) |
-| [@Ecorous](https://github.com/Ecorous) | Add `--raw` flag to `to html` | [#16373](https://github.com/nushell/nushell/pull/16373) |
-| [@Ecorous](https://github.com/Ecorous) | Fix missing $env.PATH unhelpful error and breaking CMD builtins | [#16410](https://github.com/nushell/nushell/pull/16410) |
-| [@ItsHarper](https://github.com/ItsHarper) | Add multiline example for `input` command | [#16329](https://github.com/nushell/nushell/pull/16329) |
-| [@ItsHarper](https://github.com/ItsHarper) | Clarify that `input`'s history feature uses reedline | [#16334](https://github.com/nushell/nushell/pull/16334) |
-| [@ItsHarper](https://github.com/ItsHarper) | Add examples for receiving data from a job | [#16372](https://github.com/nushell/nushell/pull/16372) |
-| [@ItsHarper](https://github.com/ItsHarper) | Fix error message: custom commands cannot be `const` | [#16393](https://github.com/nushell/nushell/pull/16393) |
-| [@ItsHarper](https://github.com/ItsHarper) | Fix documentation of `--number-bytes` flag for several `bits` commands | [#16542](https://github.com/nushell/nushell/pull/16542) |
-| [@Jan9103](https://github.com/Jan9103) | fix(nu-lsp): hover on external 0x08 handling | [#16316](https://github.com/nushell/nushell/pull/16316) |
-| [@NotTheDr01ds](https://github.com/NotTheDr01ds) | Ability to specify a table name for kv commands | [#16450](https://github.com/nushell/nushell/pull/16450) |
-| [@Sheape](https://github.com/Sheape) | Use default color in default theme for light-theme terminals | [#16509](https://github.com/nushell/nushell/pull/16509) |
-| [@Tyarel8](https://github.com/Tyarel8) | feat(std-rfc/str): add `str align` | [#16062](https://github.com/nushell/nushell/pull/16062) |
-| [@Tyarel8](https://github.com/Tyarel8) | feat(std/bench) add `osc 9;4` progress bar | [#16245](https://github.com/nushell/nushell/pull/16245) |
-| [@Tyarel8](https://github.com/Tyarel8) | fix(help): don't trim example result beginning | [#16353](https://github.com/nushell/nushell/pull/16353) |
-| [@Tyarel8](https://github.com/Tyarel8) | fix(std/help): trim example results and fix binary examples | [#16354](https://github.com/nushell/nushell/pull/16354) |
-| [@Tyarel8](https://github.com/Tyarel8) | fix (std/help): fix bug and use `is-not-empty` | [#16394](https://github.com/nushell/nushell/pull/16394) |
-| [@Tyarel8](https://github.com/Tyarel8) | feat(each): noop on single null input, `map-null` equivalent | [#16396](https://github.com/nushell/nushell/pull/16396) |
-| [@Tyarel8](https://github.com/Tyarel8) | feat(docs): add to `run-external` and `help` command descriptions | [#16493](https://github.com/nushell/nushell/pull/16493) |
-| [@WindSoilder](https://github.com/WindSoilder) | Add `-h/--help` flag to testbin | [#16196](https://github.com/nushell/nushell/pull/16196) |
-| [@WindSoilder](https://github.com/WindSoilder) | Refactor: introduce 2 associated functions to `PipelineData` | [#16233](https://github.com/nushell/nushell/pull/16233) |
-| [@WindSoilder](https://github.com/WindSoilder) | fix uninlined_format_args clippy warnings | [#16452](https://github.com/nushell/nushell/pull/16452) |
-| [@YPares](https://github.com/YPares) | 'stor create/insert/open' & 'query db' now support JSON columns | [#16258](https://github.com/nushell/nushell/pull/16258) |
-| [@andoalon](https://github.com/andoalon) | Change the output of `format bits` to big endian instead of native endian | [#16435](https://github.com/nushell/nushell/pull/16435) |
-| [@andoalon](https://github.com/andoalon) | Add `--endian` flag to `into binary` | [#16466](https://github.com/nushell/nushell/pull/16466) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump oem_cp from 2.0.0 to 2.1.0 | [#16298](https://github.com/nushell/nushell/pull/16298) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.34.0 to 1.35.1 | [#16360](https://github.com/nushell/nushell/pull/16360) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump mach2 from 0.4.2 to 0.4.3 | [#16363](https://github.com/nushell/nushell/pull/16363) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump fancy-regex from 0.14.0 to 0.16.1 | [#16365](https://github.com/nushell/nushell/pull/16365) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump rayon from 1.10.0 to 1.11.0 | [#16422](https://github.com/nushell/nushell/pull/16422) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump sysinfo from 0.36.0 to 0.36.1 | [#16423](https://github.com/nushell/nushell/pull/16423) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.35.1 to 1.35.4 | [#16424](https://github.com/nushell/nushell/pull/16424) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump actions/checkout from 4 to 5 | [#16426](https://github.com/nushell/nushell/pull/16426) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump crate-ci/typos from 1.35.4 to 1.35.5 | [#16478](https://github.com/nushell/nushell/pull/16478) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump tempfile from 3.20.0 to 3.21.0 | [#16480](https://github.com/nushell/nushell/pull/16480) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump indexmap from 2.10.0 to 2.11.0 | [#16516](https://github.com/nushell/nushell/pull/16516) |
-| [@app/dependabot](https://github.com/app/dependabot) | build(deps): bump heapless from 0.8.0 to 0.9.1 | [#16517](https://github.com/nushell/nushell/pull/16517) |
-| [@blindFS](https://github.com/blindFS) | refactor(completion, parser): move custom_completion info from Expression to Signature | [#15613](https://github.com/nushell/nushell/pull/15613) |
-| [@blindFS](https://github.com/blindFS) | fix(parser): `export def` exposes arguments to current scope | [#16262](https://github.com/nushell/nushell/pull/16262) |
-| [@blindFS](https://github.com/blindFS) | fix(parser): env shorthand false positive | [#16337](https://github.com/nushell/nushell/pull/16337) |
-| [@blindFS](https://github.com/blindFS) | fix(parser): external argument with subexpressions | [#16346](https://github.com/nushell/nushell/pull/16346) |
-| [@blindFS](https://github.com/blindFS) | fix(parser): missing span of short flag that requires a value | [#16376](https://github.com/nushell/nushell/pull/16376) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fully qualify the sqlite path for `into sqlite` | [#16349](https://github.com/nushell/nushell/pull/16349) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Add well-optimized string types | [#16446](https://github.com/nushell/nushell/pull/16446) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix `native-tls` feature | [#16518](https://github.com/nushell/nushell/pull/16518) |
-| [@cptpiepmatz](https://github.com/cptpiepmatz) | Fix some broken doc links | [#16519](https://github.com/nushell/nushell/pull/16519) |
-| [@cyradotpink](https://github.com/cyradotpink) | Fix highlighting of aliases to external commands | [#15408](https://github.com/nushell/nushell/pull/15408) |
-| [@fdncred](https://github.com/fdncred) | update to rust version 1.87.0 | [#16437](https://github.com/nushell/nushell/pull/16437) |
-| [@fdncred](https://github.com/fdncred) | update reedline dep to latest commit | [#16487](https://github.com/nushell/nushell/pull/16487) |
-| [@fdncred](https://github.com/fdncred) | pin polars dependency planus to version 1.1.1 | [#16538](https://github.com/nushell/nushell/pull/16538) |
-| [@hardfau1t](https://github.com/hardfau1t) | feat(overlay): add active column to `overlay list` | [#16125](https://github.com/nushell/nushell/pull/16125) |
-| [@hustcer](https://github.com/hustcer) | Fix commit ID hex formatting in gstat | [#16309](https://github.com/nushell/nushell/pull/16309) |
-| [@hustcer](https://github.com/hustcer) | Fix path relative-to for case-insensitive filesystems | [#16310](https://github.com/nushell/nushell/pull/16310) |
-| [@hustcer](https://github.com/hustcer) | Fix loongarch64 builds for rust 1.87.0 | [#16455](https://github.com/nushell/nushell/pull/16455) |
-| [@kaathewisegit](https://github.com/kaathewisegit) | [nu-std] std-rfc/random: add `random choice` | [#16270](https://github.com/nushell/nushell/pull/16270) |
-| [@kaathewisegit](https://github.com/kaathewisegit) | [parser] Improve type errors for boolean literals | [#16408](https://github.com/nushell/nushell/pull/16408) |
-| [@kaathewisegit](https://github.com/kaathewisegit) | docs: document undocumented `Signature` methods | [#16417](https://github.com/nushell/nushell/pull/16417) |
-| [@kaathewisegit](https://github.com/kaathewisegit) | feat: move random dice to std | [#16420](https://github.com/nushell/nushell/pull/16420) |
-| [@kaathewisegit](https://github.com/kaathewisegit) | Improve wrong flag help | [#16427](https://github.com/nushell/nushell/pull/16427) |
-| [@lucascherzer](https://github.com/lucascherzer) | feat(watch): implement --debounce flag with duration | [#16187](https://github.com/nushell/nushell/pull/16187) |
-| [@new-years-eve](https://github.com/new-years-eve) | Change the behavior of `--ignore-case` and `--multiline` options for `find` | [#16323](https://github.com/nushell/nushell/pull/16323) |
-| [@nitsky](https://github.com/nitsky) | Kill background jobs on interrupt | [#16285](https://github.com/nushell/nushell/pull/16285) |
-| [@pyz4](https://github.com/pyz4) | fix(polars): fix `polars fill-null` signature to also accept expression as input | [#16444](https://github.com/nushell/nushell/pull/16444) |
-| [@samoylovfp](https://github.com/samoylovfp) | Bump ureq, get redirect history. | [#16078](https://github.com/nushell/nushell/pull/16078) |
-| [@sgvictorino](https://github.com/sgvictorino) | fix panic when `..=` syntax is used in stepped ranges | [#16231](https://github.com/nushell/nushell/pull/16231) |
-| [@sholderbach](https://github.com/sholderbach) | Bump version to 0.106.2 | [#16295](https://github.com/nushell/nushell/pull/16295) |
-| [@sholderbach](https://github.com/sholderbach) | Manual GH workflow for `cargo hack` before release | [#16304](https://github.com/nushell/nushell/pull/16304) |
-| [@sholderbach](https://github.com/sholderbach) | Fixup pre-release checkup workflow | [#16305](https://github.com/nushell/nushell/pull/16305) |
-| [@sholderbach](https://github.com/sholderbach) | Fix UTF-8 multibyte handling in `explore` inputs | [#16325](https://github.com/nushell/nushell/pull/16325) |
-| [@sholderbach](https://github.com/sholderbach) | Add `send: vichangemode` to reedline config | [#16327](https://github.com/nushell/nushell/pull/16327) |
-| [@sholderbach](https://github.com/sholderbach) | Forgo full build in the `cargo hack` wf | [#16328](https://github.com/nushell/nushell/pull/16328) |
-| [@sholderbach](https://github.com/sholderbach) | Fix panic in unit parsing with non-UTF8 code | [#16355](https://github.com/nushell/nushell/pull/16355) |
-| [@sholderbach](https://github.com/sholderbach) | Use direct `Value.as_str()` in string commands | [#16468](https://github.com/nushell/nushell/pull/16468) |
-| [@sholderbach](https://github.com/sholderbach) | chore: Clippy and dead code elimination pass | [#16469](https://github.com/nushell/nushell/pull/16469) |
-| [@sholderbach](https://github.com/sholderbach) | Update PLATFORM_SUPPORT to mention loongarch limitations | [#16470](https://github.com/nushell/nushell/pull/16470) |
-| [@sholderbach](https://github.com/sholderbach) | Add a benchmark `use`ing the whole `std` | [#16485](https://github.com/nushell/nushell/pull/16485) |
-| [@sholderbach](https://github.com/sholderbach) | Update benchmarking README | [#16486](https://github.com/nushell/nushell/pull/16486) |
-| [@sholderbach](https://github.com/sholderbach) | Add "did my homework" checkboxes to issue template | [#16520](https://github.com/nushell/nushell/pull/16520) |
-| [@sholderbach](https://github.com/sholderbach) | Fix `polars open` to use tab as separator for TSV | [#16524](https://github.com/nushell/nushell/pull/16524) |
-| [@sholderbach](https://github.com/sholderbach) | Fix issue form syntax | [#16541](https://github.com/nushell/nushell/pull/16541) |
-| [@stuartcarnie](https://github.com/stuartcarnie) | feat: `commandline edit --accept` to instantly execute command | [#16193](https://github.com/nushell/nushell/pull/16193) |
-| [@uraneko](https://github.com/uraneko) | Sort help message flags by required field | [#16476](https://github.com/nushell/nushell/pull/16476) |
-| [@weirdan](https://github.com/weirdan) | Respect `$env.LC_ALL` and `$env.LANG` in `format date` | [#16369](https://github.com/nushell/nushell/pull/16369) |
-| [@weirdan](https://github.com/weirdan) | Fix example result span | [#16395](https://github.com/nushell/nushell/pull/16395) |
-| [@weirdan](https://github.com/weirdan) | Fix `watch` return type | [#16400](https://github.com/nushell/nushell/pull/16400) |
-| [@weirdan](https://github.com/weirdan) | Validate `std/random dice` args | [#16430](https://github.com/nushell/nushell/pull/16430) |
-| [@weirdan](https://github.com/weirdan) | Quote strings containing `=` | [#16440](https://github.com/nushell/nushell/pull/16440) |
-| [@weirdan](https://github.com/weirdan) | Multiple output types for `query xml` | [#16459](https://github.com/nushell/nushell/pull/16459) |
-| [@weirdan](https://github.com/weirdan) | Use fixed column name for `query xml` output | [#16461](https://github.com/nushell/nushell/pull/16461) |
-| [@weirdan](https://github.com/weirdan) | Extend nodeset output formats for `query xml` | [#16465](https://github.com/nushell/nushell/pull/16465) |
-| [@weirdan](https://github.com/weirdan) | Make `xml:` prefix always available in `query xml` | [#16472](https://github.com/nushell/nushell/pull/16472) |
-| [@weirdan](https://github.com/weirdan) | Reset content type for commands returning partial input | [#16500](https://github.com/nushell/nushell/pull/16500) |
-| [@weirdan](https://github.com/weirdan) | Prevent `detect columns` from creating invalid records with duplicate keys | [#16527](https://github.com/nushell/nushell/pull/16527) |
-| [@weirdan](https://github.com/weirdan) | Dummy 'namespace' commands for multiword orphans | [#16529](https://github.com/nushell/nushell/pull/16529) |
-| [@ysthakur](https://github.com/ysthakur) | Revert "refactor(completion, parser): move custom_completion info from Expression to Signature" | [#16250](https://github.com/nushell/nushell/pull/16250) |
-| [@ysthakur](https://github.com/ysthakur) | Reapply "refactor(completion, parser): move custom_completion info from Expression to Signature" (#16250) | [#16259](https://github.com/nushell/nushell/pull/16259) |
-| [@zhiburt](https://github.com/zhiburt) | nu-table: Fix header on border index coloring | [#16377](https://github.com/nushell/nushell/pull/16377) |
+| [@132ikl] | Fix parse-time pipeline type checking to support multiple output types for same input type | [#16111] |
+| [@132ikl] | Check type of row conditions at parse-time | [#16175] |
+| [@132ikl] | Rework PR template | [#16412] |
+| [@132ikl] | Redirect "Questions" issue option to Discussions | [#16443] |
+| [@132ikl] | Add "Motivation and technical details | [#16458] |
+| [@132ikl] | Tweak PR template | [#16460] |
+| [@132ikl] | Make `Span` mandatory for some fields in `ShellError` | [#16471] |
+| [@132ikl] | Mitigate `watch -d` breaking change | [#16473] |
+| [@132ikl] | Add assertion that DeprecationEntry flag do not have dashes | [#16475] |
+| [@Bahex] | script file not found error should point to commandline, not rust code | [#16273] |
+| [@Bahex] | fix(input list): don't leak ansi styling, fuzzy match indicator preserves styles | [#16276] |
+| [@Bahex] | refactor: run `env_change` hooks before `pre_prompt` hooks | [#16356] |
+| [@Bahex] | feat: impl<B> for (From/Into)Value for Cow<'\_, B> where B::Owned: (From/Into)Value | [#16380] |
+| [@Bahex] | feat: `null` values can be spread as if they are empty lists or records. | [#16399] |
+| [@Bahex] | feat(get,select,reject): add `--ignore-case` which interprets cell-paths case insensitively, analogous to `--optional` | [#16401] |
+| [@Bahex] | implement `FromValue` for `std::time::Duration` and refactor relevant commands to utilize that | [#16414] |
+| [@Bahex] | feat: `watch` returns a stream of events as a table when called without a closure | [#16428] |
+| [@Bahex] | refactor: move `SplitRead` and `MultiLife` into `nu-utils` | [#16482] |
+| [@Bahex] | Refactor `Record` api. Reduce code duplication and make future refactors easier. | [#16490] |
+| [@Direwolfesp] | fix typo: `help format filesize` has a wrong example | [#16336] |
+| [@Ecorous] | Add `--raw` flag to `to html` | [#16373] |
+| [@Ecorous] | Fix missing $env.PATH unhelpful error and breaking CMD builtins | [#16410] |
+| [@ItsHarper] | Add multiline example for `input` command | [#16329] |
+| [@ItsHarper] | Clarify that `input`'s history feature uses reedline | [#16334] |
+| [@ItsHarper] | Add examples for receiving data from a job | [#16372] |
+| [@ItsHarper] | Fix error message: custom commands cannot be `const` | [#16393] |
+| [@ItsHarper] | Fix documentation of `--number-bytes` flag for several `bits` commands | [#16542] |
+| [@Jan9103] | fix(nu-lsp): hover on external 0x08 handling | [#16316] |
+| [@NotTheDr01ds] | Ability to specify a table name for kv commands | [#16450] |
+| [@Sheape] | Use default color in default theme for light-theme terminals | [#16509] |
+| [@Tyarel8] | feat(std-rfc/str): add `str align` | [#16062] |
+| [@Tyarel8] | feat(std/bench) add `osc 9;4` progress bar | [#16245] |
+| [@Tyarel8] | fix(help): don't trim example result beginning | [#16353] |
+| [@Tyarel8] | fix(std/help): trim example results and fix binary examples | [#16354] |
+| [@Tyarel8] | fix (std/help): fix bug and use `is-not-empty` | [#16394] |
+| [@Tyarel8] | feat(each): noop on single null input, `map-null` equivalent | [#16396] |
+| [@Tyarel8] | feat(docs): add to `run-external` and `help` command descriptions | [#16493] |
+| [@WindSoilder] | Add `-h/--help` flag to testbin | [#16196] |
+| [@WindSoilder] | Refactor: introduce 2 associated functions to `PipelineData` | [#16233] |
+| [@WindSoilder] | fix uninlined_format_args clippy warnings | [#16452] |
+| [@YPares] | 'stor create/insert/open' & 'query db' now support JSON columns | [#16258] |
+| [@andoalon] | Change the output of `format bits` to big endian instead of native endian | [#16435] |
+| [@andoalon] | Add `--endian` flag to `into binary` | [#16466] |
+| [@app/dependabot] | build(deps): bump oem_cp from 2.0.0 to 2.1.0 | [#16298] |
+| [@app/dependabot] | build(deps): bump crate-ci/typos from 1.34.0 to 1.35.1 | [#16360] |
+| [@app/dependabot] | build(deps): bump mach2 from 0.4.2 to 0.4.3 | [#16363] |
+| [@app/dependabot] | build(deps): bump fancy-regex from 0.14.0 to 0.16.1 | [#16365] |
+| [@app/dependabot] | build(deps): bump rayon from 1.10.0 to 1.11.0 | [#16422] |
+| [@app/dependabot] | build(deps): bump sysinfo from 0.36.0 to 0.36.1 | [#16423] |
+| [@app/dependabot] | build(deps): bump crate-ci/typos from 1.35.1 to 1.35.4 | [#16424] |
+| [@app/dependabot] | build(deps): bump actions/checkout from 4 to 5 | [#16426] |
+| [@app/dependabot] | build(deps): bump crate-ci/typos from 1.35.4 to 1.35.5 | [#16478] |
+| [@app/dependabot] | build(deps): bump tempfile from 3.20.0 to 3.21.0 | [#16480] |
+| [@app/dependabot] | build(deps): bump indexmap from 2.10.0 to 2.11.0 | [#16516] |
+| [@app/dependabot] | build(deps): bump heapless from 0.8.0 to 0.9.1 | [#16517] |
+| [@blindFS] | refactor(completion, parser): move custom_completion info from Expression to Signature | [#15613] |
+| [@blindFS] | fix(parser): `export def` exposes arguments to current scope | [#16262] |
+| [@blindFS] | fix(parser): env shorthand false positive | [#16337] |
+| [@blindFS] | fix(parser): external argument with subexpressions | [#16346] |
+| [@blindFS] | fix(parser): missing span of short flag that requires a value | [#16376] |
+| [@cptpiepmatz] | Fully qualify the sqlite path for `into sqlite` | [#16349] |
+| [@cptpiepmatz] | Add well-optimized string types | [#16446] |
+| [@cptpiepmatz] | Fix `native-tls` feature | [#16518] |
+| [@cptpiepmatz] | Fix some broken doc links | [#16519] |
+| [@cyradotpink] | Fix highlighting of aliases to external commands | [#15408] |
+| [@fdncred] | update to rust version 1.87.0 | [#16437] |
+| [@fdncred] | update reedline dep to latest commit | [#16487] |
+| [@fdncred] | pin polars dependency planus to version 1.1.1 | [#16538] |
+| [@hardfau1t] | feat(overlay): add active column to `overlay list` | [#16125] |
+| [@hustcer] | Fix commit ID hex formatting in gstat | [#16309] |
+| [@hustcer] | Fix path relative-to for case-insensitive filesystems | [#16310] |
+| [@hustcer] | Fix loongarch64 builds for rust 1.87.0 | [#16455] |
+| [@kaathewisegit] | [nu-std] std-rfc/random: add `random choice` | [#16270] |
+| [@kaathewisegit] | [parser] Improve type errors for boolean literals | [#16408] |
+| [@kaathewisegit] | docs: document undocumented `Signature` methods | [#16417] |
+| [@kaathewisegit] | feat: move random dice to std | [#16420] |
+| [@kaathewisegit] | Improve wrong flag help | [#16427] |
+| [@lucascherzer] | feat(watch): implement --debounce flag with duration | [#16187] |
+| [@new-years-eve] | Change the behavior of `--ignore-case` and `--multiline` options for `find` | [#16323] |
+| [@nitsky] | Kill background jobs on interrupt | [#16285] |
+| [@pyz4] | fix(polars): fix `polars fill-null` signature to also accept expression as input | [#16444] |
+| [@samoylovfp] | Bump ureq, get redirect history. | [#16078] |
+| [@sgvictorino] | fix panic when `..=` syntax is used in stepped ranges | [#16231] |
+| [@sholderbach] | Bump version to 0.106.2 | [#16295] |
+| [@sholderbach] | Manual GH workflow for `cargo hack` before release | [#16304] |
+| [@sholderbach] | Fixup pre-release checkup workflow | [#16305] |
+| [@sholderbach] | Fix UTF-8 multibyte handling in `explore` inputs | [#16325] |
+| [@sholderbach] | Add `send: vichangemode` to reedline config | [#16327] |
+| [@sholderbach] | Forgo full build in the `cargo hack` wf | [#16328] |
+| [@sholderbach] | Fix panic in unit parsing with non-UTF8 code | [#16355] |
+| [@sholderbach] | Use direct `Value.as_str()` in string commands | [#16468] |
+| [@sholderbach] | chore: Clippy and dead code elimination pass | [#16469] |
+| [@sholderbach] | Update PLATFORM_SUPPORT to mention loongarch limitations | [#16470] |
+| [@sholderbach] | Add a benchmark `use`ing the whole `std` | [#16485] |
+| [@sholderbach] | Update benchmarking README | [#16486] |
+| [@sholderbach] | Add "did my homework" checkboxes to issue template | [#16520] |
+| [@sholderbach] | Fix `polars open` to use tab as separator for TSV | [#16524] |
+| [@sholderbach] | Fix issue form syntax | [#16541] |
+| [@stuartcarnie] | feat: `commandline edit --accept` to instantly execute command | [#16193] |
+| [@uraneko] | Sort help message flags by required field | [#16476] |
+| [@weirdan] | Respect `$env.LC_ALL` and `$env.LANG` in `format date` | [#16369] |
+| [@weirdan] | Fix example result span | [#16395] |
+| [@weirdan] | Fix `watch` return type | [#16400] |
+| [@weirdan] | Validate `std/random dice` args | [#16430] |
+| [@weirdan] | Quote strings containing `=` | [#16440] |
+| [@weirdan] | Multiple output types for `query xml` | [#16459] |
+| [@weirdan] | Use fixed column name for `query xml` output | [#16461] |
+| [@weirdan] | Extend nodeset output formats for `query xml` | [#16465] |
+| [@weirdan] | Make `xml:` prefix always available in `query xml` | [#16472] |
+| [@weirdan] | Reset content type for commands returning partial input | [#16500] |
+| [@weirdan] | Prevent `detect columns` from creating invalid records with duplicate keys | [#16527] |
+| [@weirdan] | Dummy 'namespace' commands for multiword orphans | [#16529] |
+| [@ysthakur] | Revert "refactor(completion, parser): move custom_completion info from Expression to Signature" | [#16250] |
+| [@ysthakur] | Reapply "refactor(completion, parser): move custom_completion info from Expression to Signature" (#16250) | [#16259] |
+| [@zhiburt] | nu-table: Fix header on border index coloring | [#16377] |
+
+[@132ikl]: https://github.com/132ikl
+[@Bahex]: https://github.com/Bahex
+[@Direwolfesp]: https://github.com/Direwolfesp
+[@Ecorous]: https://github.com/Ecorous
+[@ItsHarper]: https://github.com/ItsHarper
+[@Jan9103]: https://github.com/Jan9103
+[@NotTheDr01ds]: https://github.com/NotTheDr01ds
+[@Sheape]: https://github.com/Sheape
+[@Tyarel8]: https://github.com/Tyarel8
+[@WindSoilder]: https://github.com/WindSoilder
+[@YPares]: https://github.com/YPares
+[@andoalon]: https://github.com/andoalon
+[@app/dependabot]: https://github.com/app/dependabot
+[@blindFS]: https://github.com/blindFS
+[@cptpiepmatz]: https://github.com/cptpiepmatz
+[@cyradotpink]: https://github.com/cyradotpink
+[@fdncred]: https://github.com/fdncred
+[@hardfau1t]: https://github.com/hardfau1t
+[@hustcer]: https://github.com/hustcer
+[@kaathewisegit]: https://github.com/kaathewisegit
+[@lucascherzer]: https://github.com/lucascherzer
+[@new-years-eve]: https://github.com/new-years-eve
+[@nitsky]: https://github.com/nitsky
+[@pyz4]: https://github.com/pyz4
+[@samoylovfp]: https://github.com/samoylovfp
+[@sgvictorino]: https://github.com/sgvictorino
+[@sholderbach]: https://github.com/sholderbach
+[@stuartcarnie]: https://github.com/stuartcarnie
+[@uraneko]: https://github.com/uraneko
+[@weirdan]: https://github.com/weirdan
+[@ysthakur]: https://github.com/ysthakur
+[@zhiburt]: https://github.com/zhiburt
+[#15408]: https://github.com/nushell/nushell/pull/15408
+[#15613]: https://github.com/nushell/nushell/pull/15613
+[#16062]: https://github.com/nushell/nushell/pull/16062
+[#16078]: https://github.com/nushell/nushell/pull/16078
+[#16111]: https://github.com/nushell/nushell/pull/16111
+[#16125]: https://github.com/nushell/nushell/pull/16125
+[#16175]: https://github.com/nushell/nushell/pull/16175
+[#16187]: https://github.com/nushell/nushell/pull/16187
+[#16193]: https://github.com/nushell/nushell/pull/16193
+[#16196]: https://github.com/nushell/nushell/pull/16196
+[#16231]: https://github.com/nushell/nushell/pull/16231
+[#16233]: https://github.com/nushell/nushell/pull/16233
+[#16245]: https://github.com/nushell/nushell/pull/16245
+[#16250]: https://github.com/nushell/nushell/pull/16250
+[#16258]: https://github.com/nushell/nushell/pull/16258
+[#16259]: https://github.com/nushell/nushell/pull/16259
+[#16262]: https://github.com/nushell/nushell/pull/16262
+[#16270]: https://github.com/nushell/nushell/pull/16270
+[#16273]: https://github.com/nushell/nushell/pull/16273
+[#16276]: https://github.com/nushell/nushell/pull/16276
+[#16285]: https://github.com/nushell/nushell/pull/16285
+[#16295]: https://github.com/nushell/nushell/pull/16295
+[#16298]: https://github.com/nushell/nushell/pull/16298
+[#16304]: https://github.com/nushell/nushell/pull/16304
+[#16305]: https://github.com/nushell/nushell/pull/16305
+[#16309]: https://github.com/nushell/nushell/pull/16309
+[#16310]: https://github.com/nushell/nushell/pull/16310
+[#16316]: https://github.com/nushell/nushell/pull/16316
+[#16323]: https://github.com/nushell/nushell/pull/16323
+[#16325]: https://github.com/nushell/nushell/pull/16325
+[#16327]: https://github.com/nushell/nushell/pull/16327
+[#16328]: https://github.com/nushell/nushell/pull/16328
+[#16329]: https://github.com/nushell/nushell/pull/16329
+[#16334]: https://github.com/nushell/nushell/pull/16334
+[#16336]: https://github.com/nushell/nushell/pull/16336
+[#16337]: https://github.com/nushell/nushell/pull/16337
+[#16346]: https://github.com/nushell/nushell/pull/16346
+[#16349]: https://github.com/nushell/nushell/pull/16349
+[#16353]: https://github.com/nushell/nushell/pull/16353
+[#16354]: https://github.com/nushell/nushell/pull/16354
+[#16355]: https://github.com/nushell/nushell/pull/16355
+[#16356]: https://github.com/nushell/nushell/pull/16356
+[#16360]: https://github.com/nushell/nushell/pull/16360
+[#16363]: https://github.com/nushell/nushell/pull/16363
+[#16365]: https://github.com/nushell/nushell/pull/16365
+[#16369]: https://github.com/nushell/nushell/pull/16369
+[#16372]: https://github.com/nushell/nushell/pull/16372
+[#16373]: https://github.com/nushell/nushell/pull/16373
+[#16376]: https://github.com/nushell/nushell/pull/16376
+[#16377]: https://github.com/nushell/nushell/pull/16377
+[#16380]: https://github.com/nushell/nushell/pull/16380
+[#16393]: https://github.com/nushell/nushell/pull/16393
+[#16394]: https://github.com/nushell/nushell/pull/16394
+[#16395]: https://github.com/nushell/nushell/pull/16395
+[#16396]: https://github.com/nushell/nushell/pull/16396
+[#16399]: https://github.com/nushell/nushell/pull/16399
+[#16400]: https://github.com/nushell/nushell/pull/16400
+[#16401]: https://github.com/nushell/nushell/pull/16401
+[#16408]: https://github.com/nushell/nushell/pull/16408
+[#16410]: https://github.com/nushell/nushell/pull/16410
+[#16412]: https://github.com/nushell/nushell/pull/16412
+[#16414]: https://github.com/nushell/nushell/pull/16414
+[#16417]: https://github.com/nushell/nushell/pull/16417
+[#16420]: https://github.com/nushell/nushell/pull/16420
+[#16422]: https://github.com/nushell/nushell/pull/16422
+[#16423]: https://github.com/nushell/nushell/pull/16423
+[#16424]: https://github.com/nushell/nushell/pull/16424
+[#16426]: https://github.com/nushell/nushell/pull/16426
+[#16427]: https://github.com/nushell/nushell/pull/16427
+[#16428]: https://github.com/nushell/nushell/pull/16428
+[#16430]: https://github.com/nushell/nushell/pull/16430
+[#16435]: https://github.com/nushell/nushell/pull/16435
+[#16437]: https://github.com/nushell/nushell/pull/16437
+[#16440]: https://github.com/nushell/nushell/pull/16440
+[#16443]: https://github.com/nushell/nushell/pull/16443
+[#16444]: https://github.com/nushell/nushell/pull/16444
+[#16446]: https://github.com/nushell/nushell/pull/16446
+[#16450]: https://github.com/nushell/nushell/pull/16450
+[#16452]: https://github.com/nushell/nushell/pull/16452
+[#16455]: https://github.com/nushell/nushell/pull/16455
+[#16458]: https://github.com/nushell/nushell/pull/16458
+[#16459]: https://github.com/nushell/nushell/pull/16459
+[#16460]: https://github.com/nushell/nushell/pull/16460
+[#16461]: https://github.com/nushell/nushell/pull/16461
+[#16465]: https://github.com/nushell/nushell/pull/16465
+[#16466]: https://github.com/nushell/nushell/pull/16466
+[#16468]: https://github.com/nushell/nushell/pull/16468
+[#16469]: https://github.com/nushell/nushell/pull/16469
+[#16470]: https://github.com/nushell/nushell/pull/16470
+[#16471]: https://github.com/nushell/nushell/pull/16471
+[#16472]: https://github.com/nushell/nushell/pull/16472
+[#16473]: https://github.com/nushell/nushell/pull/16473
+[#16475]: https://github.com/nushell/nushell/pull/16475
+[#16476]: https://github.com/nushell/nushell/pull/16476
+[#16478]: https://github.com/nushell/nushell/pull/16478
+[#16480]: https://github.com/nushell/nushell/pull/16480
+[#16482]: https://github.com/nushell/nushell/pull/16482
+[#16485]: https://github.com/nushell/nushell/pull/16485
+[#16486]: https://github.com/nushell/nushell/pull/16486
+[#16487]: https://github.com/nushell/nushell/pull/16487
+[#16490]: https://github.com/nushell/nushell/pull/16490
+[#16493]: https://github.com/nushell/nushell/pull/16493
+[#16500]: https://github.com/nushell/nushell/pull/16500
+[#16509]: https://github.com/nushell/nushell/pull/16509
+[#16516]: https://github.com/nushell/nushell/pull/16516
+[#16517]: https://github.com/nushell/nushell/pull/16517
+[#16518]: https://github.com/nushell/nushell/pull/16518
+[#16519]: https://github.com/nushell/nushell/pull/16519
+[#16520]: https://github.com/nushell/nushell/pull/16520
+[#16524]: https://github.com/nushell/nushell/pull/16524
+[#16527]: https://github.com/nushell/nushell/pull/16527
+[#16529]: https://github.com/nushell/nushell/pull/16529
+[#16538]: https://github.com/nushell/nushell/pull/16538
+[#16541]: https://github.com/nushell/nushell/pull/16541
+[#16542]: https://github.com/nushell/nushell/pull/16542
From b709d875fad511b77a337592c9acc3700d3ecb6b Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 18:41:35 -0400
Subject: [PATCH 21/24] Add highlights
---
blog/2025-09-02-nushell_0_107_0.md | 44 ++++++++++++++++++++----------
1 file changed, 29 insertions(+), 15 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index e4a3500aae6..18335a1737e 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -28,19 +28,33 @@ As part of this release, we also publish a set of optional [plugins](https://www
# Highlights and themes of this release
-
-
+## Watch out for new `watch` features!
+
+This release features a couple additions to the `watch` command. The `watch` command can now *stream* events as a table output, which unlocks all new sorts of possibilities for how you can use it. Thank you to [@Bahex] for this amazing feature!
+
+The `watch` command also has a "new" flag: `--debounce`. Fans of the `watch` command might be scratching their heads, since a very similar option already exists: `--debounce-ms`. This flag prevents events in rapid succession from being detected. The `--debounce` (no `-ms`) flag does the same thing, but with a proper duration value rather than an integer. Thanks to [@lucascherzer] for this addition!
+
+Read [**more about `watch` event streaming**](#watch-streams-events-16428), or read [**more about the `--debounce` flag**](#new-watch-debounce-option-16187) and the [**corresponding deprecation of `--debounce-ms`**](#deprecate-watch-debounce-ms-16187).
+
+## Making `find` more cohesive
+
+Following [last release's improvements to the `find` command](/blog/2025-07-23-nushell_0_106_0.html#commands-toc), this release has some more changes aimed at making `find` more cohesive. These include `find` being case-sensitive by default, and a more useful behavior for the `--multiline` flag. Thank you to [@new-years-eve] for your work both this release and last release in making `find` more useful!
+
+Read [**more about `find` being case-sensitive**](#find-is-now-case-sensitive-by-default-16323), and [**more about the new --multiline behavior**](#new-behavior-for-find-multiline-16323).
+
+## `query xml` improvements
+
+The `nu_plugin_query` plugin ships with Nushell, and has a number of different commands that can help manipulate data formats that might otherwise be unwieldy. Thank you to [@weirdan] for spending some time to polish the `query xml` command. These changes should make it much nicer to use!
+
+**Read more about these improvements**:
+
+* [Returning scalar results, rather than putting all output into tables](#query-xml-returns-scalar-results-when-possible-16459)
+* [Using a fixed column name, instead of a name based on the input expression](#use-fixed-column-name-for-query-xml-output-16461)
+* [Additional information with nodeset outputs](#extend-nodeset-output-formats-for-query-xml-16465)
+
+::: warning
+These improvements also mean a number of a breaking changes, so if you use `query xml` make sure to take a look at the breaking changes!
+:::
# Changes
@@ -61,7 +75,7 @@ alias find = find -i
:::
-### New behavior for `find --multiline` ([#16323])
+### New behavior for `find --multiline` ([#16323])
Previously, `find` would always split multi-line input strings, making it impossible to perform proper multi-line regex matches unless a string was within list, table, or record. Now, the `--multiline` flag can be used to prevent this splitting, replacing its previous behavior of prepending `(?m)` to the regex.
@@ -78,7 +92,7 @@ hel[41mlo
wo[49mrl[0m
```
-### `each` now passes through `null` input ([#16396])
+### `each` now passes through `null` input ([#16396])
When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
For example, before this change:
From aaf6dbccdeb3af7ae951d549163042607883ece6 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 19:31:25 -0400
Subject: [PATCH 22/24] Add excerpt
---
blog/2025-09-02-nushell_0_107_0.md | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 18335a1737e..3e95e2a2e7b 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -3,18 +3,12 @@ title: Nushell 0.107.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.107.0 of Nu. This release adds...
+excerpt: Today, we're releasing version 0.107.0 of Nu. This release has a pretty big variety of improvements to various parts of Nushell. There are some new features for `watch`, `find`, and `query xml`, and changes to over 50 commands!
---
-
-
-
-
# Nushell 0.107.0
-
-
-Today, we're releasing version 0.107.0 of Nu. This release adds...
+Today, we're releasing version 0.107.0 of Nu. This release has a pretty big variety of improvements to various parts of Nushell. There are some new features for `watch`, `find`, and `query xml`, and changes to over 50 commands!
# Where to get it
From fee03f07df3098efb9e2cbbb2a94960cb70a1ca9 Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 20:11:25 -0400
Subject: [PATCH 23/24] Add table of contents
---
blog/2025-09-02-nushell_0_107_0.md | 150 +++++++++++++++++++----------
1 file changed, 99 insertions(+), 51 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 3e95e2a2e7b..63a53422b63 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -18,11 +18,59 @@ As part of this release, we also publish a set of optional [plugins](https://www
# Table of contents
+- [_Highlights and themes of this release_](#highlights-and-themes-of-this-release-toc)
+ - [_Watch out for new `watch` features!_](#watch-out-for-new-watch-features-toc)
+ - [_Making `find` more cohesive_](#making-find-more-cohesive-toc)
+ - [_`query xml` improvements_](#query-xml-improvements-toc)
+- [_Changes_](#changes-toc)
+ - [_Breaking changes_](#breaking-changes-toc)
+ - [_`find` is now case-sensitive by default_](#find-is-now-case-sensitive-by-default-16323-toc)
+ - [_New behavior for `find --multiline`_](#new-behavior-for-find-multiline-16323-toc)
+ - [_`each` now passes through `null` input_](#each-now-passes-through-null-input-16396-toc)
+ - [_Change the output of `format bits` to big endian instead of native endian_](#change-the-output-of-format-bits-to-big-endian-instead-of-native-endian-16435-toc)
+ - [_Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt`_](#execution-order-of-hooks-changed-env-change-before-pre-prompt-16356-toc)
+ - [_`query xml` returns scalar results when possible_](#query-xml-returns-scalar-results-when-possible-16459-toc)
+ - [_Use fixed column name for `query xml` output_](#use-fixed-column-name-for-query-xml-output-16461-toc)
+ - [_Add active column to `overlay list`_](#add-active-column-to-overlay-list-16125-toc)
+ - [_Additions_](#additions-toc)
+ - [_`watch` streams events_](#watch-streams-events-16428-toc)
+ - [_New `watch --debounce` option_](#new-watch-debounce-option-16187-toc)
+ - [_`get`, `select`, `reject` can `--ignore-case` of cell-path_](#get-select-reject-can-ignore-case-of-cell-path-16401-toc)
+ - [_`--endian` flag for `into binary`_](#endian-flag-for-into-binary-16466-toc)
+ - [_Spread `null` into collections or arguments_](#spread-null-into-collections-or-arguments-16399-toc)
+ - [_`http` subcommands now keep track of redirects_](#http-subcommands-now-keep-track-of-redirects-16078-toc)
+ - [_New `random choice` command in `std-rfc`_](#new-random-choice-command-in-std-rfc-16270-toc)
+ - [_Add `str align` to `std-rfc/str`_](#add-str-align-to-std-rfc-str-16062-toc)
+ - [_JSON column support for `stor` and `query db`_](#json-column-support-for-stor-and-query-db-16258-toc)
+ - [_Extend nodeset output formats for `query xml`_](#extend-nodeset-output-formats-for-query-xml-16465-toc)
+ - [_New keybinding: `vichangemode`_](#new-keybinding-vichangemode-16327-toc)
+ - [_Add `-h/--help` flag to testbin_](#add-h-help-flag-to-testbin-16196-toc)
+ - [_Other additions_](#other-additions-toc)
+ - [_Deprecations_](#deprecations-toc)
+ - [_Built-in `random dice` deprecated_](#built-in-random-dice-deprecated-toc)
+ - [_Deprecate `watch --debounce-ms`_](#deprecate-watch-debounce-ms-16187-toc)
+ - [_Other changes_](#other-changes-toc)
+ - [_`random dice` moved to `std`_](#random-dice-moved-to-std-16420-toc)
+ - [_`http` commands will now fail on invalid headers_](#http-commands-will-now-fail-on-invalid-headers-16078-toc)
+ - [_`http post` now sends body serialized as pretty json_](#http-post-now-sends-body-serialized-as-pretty-json-16078-toc)
+ - [_Improved error messages for misspelled flags_](#improved-error-messages-for-misspelled-flags-16427-toc)
+ - [_Improved default color theme_](#improved-default-color-theme-16509-toc)
+ - [_Reset content type for commands returning partial input_](#reset-content-type-for-commands-returning-partial-input-16500-toc)
+ - [_Additional changes_](#additional-changes-toc)
+ - [_Bug fixes_](#bug-fixes-toc)
+ - [_Fix highlighting of aliases to external commands_](#fix-highlighting-of-aliases-to-external-commands-15408-toc)
+ - [_`input list` Plays Nicely With Styled Input_](#input-list-plays-nicely-with-styled-input-16276-toc)
+ - [_Fixed spacing of `help` examples_](#fixed-spacing-of-help-examples-16353-toc)
+ - [_Prevent `detect columns` from creating invalid records with duplicate keys_](#prevent-detect-columns-from-creating-invalid-records-with-duplicate-keys-16527-toc)
+ - [_Improvements to errors_](#improvements-to-errors-toc)
+ - [_Other fixes_](#other-fixes-toc)
+- [_Hall of fame_](#hall-of-fame-toc)
+- [_Full changelog_](#full-changelog-toc)
-# Highlights and themes of this release
+# Highlights and themes of this release [[toc](#table-of-contents)]
-## Watch out for new `watch` features!
+## Watch out for new `watch` features! [[toc](#table-of-contents)]
This release features a couple additions to the `watch` command. The `watch` command can now *stream* events as a table output, which unlocks all new sorts of possibilities for how you can use it. Thank you to [@Bahex] for this amazing feature!
@@ -30,13 +78,13 @@ The `watch` command also has a "new" flag: `--debounce`. Fans of the `watch` com
Read [**more about `watch` event streaming**](#watch-streams-events-16428), or read [**more about the `--debounce` flag**](#new-watch-debounce-option-16187) and the [**corresponding deprecation of `--debounce-ms`**](#deprecate-watch-debounce-ms-16187).
-## Making `find` more cohesive
+## Making `find` more cohesive [[toc](#table-of-contents)]
Following [last release's improvements to the `find` command](/blog/2025-07-23-nushell_0_106_0.html#commands-toc), this release has some more changes aimed at making `find` more cohesive. These include `find` being case-sensitive by default, and a more useful behavior for the `--multiline` flag. Thank you to [@new-years-eve] for your work both this release and last release in making `find` more useful!
Read [**more about `find` being case-sensitive**](#find-is-now-case-sensitive-by-default-16323), and [**more about the new --multiline behavior**](#new-behavior-for-find-multiline-16323).
-## `query xml` improvements
+## `query xml` improvements [[toc](#table-of-contents)]
The `nu_plugin_query` plugin ships with Nushell, and has a number of different commands that can help manipulate data formats that might otherwise be unwieldy. Thank you to [@weirdan] for spending some time to polish the `query xml` command. These changes should make it much nicer to use!
@@ -50,11 +98,11 @@ The `nu_plugin_query` plugin ships with Nushell, and has a number of different
These improvements also mean a number of a breaking changes, so if you use `query xml` make sure to take a look at the breaking changes!
:::
-# Changes
+# Changes [[toc](#table-of-contents)]
-## Breaking changes
+## Breaking changes [[toc](#table-of-contents)]
-### `find` is now case-sensitive by default ([#16323])
+### `find` is now case-sensitive by default ([#16323]) [[toc](#table-of-contents)]
The `find` command is now case-sensitive by default in all modes. Previously, you could use the `--ignore-case` flag to make `find` case-insensitive in the `--regex` mode, but the default "search term mode" would always be case-insensitive. Now, both modes are case-sensitive by default, and you can use the `--ignore-case` flag to make them case-insensitive.
@@ -69,7 +117,7 @@ alias find = find -i
:::
-### New behavior for `find --multiline` ([#16323])
+### New behavior for `find --multiline` ([#16323]) [[toc](#table-of-contents)]
Previously, `find` would always split multi-line input strings, making it impossible to perform proper multi-line regex matches unless a string was within list, table, or record. Now, the `--multiline` flag can be used to prevent this splitting, replacing its previous behavior of prepending `(?m)` to the regex.
@@ -86,7 +134,7 @@ hel[41mlo
wo[49mrl[0m
```
-### `each` now passes through `null` input ([#16396])
+### `each` now passes through `null` input ([#16396]) [[toc](#table-of-contents)]
When `null` is passed to the `each` command, it now returns `null` instead of passing `null` to the closure.
For example, before this change:
@@ -108,7 +156,7 @@ nothing[38;5;14m
>[0m
```
-### Change the output of `format bits` to big endian instead of native endian ([#16435])
+### Change the output of `format bits` to big endian instead of native endian ([#16435]) [[toc](#table-of-contents)]
While the most popular architectures use little endian, many people are used to reading binary numbers as big endian. However, until now, if you were in a little endian system, you would get:
@@ -131,7 +179,7 @@ Now, `format bits` always formats in big endian:
00000001 00000010[0m
```
-### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt` ([#16356])
+### Execution Order of Hooks Changed: `env_change` _before_ `pre_prompt` ([#16356]) [[toc](#table-of-contents)]
Before this release `env_change` hooks would execute _after_ `pre_prompt` hooks, and the prompt would be rendered after `env_change` hooks.
@@ -143,7 +191,7 @@ Now, order of execution is as follows:
- `pre_prompt` hooks
- Rendering the prompt with `PROMPT_COMMAND`
-### `query xml` returns scalar results when possible ([#16459])
+### `query xml` returns scalar results when possible ([#16459]) [[toc](#table-of-contents)]
Previously, `query xml` always returned a table, even for scalar results. Now scalar results will be returned as scalars.
@@ -166,7 +214,7 @@ Before this change, this would return:
Now, this will just return `false`.
-### Use fixed column name for `query xml` output ([#16461])
+### Use fixed column name for `query xml` output ([#16461]) [[toc](#table-of-contents)]
Previously, the `query xml` command outputs nodeset results in a table with a column name corresponding to the input expression. Now, the column name is fixed. This should make it easier to extract values from the output of `query xml`.
@@ -196,7 +244,7 @@ open -r tests/fixtures/formats/jt.xml
# => ╰───┴───────────────────────────────────────────╯
```
-### Add active column to `overlay list` ([#16125])
+### Add active column to `overlay list` ([#16125]) [[toc](#table-of-contents)]
`overlay list` now returns table instead of list of overlays. Before, only active overlays were included in `overlay list`. Now, hidden overlays will be included as well, and there is a column indicating whether a given overlay is hidden or not.
@@ -205,9 +253,9 @@ The ordering of `overlay list` is still preserved. If you run `overlay list | la
For migrating to the new behavior, you can update any usages of `overlay list | last` to `overlay list | last | get name`.
:::
-## Additions
+## Additions [[toc](#table-of-contents)]
-### `watch` streams events ([#16428])
+### `watch` streams events ([#16428]) [[toc](#table-of-contents)]
`watch` command can now be used to _return a stream_ of detected events instead of calling a closure with it's information, though using a closure is still possible and existing uses won't break.
@@ -229,16 +277,16 @@ watch .
| each { md-lint $in.path }
```
-### New `watch --debounce` option ([#16187])
+### New `watch --debounce` option ([#16187]) [[toc](#table-of-contents)]
The `watch` command now has `--debounce` flag, which takes a duration value. This will replace the `--debounce-ms` flag which takes an int rather than a duration, and will eventually take over its `-d` short flag.
-### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401])
+### `get`, `select`, `reject` can `--ignore-case` of cell-path ([#16401]) [[toc](#table-of-contents)]
`get`, `select`, `reject` commands now have a `--ignore-case` flag, which makes the commands interpret all cell-path arguments as completely case insensitive.
-### `--endian` flag for `into binary` ([#16466])
+### `--endian` flag for `into binary` ([#16466]) [[toc](#table-of-contents)]
Previously, converting values to `binary` with `into binary` could only do so in the native endianness of your platform. Using native endianness is still the default, but with the `--endian` flag, you get to choose:
@@ -253,7 +301,7 @@ Length: 8 (0x8) bytes | [1m[36mprintable [32mwhitespace [35mascii_other [33
Note that this only affects `int`, `float`, `filesize`, `bool` and `duration` (i.e. it does not affect `string`s, `date`s and `binary`). Likewise, only the individual elements in `table`s and `record`s are affected (not the `table` or `record` itself)
-### Spread `null` into collections or arguments ([#16399])
+### Spread `null` into collections or arguments ([#16399]) [[toc](#table-of-contents)]
`null` values can be used with the spread operator (`...`), behaving as if they were empty lists or records (whichever is appropriate for its place)
@@ -264,7 +312,7 @@ true[38;5;14m
true[0m
```
-### `http` subcommands now keep track of redirects ([#16078])
+### `http` subcommands now keep track of redirects ([#16078]) [[toc](#table-of-contents)]
The `http` subcommands can now maintain a list of redirects when using the `--full` flag. This will be stored in a new `urls` column:
@@ -285,7 +333,7 @@ This may break edge cases which relied on a lack of a `urls` column, for example
:::
-### New `random choice` command in `std-rfc` ([#16270])
+### New `random choice` command in `std-rfc` ([#16270]) [[toc](#table-of-contents)]
The `random choice` command has been added as a new candidate for our standard library. This command can randomly sample a number of elements from a list:
@@ -298,7 +346,7 @@ The `random choice` command has been added as a new candidate for our standard l
╰───┴───╯[0m
```
-### Add `str align` to `std-rfc/str` ([#16062])
+### Add `str align` to `std-rfc/str` ([#16062]) [[toc](#table-of-contents)]
The `std-rfc/str` module has new command in this release, `str align`. This command will look for a substring (such as a delimiter), and add padding so that it is in the same column in all lines. It can also take a range to only align any number of lines.
@@ -312,7 +360,7 @@ four = 4
five = 5[0m
```
-### JSON column support for `stor` and `query db` ([#16258])
+### JSON column support for `stor` and `query db` ([#16258]) [[toc](#table-of-contents)]
The `stor create/insert/open` and `query db` commands now support JSON and JSONB columns. This lets you store more kinds of structured data directly inside of an SQLite database without an explicit `to`/`from` step.
@@ -352,7 +400,7 @@ Here's an example of storing a simple table inside a `stor` database, and retrie
╰───┴───────────╯[0m
```
-### Extend nodeset output formats for `query xml` ([#16465])
+### Extend nodeset output formats for `query xml` ([#16465]) [[toc](#table-of-contents)]
`query xml` now can output additional information when it returns Nodesets:
@@ -362,7 +410,7 @@ Here's an example of storing a simple table inside a `stor` database, and retrie
If you're using any of the `--output-*` switches, and want `string_value` column to show up, pass `--output-string-value` explicitly. In the absence of any `--output-*` attributes, `--output-string-value` is assumed to be on.
-### New keybinding: `vichangemode` ([#16327])
+### New keybinding: `vichangemode` ([#16327]) [[toc](#table-of-contents)]
You can now set bindings which change the Vi mode.
To do so send a `vichangemode` event with the `mode` field to set `normal`, `insert`, or `visual`
@@ -380,7 +428,7 @@ $env.config.keybindings ++=
The available modifiers and keycodes, remain limited to single character bindings with modifiers. We don't yet provide access to the key-chord parsing of the vi mode.
-### Add `-h/--help` flag to testbin ([#16196])
+### Add `-h/--help` flag to testbin ([#16196]) [[toc](#table-of-contents)]
`nu --testbin` has a new flag `-h` to show available \
@@ -406,7 +454,7 @@ repeat_bytes -> A version of repeater that can output binary data, even null byt
repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
```
-### Other additions
+### Other additions [[toc](#table-of-contents)]
- The `commandline edit` command has a new flag `--accept` (or `-A`) which immediately executes the resulting commandline. ([#16193])
@@ -418,21 +466,21 @@ repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
- `std-rfc/kv` commands now take an optional `--table (-t)` argument which allows a custom table name to be used. If not specified, the current `std-kv-store` table will be used. ([#16450])
-## Deprecations
+## Deprecations [[toc](#table-of-contents)]
-### Built-in `random dice` deprecated
+### Built-in `random dice` deprecated [[toc](#table-of-contents)]
With `random dice` being moved to `std`, the built-in command is no longer necessary. See [`random dice` moved to `std`](#random-dice-moved-to-std-16420) for more information.
-### Deprecate `watch --debounce-ms` ([#16187])
+### Deprecate `watch --debounce-ms` ([#16187]) [[toc](#table-of-contents)]
> TODO(release-notes): verify link works after generating ToC
With the new [watch --debounce option](#new-watch-duration-option-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
-## Other changes
+## Other changes [[toc](#table-of-contents)]
-### `random dice` moved to `std` ([#16420])
+### `random dice` moved to `std` ([#16420]) [[toc](#table-of-contents)]
The `random dice` command has been rewritten in Nushell and moved to the standard library. The `random dice` built-in is still available with a deprecation error, but will be removed in 0.108. The new command can be used as follows:
@@ -446,14 +494,14 @@ The `random dice` command has been rewritten in Nushell and moved to the standar
It's behavior, parameters, and defaults are the same.
-### `http` commands will now fail on invalid headers ([#16078])
+### `http` commands will now fail on invalid headers ([#16078]) [[toc](#table-of-contents)]
Before, non-UTF-8 headers would be silently ignored. Now, these will cause an error. Here's an example which uses two Nushell instances to demonstrate this.
In one Nushell instance, we create something resembling an HTTP server on port 1234:
```nu
-["HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: " 0x[1F FF AA AA] "\r\n\r\n"]
+["HTTP/1.1 200 OK\r\nContent-Length: 0\r\nx-header: " 0x[1F FF AA AA] "\r\n\r\n"]
| each { into binary }
| bytes collect
| ncat -l 1234
@@ -473,7 +521,7 @@ In another instance, we connect to port 1234. The `x-header` is not valid UTF-8,
[39m╰────[0m
```
-### `http post` now sends body serialized as pretty json ([#16078])
+### `http post` now sends body serialized as pretty json ([#16078]) [[toc](#table-of-contents)]
Before, `http post` would serialize values as raw JSON. Now, the JSON will be serialized into the pretty format. Note that this increases the body size.
@@ -503,7 +551,7 @@ content-type: application/json; charset=utf-8
}
```
-### Improved error messages for misspelled flags ([#16427])
+### Improved error messages for misspelled flags ([#16427]) [[toc](#table-of-contents)]
Previously, the help text for a missing flag would list all of them, which could get verbose on a single line:
@@ -536,9 +584,9 @@ Error: [31mnu::parser::unknown_flag
help: [39mDid you mean: `--full-paths`?[0m
```
-### Improved default color theme ([#16509])
+### Improved default color theme ([#16509]) [[toc](#table-of-contents)]
-We changed the default theme to use the ANSI default color (`39m`) instead of white (`37m`).
+We changed the default theme to use the ANSI default color (`39m`) instead of white (`37m`).
This finally makes the default theme usable in the context of light terminal color settings. On dark terminal palettes this change should have no impact.
Comparison of white vs default color on Solarized Light theme, before and after:
@@ -548,7 +596,7 @@ Comparison of white vs default color on Solarized Light theme, before and after:
-### Reset content type for commands returning partial input ([#16500])
+### Reset content type for commands returning partial input ([#16500]) [[toc](#table-of-contents)]
The following commands no longer preserve `content_type` element of the input metadata:
@@ -559,7 +607,7 @@ The following commands no longer preserve `content_type` element of the input me
- `take` - see `first`
- `str substring` - a random string slice of `application/json` isn't likely to be a valid `application/json` value
-### Additional changes
+### Additional changes [[toc](#table-of-contents)]
- Trying to execute a non-existent script file used to return a confusing error pointing to an internal source code path. That error now points to the script file argument in the commandline. ([#16273])
@@ -569,9 +617,9 @@ The following commands no longer preserve `content_type` element of the input me
- `query xml` now has `xml:` namespace prefix available by default, without the need to specify it via `--namespaces`. ([#16472])
-## Bug fixes
+## Bug fixes [[toc](#table-of-contents)]
-### Fix highlighting of aliases to external commands ([#15408])
+### Fix highlighting of aliases to external commands ([#15408]) [[toc](#table-of-contents)]
Aliases to external commands will now be properly highlighted as external commands.
@@ -597,7 +645,7 @@ internal-alias[0m; [0;1m[31mexternal-alias[0m; [0;1m[31munresolvable-alias
internal-alias[0m; [0;1m[33mexternal-alias[0m; [0;1m[31munresolvable-alias[0m; [0;1m[31mbash[0m;
```
-### `input list` Plays Nicely With Styled Input ([#16276])
+### `input list` Plays Nicely With Styled Input ([#16276]) [[toc](#table-of-contents)]
`input list` had some trouble dealing with ANSI styled inputs, such as:
@@ -616,7 +664,7 @@ Here's a before/after comparison:
[fuzzy-before]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-before.svg
[fuzzy-fixed]: https://gist.githubusercontent.com/Bahex/ee2fe5074a9e2368913879159e70998c/raw/8fe913647280191f137023447c84f685e825659e/fuzzy-after.svg
-### Fixed spacing of `help` examples ([#16353])
+### Fixed spacing of `help` examples ([#16353]) [[toc](#table-of-contents)]
`help` command used to trim the outputs of examples, which could result in inconsistent white space:
@@ -645,7 +693,7 @@ $env.config.table = {mode: light, padding: {left: 1}, header_on_separator: false
KeyC ads
```
-### Prevent `detect columns` from creating invalid records with duplicate keys ([#16527])
+### Prevent `detect columns` from creating invalid records with duplicate keys ([#16527]) [[toc](#table-of-contents)]
Previously `detect columns` created records (rows) with duplicate key names under some circumstances. The resulting table behaved inconsistently with different commands:
@@ -677,12 +725,12 @@ Error: [31mnu::shell::failed_to_detect_columns
╰────[0m
```
-### Improvements to errors
+### Improvements to errors [[toc](#table-of-contents)]
This release has a number of improvements to errors in specific circumstances:
- Improve errors for subcommands without a corresponding parent command ([#16529])
-
+
Added missing parent ('namespace') commands to improve error reporting:
- `attr`
- `detect`
@@ -700,7 +748,7 @@ This release has a number of improvements to errors in specific circumstances:
- The error shown when attempting to run a non-const command in a const-eval context is now more precise. ([#16393])
-### Other fixes
+### Other fixes [[toc](#table-of-contents)]
- Short flags which require a value should now properly be tracked by the parser. Previously, something like the `-a` in `table -a` wouldn't be properly highlighted if no value for `-a` was provided. This also means that the `ast` command will now properly account for these flags. ([#16376])
@@ -732,7 +780,7 @@ This release has a number of improvements to errors in specific circumstances:
- The `polars fill-null` command previously only allowed dataframes as inputs. Now, `polars fill-null` also accepts expressions as an input type. ([#16444])
-# Hall of fame
+# Hall of fame [[toc](#table-of-contents)]
Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! :pray:
@@ -784,7 +832,7 @@ Thanks to all the contributors below for helping us solve issues, improve docume
| [@sholderbach] | Fix issue form syntax | [#16541] |
| [@ItsHarper] | Fix incorrect documentation of the default behavior of the `bits rol`, `bits ror`, `bits shl`, and `bits shr` commands when the `--number-bytes` flag is not provided | [#16542] |
-# Full changelog
+# Full changelog [[toc](#table-of-contents)]
| author | title | link |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
From 2f6cbc71820559f8d16e928109a70336aed9466e Mon Sep 17 00:00:00 2001
From: 132ikl <132@ikl.sh>
Date: Tue, 2 Sep 2025 20:17:37 -0400
Subject: [PATCH 24/24] Fix links after toc
---
blog/2025-09-02-nushell_0_107_0.md | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/blog/2025-09-02-nushell_0_107_0.md b/blog/2025-09-02-nushell_0_107_0.md
index 63a53422b63..dcc7d5534f8 100644
--- a/blog/2025-09-02-nushell_0_107_0.md
+++ b/blog/2025-09-02-nushell_0_107_0.md
@@ -66,7 +66,6 @@ As part of this release, we also publish a set of optional [plugins](https://www
- [_Other fixes_](#other-fixes-toc)
- [_Hall of fame_](#hall-of-fame-toc)
- [_Full changelog_](#full-changelog-toc)
-
# Highlights and themes of this release [[toc](#table-of-contents)]
@@ -76,13 +75,13 @@ This release features a couple additions to the `watch` command. The `watch` com
The `watch` command also has a "new" flag: `--debounce`. Fans of the `watch` command might be scratching their heads, since a very similar option already exists: `--debounce-ms`. This flag prevents events in rapid succession from being detected. The `--debounce` (no `-ms`) flag does the same thing, but with a proper duration value rather than an integer. Thanks to [@lucascherzer] for this addition!
-Read [**more about `watch` event streaming**](#watch-streams-events-16428), or read [**more about the `--debounce` flag**](#new-watch-debounce-option-16187) and the [**corresponding deprecation of `--debounce-ms`**](#deprecate-watch-debounce-ms-16187).
+Read [**more about `watch` event streaming**](#watch-streams-events-16428-toc), or read [**more about the `--debounce` flag**](#new-watch-debounce-option-16187-toc) and the [**corresponding deprecation of `--debounce-ms`**](#deprecate-watch-debounce-ms-16187-toc).
## Making `find` more cohesive [[toc](#table-of-contents)]
Following [last release's improvements to the `find` command](/blog/2025-07-23-nushell_0_106_0.html#commands-toc), this release has some more changes aimed at making `find` more cohesive. These include `find` being case-sensitive by default, and a more useful behavior for the `--multiline` flag. Thank you to [@new-years-eve] for your work both this release and last release in making `find` more useful!
-Read [**more about `find` being case-sensitive**](#find-is-now-case-sensitive-by-default-16323), and [**more about the new --multiline behavior**](#new-behavior-for-find-multiline-16323).
+Read [**more about `find` being case-sensitive**](#find-is-now-case-sensitive-by-default-16323-toc), and [**more about the new --multiline behavior**](#new-behavior-for-find-multiline-16323-toc).
## `query xml` improvements [[toc](#table-of-contents)]
@@ -90,9 +89,9 @@ The `nu_plugin_query` plugin ships with Nushell, and has a number of different
**Read more about these improvements**:
-* [Returning scalar results, rather than putting all output into tables](#query-xml-returns-scalar-results-when-possible-16459)
-* [Using a fixed column name, instead of a name based on the input expression](#use-fixed-column-name-for-query-xml-output-16461)
-* [Additional information with nodeset outputs](#extend-nodeset-output-formats-for-query-xml-16465)
+* [Returning scalar results, rather than putting all output into tables](#query-xml-returns-scalar-results-when-possible-16459-toc)
+* [Using a fixed column name, instead of a name based on the input expression](#use-fixed-column-name-for-query-xml-output-16461-toc)
+* [Additional information with nodeset outputs](#extend-nodeset-output-formats-for-query-xml-16465-toc)
::: warning
These improvements also mean a number of a breaking changes, so if you use `query xml` make sure to take a look at the breaking changes!
@@ -470,13 +469,11 @@ repeater -> Repeat a string or char N times(e.g: nu --testbin repeater a 5)[0m
### Built-in `random dice` deprecated [[toc](#table-of-contents)]
-With `random dice` being moved to `std`, the built-in command is no longer necessary. See [`random dice` moved to `std`](#random-dice-moved-to-std-16420) for more information.
+With `random dice` being moved to `std`, the built-in command is no longer necessary. See [`random dice` moved to `std`](#random-dice-moved-to-std-16420-toc) for more information.
### Deprecate `watch --debounce-ms` ([#16187]) [[toc](#table-of-contents)]
-> TODO(release-notes): verify link works after generating ToC
-
-With the new [watch --debounce option](#new-watch-duration-option-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
+With the new [watch --debounce option](#new-watch-debounce-option-16187-toc), the `--debounce-ms` option is no longer necessary. Use `watch --debounce` with a duration value instead.
## Other changes [[toc](#table-of-contents)]