--- 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. --- <!-- NOTE: start from the TODO all the way at the bottom (and sort of work your way up) --> # 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 <!-- TODO: once all the content below is finished and committed, `use nu_scripts/make_release/release-note/notes.nu *` and run `write-toc $this_file`. --> # Highlights and themes of this release <!-- NOTE: if you wanna write a section about a breaking change, when it's a very important one, please add the following snippet to have a "warning" banner :) > see [an example](https://www.nushell.sh/blog/2023-09-19-nushell_0_85_0.html#pythonesque-operators-removal) ```md ::: warning Breaking change See a full overview of the [breaking changes](#breaking-changes) ::: ``` --> <!-- NOTE: see https://vuepress.github.io/reference/default-theme/markdown.html#custom-containers for the list of available *containers* --> ## One `where` to rule them all `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 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 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<binary, string> ] { .. } ``` ## Case-sensitive cell-paths or not`!` 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 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` 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 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 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 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 ## Additions ### Ignore fields in simple `parse` patterns with `_` [@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` `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 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 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` [@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 [@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 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` [@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 [@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` [@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 [@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` 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` `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` [@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 ### Cell-paths with case-sensitivity and without`!` 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 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 <!-- TODO: remove these tables after proper text segments --> |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 ## Construct `IoError` from `std::io::Error` instead of `std::io::ErrorKind` 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 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 <!-- TODO: - `use nu_scripts/make_release/release-note/notes.nu *` - run `list-prs --milestone v0.105.0 | pr-table` - paste the output here Afterwards, go through each PR and classify it as one of the following: - A user-facing change. These PRs should go into the `# Changes` section. - A plugin-facing change. These PRs should go in `# Notes for plugin developers`. Some plugin-facing changes might also be a user-facing change and vice versa. - A documentation improvement, error message improvement, refactoring PR, clippy fix, typo fix, etc. These PRs go into the `# Hall of fame`. You can just copy the table row in this section and paste it to the `# Hall of fame` section above. Note that major refactorings may warrant a section in `# Highlights`. - Dependabot PRs and version bumps should be ignored. They will only be mentioned in `# Full changelog`. --> |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 unnessary use of truncate logic|[#15727](https://github.com/nushell/nushell/pull/15727)|