diff --git a/blog/2025-06-10-nushell_0_105_0.md b/blog/2025-06-10-nushell_0_105_0.md new file mode 100644 index 00000000000..ca900908394 --- /dev/null +++ b/blog/2025-06-10-nushell_0_105_0.md @@ -0,0 +1,586 @@ +--- +title: Nushell 0.105.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.105.0 of Nu. This release adds support for stored closures in the `where` command, making `filter` obsolete, improved deprecation tools for custom commands, case-sensitive cell-path handling with new syntax for case-insensitivity, a powerful new `recurse` command to explore nested data, a full switch from OpenSSL to Rustls for simpler Linux builds, smarter HTTP commands that add `http://` by default, and several new features and improvements to Polars integration. +--- + + + +# Nushell 0.105.0 + +Today, we're releasing version 0.105.0 of Nu. This release adds support for stored closures in the `where` command, making `filter` obsolete, improved deprecation tools for custom commands, case-sensitive cell-path handling with new syntax for case-insensitivity, a powerful new `recurse` command to explore nested data, a full switch from OpenSSL to Rustls for simpler Linux builds, smarter HTTP commands that add `http://` by default, and several new features and improvements to Polars integration. + +Thank you to all those who have contributed to this release through the PRs below, issues and suggestions leading to those changes, and Discord discussions. + +# Where to get it + +Nu 0.105.0 is available as [pre-built binaries](https://github.com/nushell/nushell/releases/tag/0.105.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_](#highlights-and-themes-of-this-release-toc) + - [_One `where` to rule them all_](#one-where-to-rule-them-all-toc) + - [_Better deprecations_](#better-deprecations-toc) + - [_`oneof` the things_](#oneof-the-things-toc) + - [_Case-sensitive cell-paths or not`!`_](#case-sensitive-cell-paths-or-not-toc) + - [_`recurse`'ively explore nested values_](#recurse-ively-explore-nested-values-toc) + - [_No more `openssl`_](#no-more-openssl-toc) + - [_Better Windows releases_](#better-windows-releases-toc) + - [_HTTP by default_](#http-by-default-toc) + - [_More Polars_](#more-polars-toc) +- [_Changes_](#changes-toc) + - [_Additions_](#additions-toc) + - [_Ignore fields in simple `parse` patterns with `_`_](#ignore-fields-in-simple-parse-patterns-with-toc) + - [_Lazy closure evaluation for `default`_](#lazy-closure-evaluation-for-default-toc) + - [_`path join` can now read byte stream input_](#path-join-can-now-read-byte-stream-input-toc) + - [_`run-external` spreads command if it's a list_](#run-external-spreads-command-if-it-s-a-list-toc) + - [_Improvements to `bench`_](#improvements-to-bench-toc) + - [_`overlay new -r` can now reset overlays_](#overlay-new-r-can-now-reset-overlays-toc) + - [_See env variables as externals would_](#see-env-variables-as-externals-would-toc) + - [_Use PowerShell scripts from the `$env.PATH`_](#use-powershell-scripts-from-the-env-path-toc) + - [_Make your table look like they are from neovim_](#make-your-table-look-like-they-are-from-neovim-toc) + - [_Center columns via `to md --center`_](#center-columns-via-to-md-center-toc) + - [_Prefer OSC 9;9 on Windows over OSC 7_](#prefer-osc-9-9-on-windows-over-osc-7-toc) + - [_Disable expensive calculations with `gstat --disable-tag`_](#disable-expensive-calculations-with-gstat-disable-tag-toc) + - [_Know what `open` and `save` can do with `std/help`_](#know-what-open-and-save-can-do-with-std-help-toc) + - [_Content type of `view span`_](#content-type-of-view-span-toc) + - [_Breaking changes_](#breaking-changes-toc) + - [_Cell-paths with case-sensitivity and without`!`_](#cell-paths-with-case-sensitivity-and-without-toc) + - [_Paths on lazy frames now produce expressions_](#paths-on-lazy-frames-now-produce-expressions-toc) + - [_Bug fixes and other changes_](#bug-fixes-and-other-changes-toc) +- [_Notes for plugin developers_](#notes-for-plugin-developers-toc) + - [_Construct `IoError` from `std::io::Error` instead of `std::io::ErrorKind`_](#construct-ioerror-from-std-io-error-instead-of-std-io-errorkind-toc) +- [_Hall of fame_](#hall-of-fame-toc) +- [_Full changelog_](#full-changelog-toc) + + +# Highlights and themes of this release [[toc](#table-of-contents)] + + + + +## One `where` to rule them all [[toc](#table-of-contents)] + +`where` used to support only row conditions and literal closures for filtering rows. +If you wanted to use stored closures, you had to use `filter`. + +In [#15697](https://github.com/nushell/nushell/pull/15697), [@Bahex](https://github.com/Bahex) added stored closure support to `where`, making `filter` obsolete. Because of this, `filter` was marked deprecated in [#15867](https://github.com/nushell/nushell/pull/15867). +[@132ikl](https://github.com/132ikl) updated the docs accordingly in [#15467](https://github.com/nushell/nushell/pull/15467). + +Now, `where` can be used as a drop-in replacement for `filter`. + +## Better deprecations [[toc](#table-of-contents)] + +You can now use the `@deprecated` attribute on custom commands to mark them as deprecated, thanks to [@132ikl](https://github.com/132ikl) in [#15770](https://github.com/nushell/nushell/pull/15770). Pass a string as the first argument to show a custom deprecation message. You can also add flags to give more details: + +- `--flag`: mark a flag as deprecated +- `--since`: specify when the deprecation started +- `--remove`: indicate when this command or flag will be removed +- `--report`: use `"first"` or `"every"` to control how often users see the warning + +For example: + +```nu +@deprecated "Use my-new-command instead." +@category deprecated +def my-old-command [] {} +``` + +## `oneof` the things [[toc](#table-of-contents)] + +Built-in commands have long used `SyntaxShape::OneOf` to accept multiple possible types. +Custom commands couldn't do this until [#15646](https://github.com/nushell/nushell/pull/15646), when [@Bahex](https://github.com/Bahex) added the `oneof<...>` type to declare type alternatives. + +Example: + +```nu +def foo [ + param: oneof +] { .. } +``` + +## Case-sensitive cell-paths or not`!` [[toc](#table-of-contents)] + +Before, it wasn't clear if cell-paths were case-sensitive, so some commands expected case sensitivity while others didn't. +[@Bahex](https://github.com/Bahex) fixed this in [#15692](https://github.com/nushell/nushell/pull/15692). + +Now, all cell-paths are case-sensitive by default. +If you add a `!` after a path element, that element becomes case-insensitive. + +For example, `foo.bar!.baz` matches: + +* `foo.bar.baz` +* `foo.BAR.baz` +* `foo.BaR.baz` + +but not: + +* `FOO.bar.baz` +* `foo.BAR.BAZ` + +The `--sensitive` and `--insensitive` flags still work but some are now deprecated. +`$env` remains a special record with always case-insensitive cell-paths. + +You can also use the new syntax to say: get `"foo"` case-insensitively, or return nothing if not found: `get foo?!`. + +## `recurse`'ively explore nested values [[toc](#table-of-contents)] + +This release adds a new `recurse` command in `std-rfc/iter`, as an equivalent to jq's `recurse`/`..`. + +It recursively descends its input and returns a stream of all "descendant" values, along with their cell-path relative to the input value. +It is especially useful for exploring and searching through deep trees. + +```nu +{ + "foo": { + "egg": "X" + "spam": "Y" + } + "bar": { + "quox": ["A" "B"] + } +} +| recurse +| update item { to nuon } +# => ╭───┬──────────────┬───────────────────────────────────────────────╮ +# => │ # │ path │ item │ +# => ├───┼──────────────┼───────────────────────────────────────────────┤ +# => │ 0 │ $. │ {foo: {egg: X, spam: Y}, bar: {quox: [A, B]}} │ +# => │ 1 │ $.foo │ {egg: X, spam: Y} │ +# => │ 2 │ $.bar │ {quox: [A, B]} │ +# => │ 3 │ $.foo.egg │ "X" │ +# => │ 4 │ $.foo.spam │ "Y" │ +# => │ 5 │ $.bar.quox │ [A, B] │ +# => │ 6 │ $.bar.quox.0 │ "A" │ +# => │ 7 │ $.bar.quox.1 │ "B" │ +# => ╰───┴──────────────┴───────────────────────────────────────────────╯ +``` + +`recurse` can also take a cell-path (or even a closure) to limit how it descends through its input, making it well suited to dealing with document formats like XML. +Here's an example using it to extract titles from the Nushell RSS feed: +```nu +http get 'https://www.nushell.sh/rss.xml' +| recurse content +| get item +| where ($it | describe -d).type == record and $it.tag? == title +| get content.content +| flatten +# => Nushell +# => This Week in Nushell #302 +# => This Week in Nushell #301 +# => Nushell 0.104.1 +# => This Week in Nushell #300 +# => This Week in Nushell #299 +# => This Week in Nushell #298 +# => This Week in Nushell #297 +# => Nushell 0.104.0 +# => This week in Nushell #296 +``` + +## No more `openssl` [[toc](#table-of-contents)] + +If you've built nushell on Linux, you probably had to install openssl libraries because we linked to it by default. +This version switches fully to [rustls](https://github.com/rustls/rustls), a pure Rust TLS library, making builds simpler. +The change was made by [@cptpiepmatz](https://github.com/cptpiepmatz) in [#15810](https://github.com/nushell/nushell/pull/15810), and [#15812](https://github.com/nushell/nushell/pull/15812) added support for older platforms. + +If you still need openssl, build with `--no-default-features --features plugin,trash-support,sqlite,native-tls`. + +## Better Windows releases [[toc](#table-of-contents)] + +Thanks to [@hustcer](https://github.com/hustcer), our Windows releases are now much improved. +Check out the [Nushell 0.104.1 blog post](https://www.nushell.sh/blog/2025-05-23-nushell_0_104_1.html) for more details. + +## HTTP by default [[toc](#table-of-contents)] + +Running `http get example.com` used to fail because the command needed a full URL. +[@noahfraiture](https://github.com/noahfraiture) fixed this in [#15804](https://github.com/nushell/nushell/pull/15804) by letting Nushell add `http://` when the scheme is missing. + +Now you can write: +- `http get example.com` +- `http get :8000` goes to [http://localhost:8000](http://localhost:8000) + +## More Polars [[toc](#table-of-contents)] + +This release adds several new `polars` commands: + +* `polars struct-encode-json` by [@ayax79](https://github.com/ayax79) in [#15678](https://github.com/nushell/nushell/pull/15678) +* `polars horizontal` by [@pyz4](https://github.com/pyz4) in [#15656](https://github.com/nushell/nushell/pull/15656) +* `polars replace` by [@pyz4](https://github.com/pyz4) in [#15706](https://github.com/nushell/nushell/pull/15706) + +Also, `polars first` now works with `polars group-by` thanks to [@ayax79](https://github.com/ayax79) in [#15855](https://github.com/nushell/nushell/pull/15855). + +Thanks to [@pyz4](https://github.com/pyz4), `polars unique` ([#15771](https://github.com/nushell/nushell/pull/15771)), `polars shift` ([#15834](https://github.com/nushell/nushell/pull/15834)), and `polars group-by --maintain-order` ([#15865](https://github.com/nushell/nushell/pull/15865)) now accept expression inputs. + +[@pyz4](https://github.com/pyz4) also added new `polars math` expressions in [#15822](https://github.com/nushell/nushell/pull/15822). + +# Changes [[toc](#table-of-contents)] + +## Additions [[toc](#table-of-contents)] + +### Ignore fields in simple `parse` patterns with `_` [[toc](#table-of-contents)] + +[@132ikl](https://github.com/132ikl) added the option to use the placeholder `_` to ignore fields in [#15873](https://github.com/nushell/nushell/pull/15873). + +```nu +"hello world" | parse "{foo} {_}" +# => ╭───┬───────╮ +# => │ # │ foo │ +# => ├───┼───────┤ +# => │ 0 │ hello │ +# => ╰───┴───────╯ +``` + +### Lazy closure evaluation for `default` [[toc](#table-of-contents)] + +`default` can now take a closure for a default value instead of a direct value thanks to [@Mrfiregem](https://github.com/Mrfiregem) in [#15654](https://github.com/nushell/nushell/pull/15654). +These closure are lazily evaluated and cached. + +```nu +ls | default { sleep 5sec; 'N/A' } name # => No-op since `name` column is never empty +ls | default { sleep 5sec; 'N/A' } foo bar # => creates columns `foo` and `bar`; only takes 5 seconds since closure result is cached +``` + +### `path join` can now read byte stream input [[toc](#table-of-contents)] + +When commands return a path, thanks to [@Mrfiregem](https://github.com/Mrfiregem) in [#15736](https://github.com/nushell/nushell/pull/15736), you can now call `path join` directly without having to use `collect`. + +```nu +^pwd | path join foo +``` + +### `run-external` spreads command if it's a list [[toc](#table-of-contents)] + +With the addition of [#15776](https://github.com/nushell/nushell/pull/15776) by [@Mrfiregem](https://github.com/Mrfiregem), `run-external` (or calling an external) can now use a list to support arguments. + +```nu +$env.config.buffer_editor = ["emacsclient", "-s", "light", "-t"] +run-external $env.config.buffer_editor foo.text +``` + +### Improvements to `bench` [[toc](#table-of-contents)] + +[@Tyarel8](https://github.com/Tyarel8) added some improvements to `bench` in [#15843](https://github.com/nushell/nushell/pull/15843) and [#15856](https://github.com/nushell/nushell/pull/15856). +It is now possible to pass multiple closures into `bench` to compare and added the flags: +- `--warmup` +- `--setup` +- `--prepare` +- `--cleanup` +- `--conclude` +- `--ignore-errors` + +### `overlay new -r` can now reset overlays [[toc](#table-of-contents)] + +[@WindSoilder](https://github.com/WindSoilder) added the option to reset new overlays via `overlay new -r` in [#15849](https://github.com/nushell/nushell/pull/15849). + +### See env variables as externals would [[toc](#table-of-contents)] + +In [#15875](https://github.com/nushell/nushell/pull/15875) did [@cptpiepmatz](https://github.com/cptpiepmatz) add the command `debug env` to get a record of how an external would get the environment variables. +This includes handling the `$env.PATH` and all env conversions. + +### Use PowerShell scripts from the `$env.PATH` [[toc](#table-of-contents)] + +[@fdncred](https://github.com/fdncred) made it possible in [#15760](https://github.com/nushell/nushell/pull/15760) to execute powershell scripts from anywhere if they are in the `$env.PATH`. + +### Make your table look like they are from neovim [[toc](#table-of-contents)] + +[@gmr458](https://github.com/gmr458) added the new table mode `"single"` to `$env.config.table.mode` in [#15672](https://github.com/nushell/nushell/pull/15672). +It looks like the `"default"` with sharp corners or `"heavy"` with thinner lines: + +```nu +$env.config.table.mode = "single" +scope commands | select name category | first 2 +# => ┌───┬───────┬──────────┐ +# => │ # │ name │ category │ +# => ├───┼───────┼──────────┤ +# => │ 0 │ alias │ core │ +# => │ 1 │ all │ filters │ +# => └───┴───────┴──────────┘ +``` + +### Center columns via `to md --center` [[toc](#table-of-contents)] + +[@lazenga](https://github.com/lazenga) added in [#15861](https://github.com/nushell/nushell/pull/15861) the flag `--center` to `to md`. +With it you can pass a list of cell-paths to center in the markdown output. + +```nu +version | select version build_time | transpose k v | to md --center [v] --pretty +# => | k | v | +# => | ---------- |:--------------------------:| +# => | version | 0.104.2 | +# => | build_time | 2025-06-08 23:31:40 +02:00 | +``` + +### Prefer OSC 9;9 on Windows over OSC 7 [[toc](#table-of-contents)] + +[@ofek](https://github.com/ofek) made `$env.config.shell_integration.osc7 = false` by default on Windows in favor of `$env.config.shell_integration.osc9_9 = true` in [#15914](https://github.com/nushell/nushell/pull/15914). + +### Disable expensive calculations with `gstat --disable-tag` [[toc](#table-of-contents)] + +In [#15893](https://github.com/nushell/nushell/pull/15893) did [@snickerdoodle2](https://github.com/snickerdoodle2) add the option `--disable-tag` to disable some of the heavy calculations of the `gstat` plugin. + +### Know what `open` and `save` can do with `std/help` [[toc](#table-of-contents)] + +`open` and `save` can use `from` and `to` to convert data types. +With the addition of [@weirdan](https://github.com/weirdan) in [#15651](https://github.com/nushell/nushell/pull/15651), +the `std/help` command can now show these conversions. + +### Content type of `view span` [[toc](#table-of-contents)] + +[@weirdan](https://github.com/weirdan) added in [#15842](https://github.com/nushell/nushell/pull/15842) a content type to `view span`. +If your display hook highlights content types, will this be a nice addition. + +## Breaking changes [[toc](#table-of-contents)] + +### Cell-paths with case-sensitivity and without`!` [[toc](#table-of-contents)] + +The new cell-path syntax `!`, introduced by [@Bahex](https://github.com/Bahex) in [#15692](https://github.com/nushell/nushell/pull/15692), may break some commands. +If your commands relied on case-insensitive paths, please check your code. + +### Paths on lazy frames now produce expressions [[toc](#table-of-contents)] + +Thanks to [@ayax79](https://github.com/ayax79) in [#15891](https://github.com/nushell/nushell/pull/15891), paths on lazy frames now generate expressions. +You will need to use `polar collect` to evaluate them. + +## Bug fixes and other changes [[toc](#table-of-contents)] + + +|author|title|link| +|-|-|-| +|[@Bahex](https://github.com/Bahex)|fix parsing of bare word string interpolations that start with a sub expression|[#15735](https://github.com/nushell/nushell/pull/15735)| +|[@Bahex](https://github.com/Bahex)|fix: implicitly running .ps1 scripts with spaces in path|[#15781](https://github.com/nushell/nushell/pull/15781)| +|[@CSharperMantle](https://github.com/CSharperMantle)|Correctly quote `nu.exe` and `nu.ico` path containing spaces in WiX|[#15881](https://github.com/nushell/nushell/pull/15881)| +|[@CSharperMantle](https://github.com/CSharperMantle)|Fixup: Fix regression caused by #15881|[#15889](https://github.com/nushell/nushell/pull/15889)| +|[@Cattle0Horse](https://github.com/Cattle0Horse)|fix(std/iter): align example descriptions with closure logic for find and find-index|[#15895](https://github.com/nushell/nushell/pull/15895)| +|[@LazyPluto](https://github.com/LazyPluto)|fix: empty tables now respect `$env.config.use_ansi_coloring` (closes #14896)|[#15751](https://github.com/nushell/nushell/pull/15751)| +|[@Tyarel8](https://github.com/Tyarel8)|fix duplicate short_name in `ansi` command|[#15767](https://github.com/nushell/nushell/pull/15767)| +|[@WindSoilder](https://github.com/WindSoilder)|`source`: make sure the block is compiled when parsing|[#15798](https://github.com/nushell/nushell/pull/15798)| +|[@atahabaki](https://github.com/atahabaki)|Numbers proceeded with the escape character ignored fix|[#15684](https://github.com/nushell/nushell/pull/15684)| +|[@ayax79](https://github.com/ayax79)|Fix for null handling #15788|[#15857](https://github.com/nushell/nushell/pull/15857)| +|[@blindFS](https://github.com/blindFS)|fix(parser): namespace pollution of constants by `use module.nu`|[#15518](https://github.com/nushell/nushell/pull/15518)| +|[@blindFS](https://github.com/blindFS)|fix: inefficient select with large row number|[#15730](https://github.com/nushell/nushell/pull/15730)| +|[@cablehead](https://github.com/cablehead)|fix: clear jobs _after_ traversing jobs for kill_all|[#15685](https://github.com/nushell/nushell/pull/15685)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Add `rustls` for TLS|[#15810](https://github.com/nushell/nushell/pull/15810)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix: use `ring` as a crypto provider instead of `aws_lc`|[#15812](https://github.com/nushell/nushell/pull/15812)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix: Downgrade calamine to 0.26 to fix build without `--locked`|[#15908](https://github.com/nushell/nushell/pull/15908)| +|[@fdncred](https://github.com/fdncred)|make sure new nul chars don't print in `char --list`|[#15858](https://github.com/nushell/nushell/pull/15858)| +|[@fdncred](https://github.com/fdncred)|make `date humanize` use `human_time_from_now()`|[#15918](https://github.com/nushell/nushell/pull/15918)| +|[@hustcer](https://github.com/hustcer)|Fix Windows arm64 release binaries and winget related issues|[#15690](https://github.com/nushell/nushell/pull/15690)| +|[@hustcer](https://github.com/hustcer)|Fix build failure of aarch64 and armv7 musl targets|[#15835](https://github.com/nushell/nushell/pull/15835)| +|[@hustcer](https://github.com/hustcer)|Try to fix PAT issue of winget publish account|[#15922](https://github.com/nushell/nushell/pull/15922)| +|[@jjflash95](https://github.com/jjflash95)|Fix #15571 panic on write to source parquet file|[#15601](https://github.com/nushell/nushell/pull/15601)| +|[@kamek-pf](https://github.com/kamek-pf)|fix(glob): Fix drive-letter glob expansion on Windows|[#15871](https://github.com/nushell/nushell/pull/15871)| +|[@kumarUjjawal](https://github.com/kumarUjjawal)|fix(which): remove required positional argument to allow spread input|[#15870](https://github.com/nushell/nushell/pull/15870)| +|[@luismeyer95](https://github.com/luismeyer95)|fix(parser): don't parse closure in block position (fixes #15417)|[#15680](https://github.com/nushell/nushell/pull/15680)| +|[@pyz4](https://github.com/pyz4)|fix(polars): add Value::Record to `NuExpression::can_downcast` logic|[#15826](https://github.com/nushell/nushell/pull/15826)| +|[@pyz4](https://github.com/pyz4)|fix(polars): swap out pivot for pivot_stable to suppress warning message|[#15913](https://github.com/nushell/nushell/pull/15913)| +|[@rritik772](https://github.com/rritik772)|[FIX] #15813 passing infinity to random float generate causes error|[#15818](https://github.com/nushell/nushell/pull/15818)| +|[@ysthakur](https://github.com/ysthakur)|Handle multiple exact matches|[#15772](https://github.com/nushell/nushell/pull/15772)| +|[@zhiburt](https://github.com/zhiburt)|Fix table wrap emojie|[#15138](https://github.com/nushell/nushell/pull/15138)| +|[@zhiburt](https://github.com/zhiburt)|nu-table/ 1 refactoring + a few optimizations + small fix|[#15653](https://github.com/nushell/nushell/pull/15653)| +|[@zhiburt](https://github.com/zhiburt)|Fix #15653 regression with not counting padding properly|[#15704](https://github.com/nushell/nushell/pull/15704)| +|[@zhiburt](https://github.com/zhiburt)|nu-table: (table --expand) Remove unnecessary use of truncate logic|[#15727](https://github.com/nushell/nushell/pull/15727)| + +# Notes for plugin developers [[toc](#table-of-contents)] + +## Construct `IoError` from `std::io::Error` instead of `std::io::ErrorKind` [[toc](#table-of-contents)] + +To give us better control over IO errors, [@cptpiepmatz](https://github.com/cptpiepmatz) changed in [#15777](https://github.com/nushell/nushell/pull/15777) how `IoError`s are created. Now they’re built directly from `std::io::Error` instead of just the `ErrorKind`. +Just remove the calls to `.kind()` and you're good to go. + +# 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: + +| author | title | link | +| ------------------------------------ | ----- | ------------------------------------------------------- | +|[@132ikl](https://github.com/132ikl)|Update where documentation|[#15467](https://github.com/nushell/nushell/pull/15467)| +|[@132ikl](https://github.com/132ikl)|Partial workaround and deprecation warning for breaking change usage of #15654|[#15806](https://github.com/nushell/nushell/pull/15806)| +|[@132ikl](https://github.com/132ikl)|Disable flaky killing_job_kills_pids test on macOS|[#15874](https://github.com/nushell/nushell/pull/15874)| +|[@Bahex](https://github.com/Bahex)|refactor `Value::follow_cell_path` to reduce clones and return `Cow`|[#15640](https://github.com/nushell/nushell/pull/15640)| +|[@Bahex](https://github.com/Bahex)|Update deprecation warnings|[#15867](https://github.com/nushell/nushell/pull/15867)| +|[@Dorumin](https://github.com/Dorumin)|Update job_recv.rs|[#15673](https://github.com/nushell/nushell/pull/15673)| +|[@FlippinBerger](https://github.com/FlippinBerger)|Correct `use-facing` to `user-facing` in CONTRIBUTING.md|[#15761](https://github.com/nushell/nushell/pull/15761)| +|[@Kissaki](https://github.com/Kissaki)|Add `match` examples for simple value and alternative values|[#15732](https://github.com/nushell/nushell/pull/15732)| +|[@LoicRiegel](https://github.com/LoicRiegel)|Remove legacy code in some core commands|[#15560](https://github.com/nushell/nushell/pull/15560)| +|[@LoicRiegel](https://github.com/LoicRiegel)|small refactoring around units and add tests|[#15746](https://github.com/nushell/nushell/pull/15746)| +|[@Tyarel8](https://github.com/Tyarel8)|change `http get` header example to use a record|[#15674](https://github.com/nushell/nushell/pull/15674)| +|[@Tyarel8](https://github.com/Tyarel8)|fix `kv set` examples|[#15769](https://github.com/nushell/nushell/pull/15769)| +|[@Villa01](https://github.com/Villa01)|Improve error handling for unsupported --theme in to html command|[#15787](https://github.com/nushell/nushell/pull/15787)| +|[@ayax79](https://github.com/ayax79)|Minor DataType refactor|[#15728](https://github.com/nushell/nushell/pull/15728)| +|[@ayax79](https://github.com/ayax79)|Rust 1.85, edition=2024|[#15741](https://github.com/nushell/nushell/pull/15741)| +|[@ayax79](https://github.com/ayax79)|Polars upgrade|[#15852](https://github.com/nushell/nushell/pull/15852)| +|[@ayax79](https://github.com/ayax79)|Add regex documentation/examples to `polars col`|[#15898](https://github.com/nushell/nushell/pull/15898)| +|[@colececil](https://github.com/colececil)|docs: Add vfox to list of tools supporting Nushell|[#15687](https://github.com/nushell/nushell/pull/15687)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Refactor: Construct `IoError` from `std::io::Error` instead of `std::io::ErrorKind`|[#15777](https://github.com/nushell/nushell/pull/15777)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Provide a better error for prefix-only path for PWD|[#15817](https://github.com/nushell/nushell/pull/15817)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Move job errors into `ShellError::Job` variant|[#15820](https://github.com/nushell/nushell/pull/15820)| +|[@fdncred](https://github.com/fdncred)|update nushell to use coreutils v0.1.0 crates|[#15896](https://github.com/nushell/nushell/pull/15896)| +|[@flovilmart](https://github.com/flovilmart)|feat: Use reedline for input implementation|[#15369](https://github.com/nushell/nushell/pull/15369)| +|[@hackeryarn](https://github.com/hackeryarn)|feat: make to nuon raw option remove all white space|[#15609](https://github.com/nushell/nushell/pull/15609)| +|[@hustcer](https://github.com/hustcer)|Add a lightweight MSI packages release workflow for winget|[#15800](https://github.com/nushell/nushell/pull/15800)| +|[@hustcer](https://github.com/hustcer)|Use nushell's fork for winget-pkgs publishing|[#15808](https://github.com/nushell/nushell/pull/15808)| +|[@hustcer](https://github.com/hustcer)|Bump dev version to 0.104.2|[#15809](https://github.com/nushell/nushell/pull/15809)| +|[@hustcer](https://github.com/hustcer)|Update comments of release-pkg.nu for building of MSI package|[#15815](https://github.com/nushell/nushell/pull/15815)| +|[@hustcer](https://github.com/hustcer)|Allow specifying MSI version via env var and workflow input|[#15828](https://github.com/nushell/nushell/pull/15828)| +|[@hustcer](https://github.com/hustcer)|Bump to 0.105.0|[#15930](https://github.com/nushell/nushell/pull/15930)| +|[@kumarUjjawal](https://github.com/kumarUjjawal)|Better error handling for negative integer exponents in ** operator|[#15882](https://github.com/nushell/nushell/pull/15882)| +|[@liquid-dragons](https://github.com/liquid-dragons)|Fix typo in examples of the table command|[#15925](https://github.com/nushell/nushell/pull/15925)| +|[@luong-komorebi](https://github.com/luong-komorebi)|docs: update ubuntu version in PLATFORM_SUPPORT.md|[#15662](https://github.com/nushell/nushell/pull/15662)| +|[@musicinmybrain](https://github.com/musicinmybrain)|Update lscolors from 0.17 to 0.20|[#15737](https://github.com/nushell/nushell/pull/15737)| +|[@new-years-eve](https://github.com/new-years-eve)|Refactor `find` to handle regex search and non-regex search the same way|[#15839](https://github.com/nushell/nushell/pull/15839)| +|[@ofek](https://github.com/ofek)|Fix typo in example config.nu|[#15910](https://github.com/nushell/nushell/pull/15910)| +|[@raoulkent](https://github.com/raoulkent)|reorder `cal`s `input_output_types`|[#15909](https://github.com/nushell/nushell/pull/15909)| +|[@sholderbach](https://github.com/sholderbach)|Clean public API of `EngineState` and friends|[#15636](https://github.com/nushell/nushell/pull/15636)| +|[@sholderbach](https://github.com/sholderbach)|Pull reedline development version|[#15912](https://github.com/nushell/nushell/pull/15912)| +|[@tindzk](https://github.com/tindzk)|docs: fix available fields in `history import` command|[#15686](https://github.com/nushell/nushell/pull/15686)| +|[@vivainio](https://github.com/vivainio)|std-rfc/kv: optimize kv get by only selecting one row from the stor db|[#15792](https://github.com/nushell/nushell/pull/15792)| +|[@ysthakur](https://github.com/ysthakur)|Bump to 0.104.1 dev version|[#15669](https://github.com/nushell/nushell/pull/15669)| +|[@ysthakur](https://github.com/ysthakur)|Use Default for making Suggestions in attribute_completions|[#15764](https://github.com/nushell/nushell/pull/15764)| + +# Full changelog [[toc](#table-of-contents)] + + + +|author|title|link| +|-|-|-| +|[@132ikl](https://github.com/132ikl)|Update where documentation|[#15467](https://github.com/nushell/nushell/pull/15467)| +|[@132ikl](https://github.com/132ikl)|Add unified deprecation system and @deprecated attribute|[#15770](https://github.com/nushell/nushell/pull/15770)| +|[@132ikl](https://github.com/132ikl)|Partial workaround and deprecation warning for breaking change usage of #15654|[#15806](https://github.com/nushell/nushell/pull/15806)| +|[@132ikl](https://github.com/132ikl)|Make `parse` simple patterns ignore fields with placeholder (`_`)|[#15873](https://github.com/nushell/nushell/pull/15873)| +|[@132ikl](https://github.com/132ikl)|Disable flaky killing_job_kills_pids test on macOS|[#15874](https://github.com/nushell/nushell/pull/15874)| +|[@Bahex](https://github.com/Bahex)|refactor `Value::follow_cell_path` to reduce clones and return `Cow`|[#15640](https://github.com/nushell/nushell/pull/15640)| +|[@Bahex](https://github.com/Bahex)|Add `SyntaxShape::OneOf` syntax users can use|[#15646](https://github.com/nushell/nushell/pull/15646)| +|[@Bahex](https://github.com/Bahex)|feat!: Explicit cell-path case sensitivity syntax|[#15692](https://github.com/nushell/nushell/pull/15692)| +|[@Bahex](https://github.com/Bahex)|feat(where): Support stored closure|[#15697](https://github.com/nushell/nushell/pull/15697)| +|[@Bahex](https://github.com/Bahex)|fix parsing of bare word string interpolations that start with a sub expression|[#15735](https://github.com/nushell/nushell/pull/15735)| +|[@Bahex](https://github.com/Bahex)|fix: implicitly running .ps1 scripts with spaces in path|[#15781](https://github.com/nushell/nushell/pull/15781)| +|[@Bahex](https://github.com/Bahex)|feat(std-rfc): add `iter` module and `recurse` command|[#15840](https://github.com/nushell/nushell/pull/15840)| +|[@Bahex](https://github.com/Bahex)|Update deprecation warnings|[#15867](https://github.com/nushell/nushell/pull/15867)| +|[@CSharperMantle](https://github.com/CSharperMantle)|Correctly quote `nu.exe` and `nu.ico` path containing spaces in WiX|[#15881](https://github.com/nushell/nushell/pull/15881)| +|[@CSharperMantle](https://github.com/CSharperMantle)|Fixup: Fix regression caused by #15881|[#15889](https://github.com/nushell/nushell/pull/15889)| +|[@Cattle0Horse](https://github.com/Cattle0Horse)|fix(std/iter): align example descriptions with closure logic for find and find-index|[#15895](https://github.com/nushell/nushell/pull/15895)| +|[@Dorumin](https://github.com/Dorumin)|Update job_recv.rs|[#15673](https://github.com/nushell/nushell/pull/15673)| +|[@FlippinBerger](https://github.com/FlippinBerger)|Correct `use-facing` to `user-facing` in CONTRIBUTING.md|[#15761](https://github.com/nushell/nushell/pull/15761)| +|[@Kissaki](https://github.com/Kissaki)|Add `match` examples for simple value and alternative values|[#15732](https://github.com/nushell/nushell/pull/15732)| +|[@LazyPluto](https://github.com/LazyPluto)|fix: empty tables now respect `$env.config.use_ansi_coloring` (closes #14896)|[#15751](https://github.com/nushell/nushell/pull/15751)| +|[@LoicRiegel](https://github.com/LoicRiegel)|Remove legacy code in some core commands|[#15560](https://github.com/nushell/nushell/pull/15560)| +|[@LoicRiegel](https://github.com/LoicRiegel)|small refactoring around units and add tests|[#15746](https://github.com/nushell/nushell/pull/15746)| +|[@Mrfiregem](https://github.com/Mrfiregem)|Add lazy closure evaluation to `default` (#14160)|[#15654](https://github.com/nushell/nushell/pull/15654)| +|[@Mrfiregem](https://github.com/Mrfiregem)|Allow `path join` to read ByteStream input (#15128)|[#15736](https://github.com/nushell/nushell/pull/15736)| +|[@Mrfiregem](https://github.com/Mrfiregem)|`run-external` spreads command if it's a list|[#15776](https://github.com/nushell/nushell/pull/15776)| +|[@Tyarel8](https://github.com/Tyarel8)|change `http get` header example to use a record|[#15674](https://github.com/nushell/nushell/pull/15674)| +|[@Tyarel8](https://github.com/Tyarel8)|fix duplicate short_name in `ansi` command|[#15767](https://github.com/nushell/nushell/pull/15767)| +|[@Tyarel8](https://github.com/Tyarel8)|fix `kv set` examples|[#15769](https://github.com/nushell/nushell/pull/15769)| +|[@Tyarel8](https://github.com/Tyarel8)|feat(std): add comparison support to `bench` command|[#15843](https://github.com/nushell/nushell/pull/15843)| +|[@Tyarel8](https://github.com/Tyarel8)|feat(std): further `bench` improvements|[#15856](https://github.com/nushell/nushell/pull/15856)| +|[@Villa01](https://github.com/Villa01)|Improve error handling for unsupported --theme in to html command|[#15787](https://github.com/nushell/nushell/pull/15787)| +|[@WindSoilder](https://github.com/WindSoilder)|`source`: make sure the block is compiled when parsing|[#15798](https://github.com/nushell/nushell/pull/15798)| +|[@WindSoilder](https://github.com/WindSoilder)|overlay new: add `--reload(-r)` flag|[#15849](https://github.com/nushell/nushell/pull/15849)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump crate-ci/typos from 1.31.1 to 1.31.2|[#15665](https://github.com/nushell/nushell/pull/15665)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump actions-rust-lang/setup-rust-toolchain from 1.11.0 to 1.12.0|[#15666](https://github.com/nushell/nushell/pull/15666)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump miette from 7.5.0 to 7.6.0|[#15667](https://github.com/nushell/nushell/pull/15667)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump crate-ci/typos from 1.31.2 to 1.32.0|[#15708](https://github.com/nushell/nushell/pull/15708)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump tokio from 1.44.2 to 1.45.0|[#15710](https://github.com/nushell/nushell/pull/15710)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump quickcheck_macros from 1.0.0 to 1.1.0|[#15711](https://github.com/nushell/nushell/pull/15711)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump tempfile from 3.15.0 to 3.20.0|[#15753](https://github.com/nushell/nushell/pull/15753)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump crate-ci/typos from 1.32.0 to 1.33.1|[#15885](https://github.com/nushell/nushell/pull/15885)| +|[@app/dependabot](https://github.com/app/dependabot)|build(deps): bump itertools from 0.13.0 to 0.14.0|[#15886](https://github.com/nushell/nushell/pull/15886)| +|[@atahabaki](https://github.com/atahabaki)|Numbers proceeded with the escape character ignored fix|[#15684](https://github.com/nushell/nushell/pull/15684)| +|[@ayax79](https://github.com/ayax79)|Added `polars struct-encode-json`, providing the ability to encode structs as json|[#15678](https://github.com/nushell/nushell/pull/15678)| +|[@ayax79](https://github.com/ayax79)|Minor DataType refactor|[#15728](https://github.com/nushell/nushell/pull/15728)| +|[@ayax79](https://github.com/ayax79)|Rust 1.85, edition=2024|[#15741](https://github.com/nushell/nushell/pull/15741)| +|[@ayax79](https://github.com/ayax79)|Polars upgrade|[#15852](https://github.com/nushell/nushell/pull/15852)| +|[@ayax79](https://github.com/ayax79)|Allow `polars first` to be used with `polars group-by`|[#15855](https://github.com/nushell/nushell/pull/15855)| +|[@ayax79](https://github.com/ayax79)|Fix for null handling #15788|[#15857](https://github.com/nushell/nushell/pull/15857)| +|[@ayax79](https://github.com/ayax79)|Creates col and nth expressions when using paths on lazy frames.|[#15891](https://github.com/nushell/nushell/pull/15891)| +|[@ayax79](https://github.com/ayax79)|Add regex documentation/examples to `polars col`|[#15898](https://github.com/nushell/nushell/pull/15898)| +|[@blindFS](https://github.com/blindFS)|fix(parser): namespace pollution of constants by `use module.nu`|[#15518](https://github.com/nushell/nushell/pull/15518)| +|[@blindFS](https://github.com/blindFS)|fix: inefficient select with large row number|[#15730](https://github.com/nushell/nushell/pull/15730)| +|[@cablehead](https://github.com/cablehead)|fix: clear jobs _after_ traversing jobs for kill_all|[#15685](https://github.com/nushell/nushell/pull/15685)| +|[@colececil](https://github.com/colececil)|docs: Add vfox to list of tools supporting Nushell|[#15687](https://github.com/nushell/nushell/pull/15687)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Refactor: Construct `IoError` from `std::io::Error` instead of `std::io::ErrorKind`|[#15777](https://github.com/nushell/nushell/pull/15777)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Add `rustls` for TLS|[#15810](https://github.com/nushell/nushell/pull/15810)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix: use `ring` as a crypto provider instead of `aws_lc`|[#15812](https://github.com/nushell/nushell/pull/15812)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Provide a better error for prefix-only path for PWD|[#15817](https://github.com/nushell/nushell/pull/15817)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Move job errors into `ShellError::Job` variant|[#15820](https://github.com/nushell/nushell/pull/15820)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Add `debug env` command|[#15875](https://github.com/nushell/nushell/pull/15875)| +|[@cptpiepmatz](https://github.com/cptpiepmatz)|Fix: Downgrade calamine to 0.26 to fix build without `--locked`|[#15908](https://github.com/nushell/nushell/pull/15908)| +|[@fdncred](https://github.com/fdncred)|allow powershell scripts in the path to be executed|[#15760](https://github.com/nushell/nushell/pull/15760)| +|[@fdncred](https://github.com/fdncred)|make sure new nul chars don't print in `char --list`|[#15858](https://github.com/nushell/nushell/pull/15858)| +|[@fdncred](https://github.com/fdncred)|update nushell to use coreutils v0.1.0 crates|[#15896](https://github.com/nushell/nushell/pull/15896)| +|[@fdncred](https://github.com/fdncred)|make `date humanize` use `human_time_from_now()`|[#15918](https://github.com/nushell/nushell/pull/15918)| +|[@flovilmart](https://github.com/flovilmart)|feat: Use reedline for input implementation|[#15369](https://github.com/nushell/nushell/pull/15369)| +|[@gmr458](https://github.com/gmr458)|feat(table): Add new 'single' table mode|[#15672](https://github.com/nushell/nushell/pull/15672)| +|[@gmr458](https://github.com/gmr458)|Add 'single' to supported table modes|[#15681](https://github.com/nushell/nushell/pull/15681)| +|[@hackeryarn](https://github.com/hackeryarn)|feat: make to nuon raw option remove all white space|[#15609](https://github.com/nushell/nushell/pull/15609)| +|[@hustcer](https://github.com/hustcer)|Fix Windows arm64 release binaries and winget related issues|[#15690](https://github.com/nushell/nushell/pull/15690)| +|[@hustcer](https://github.com/hustcer)|Add a lightweight MSI packages release workflow for winget|[#15800](https://github.com/nushell/nushell/pull/15800)| +|[@hustcer](https://github.com/hustcer)|Use nushell's fork for winget-pkgs publishing|[#15808](https://github.com/nushell/nushell/pull/15808)| +|[@hustcer](https://github.com/hustcer)|Bump dev version to 0.104.2|[#15809](https://github.com/nushell/nushell/pull/15809)| +|[@hustcer](https://github.com/hustcer)|Update comments of release-pkg.nu for building of MSI package|[#15815](https://github.com/nushell/nushell/pull/15815)| +|[@hustcer](https://github.com/hustcer)|Allow specifying MSI version via env var and workflow input|[#15828](https://github.com/nushell/nushell/pull/15828)| +|[@hustcer](https://github.com/hustcer)|Fix build failure of aarch64 and armv7 musl targets|[#15835](https://github.com/nushell/nushell/pull/15835)| +|[@hustcer](https://github.com/hustcer)|Try to fix PAT issue of winget publish account|[#15922](https://github.com/nushell/nushell/pull/15922)| +|[@hustcer](https://github.com/hustcer)|Bump to 0.105.0|[#15930](https://github.com/nushell/nushell/pull/15930)| +|[@jjflash95](https://github.com/jjflash95)|Fix #15571 panic on write to source parquet file|[#15601](https://github.com/nushell/nushell/pull/15601)| +|[@kamek-pf](https://github.com/kamek-pf)|fix(glob): Fix drive-letter glob expansion on Windows|[#15871](https://github.com/nushell/nushell/pull/15871)| +|[@kumarUjjawal](https://github.com/kumarUjjawal)|fix(which): remove required positional argument to allow spread input|[#15870](https://github.com/nushell/nushell/pull/15870)| +|[@kumarUjjawal](https://github.com/kumarUjjawal)|Better error handling for negative integer exponents in ** operator|[#15882](https://github.com/nushell/nushell/pull/15882)| +|[@lazenga](https://github.com/lazenga)|feat(to-md): add support for centering columns via CellPaths (#14552)|[#15861](https://github.com/nushell/nushell/pull/15861)| +|[@liquid-dragons](https://github.com/liquid-dragons)|Fix typo in examples of the table command|[#15925](https://github.com/nushell/nushell/pull/15925)| +|[@luismeyer95](https://github.com/luismeyer95)|fix(parser): don't parse closure in block position (fixes #15417)|[#15680](https://github.com/nushell/nushell/pull/15680)| +|[@luong-komorebi](https://github.com/luong-komorebi)|docs: update ubuntu version in PLATFORM_SUPPORT.md|[#15662](https://github.com/nushell/nushell/pull/15662)| +|[@musicinmybrain](https://github.com/musicinmybrain)|Update lscolors from 0.17 to 0.20|[#15737](https://github.com/nushell/nushell/pull/15737)| +|[@new-years-eve](https://github.com/new-years-eve)|Refactor `find` to handle regex search and non-regex search the same way|[#15839](https://github.com/nushell/nushell/pull/15839)| +|[@noahfraiture](https://github.com/noahfraiture)|feat: default http protocol when none used in http request|[#15804](https://github.com/nushell/nushell/pull/15804)| +|[@ofek](https://github.com/ofek)|Fix typo in example config.nu|[#15910](https://github.com/nushell/nushell/pull/15910)| +|[@ofek](https://github.com/ofek)|Enable `shell_integration.osc9_9` by default on Windows|[#15914](https://github.com/nushell/nushell/pull/15914)| +|[@pyz4](https://github.com/pyz4)|feat(polars): add `polars horizontal` aggregation command|[#15656](https://github.com/nushell/nushell/pull/15656)| +|[@pyz4](https://github.com/pyz4)|feat(polars): introducing new `polars replace`|[#15706](https://github.com/nushell/nushell/pull/15706)| +|[@pyz4](https://github.com/pyz4)|feat(polars): expand `polars unique` to allow expressions inputs|[#15771](https://github.com/nushell/nushell/pull/15771)| +|[@pyz4](https://github.com/pyz4)|feat(polars): add `polars math` expression|[#15822](https://github.com/nushell/nushell/pull/15822)| +|[@pyz4](https://github.com/pyz4)|fix(polars): add Value::Record to `NuExpression::can_downcast` logic|[#15826](https://github.com/nushell/nushell/pull/15826)| +|[@pyz4](https://github.com/pyz4)|feat(polars): expand `polars shift` to allow expressions inputs|[#15834](https://github.com/nushell/nushell/pull/15834)| +|[@pyz4](https://github.com/pyz4)|feat(polars): add `maintain-order` flag to `polars group-by` and allow expression inputs in `polars filter`|[#15865](https://github.com/nushell/nushell/pull/15865)| +|[@pyz4](https://github.com/pyz4)|fix(polars): swap out pivot for pivot_stable to suppress warning message|[#15913](https://github.com/nushell/nushell/pull/15913)| +|[@raoulkent](https://github.com/raoulkent)|reorder `cal`s `input_output_types`|[#15909](https://github.com/nushell/nushell/pull/15909)| +|[@rritik772](https://github.com/rritik772)|[FIX] #15813 passing infinity to random float generate causes error|[#15818](https://github.com/nushell/nushell/pull/15818)| +|[@sholderbach](https://github.com/sholderbach)|Clean public API of `EngineState` and friends|[#15636](https://github.com/nushell/nushell/pull/15636)| +|[@sholderbach](https://github.com/sholderbach)|Pull reedline development version|[#15912](https://github.com/nushell/nushell/pull/15912)| +|[@snickerdoodle2](https://github.com/snickerdoodle2)|(gstat): add config option to disable tag calculation|[#15893](https://github.com/nushell/nushell/pull/15893)| +|[@tindzk](https://github.com/tindzk)|docs: fix available fields in `history import` command|[#15686](https://github.com/nushell/nushell/pull/15686)| +|[@vivainio](https://github.com/vivainio)|std-rfc/kv: optimize kv get by only selecting one row from the stor db|[#15792](https://github.com/nushell/nushell/pull/15792)| +|[@weirdan](https://github.com/weirdan)|Environment-aware help for `open` and `save`|[#15651](https://github.com/nushell/nushell/pull/15651)| +|[@weirdan](https://github.com/weirdan)|Set content_type for `view span` output|[#15842](https://github.com/nushell/nushell/pull/15842)| +|[@ysthakur](https://github.com/ysthakur)|Bump to 0.104.1 dev version|[#15669](https://github.com/nushell/nushell/pull/15669)| +|[@ysthakur](https://github.com/ysthakur)|Use Default for making Suggestions in attribute_completions|[#15764](https://github.com/nushell/nushell/pull/15764)| +|[@ysthakur](https://github.com/ysthakur)|Handle multiple exact matches|[#15772](https://github.com/nushell/nushell/pull/15772)| +|[@zhiburt](https://github.com/zhiburt)|Fix table wrap emojie|[#15138](https://github.com/nushell/nushell/pull/15138)| +|[@zhiburt](https://github.com/zhiburt)|nu-table/ 1 refactoring + a few optimizations + small fix|[#15653](https://github.com/nushell/nushell/pull/15653)| +|[@zhiburt](https://github.com/zhiburt)|Fix #15653 regression with not counting padding properly|[#15704](https://github.com/nushell/nushell/pull/15704)| +|[@zhiburt](https://github.com/zhiburt)|nu-table: (table --expand) Remove unnecessary use of truncate logic|[#15727](https://github.com/nushell/nushell/pull/15727)|