Nushell 0.101.0
Today, we're releasing version 0.101.0 of Nu. This release adds a simplified startup configuration, several new commands, and additional tools to introspect the Nushell engine.
Where to get it
Nushell 0.101.0 is available as pre-built binaries or from crates.io. If you have Rust installed, you can also install it using cargo install nu.
As part of this release, we also publish a set of optional plugins you can install and use with Nushell.
Table of contents
- Highlights and themes of this release
- Changes
- Notes for plugin developers
- Hall of fame
- Full changelog
Highlights and themes of this release [toc]
Simplified Startup Configuration [toc]
With #14249, Nushell now always loads its internal default_env.nu before the user env.nu is loaded, then loads the internal default_config.nu before the user's config.nu is loaded. This allows for a simpler user-configuration experience. Details are in this blog entry along with an updated Configuration Chapter which should go live sometime today.
Related Startup Config Changes [toc]
- #14345: Hooks fields are non-optional
- #14341: Hooks now default to an empty value of the proper type (e.g.,
[]or{}) when not otherwise specified. This means that you can always safely append or merge a new hook without first needing to check if it was a valid list/record. - #14435: An
$env.configis always created at startup, populated with default values, even when no configuration files are loaded. - #14549: The
constversion ofNU_LIB_DIRSis now populated by default instead of$env.NU_LIB_DIRS. - #14553: The
constversion ofNU_PLUGIN_DIRSis now populated by default instead of$env.NU_PLUGIN_DIRS. - #14566:
ENV_CONVERSIONSis now an empty record by default. ThePATH/Pathconversions are handled internally. - #14579: More defaults are set in Rust. Also sets a default, empty
TRANSIENT_PROMPT_COMMAND_RIGHTandTRANSIENT_PROMPT_MULTILINE_INDICATOR.
Breaking Startup Config Changes [toc]
There may be (hopefully) minor breaking changes due to the startup configuration handling. Known possible issues include:
- Cannot merge changes to default menus since their definitions are no longer in
config.nuby default. Instead, the entire menu should be redefined. - Querying the
$env.NU_LIB_DIRSwill return an empty result by default. Query the constant$NU_LIB_DIRSinstead.
Changes [toc]
Additions [toc]
path self [toc]
Thanks to @Bahex in #14303, this release adds the path self command. path self is a parse-time only command for getting the absolute path of the source file containing it, or any file relative to the source file.
const this_file = path self
const this_directory = path self .chunk-by [toc]
This release adds a new chunk-by command which will split a list into chunks based on a closure. The closure is applied to each element of the input list, and adjacent elements that share the same closure result value will be chunked together. This command was added in #14410 thanks to @cosineblast.
# chunk by a predicate
[1 3 -2 -2 0 1 2] | chunk-by {|x| $x >= 0 }
# [[1 3] [-2 -2] [0 1 2]]
# chunk duplicate, adjacent elements together
[a b b c a a] | chunk-by { $in }
# [[a] [b b] [c] [a a]]term query [toc]
Thanks to @Bahex in #14427, this release adds the term query command. term query allows sending a query to your terminal emulator and reading the reply.
# Get cursor position
term query (ansi cursor_position) --prefix (ansi csi) --terminator 'R'
# Get terminal background color.
term query $'(ansi osc)10;?(ansi st)' --prefix $'(ansi osc)10;' --terminator (ansi st)
# Read clipboard content on terminals supporting OSC-52.
term query $'(ansi osc)52;c;?(ansi st)' --prefix $'(ansi osc)52;c;' --terminator (ansi st)merge deep [toc]
To merge nested record structures we now have merge deep as a subcommand of merge which only operates on the flat structure of tables.
Here you can see how it is used to update a record with fields from a given record, by either adding the fields or replacing those leaf nodes that share a common cellpath.
{a: {foo: 123 bar: "overwrite me"}, b: [1, 2, 3]} | merge deep {a: {bar: 456, baz: 789}, b: [4, 5, 6]}
# => ╭───┬───────────────╮
# => │ │ ╭─────┬─────╮ │
# => │ a │ │ foo │ 123 │ │
# => │ │ │ bar │ 456 │ │
# => │ │ │ baz │ 789 │ │
# => │ │ ╰─────┴─────╯ │
# => │ │ ╭───┬───╮ │
# => │ b │ │ 0 │ 4 │ │
# => │ │ │ 1 │ 5 │ │
# => │ │ │ 2 │ 6 │ │
# => │ │ ╰───┴───╯ │
# => ╰───┴───────────────╯While the record entries get updated based on the path, by default lists at a given path are updated by replacement.
merge deep also has different strategies for merging inner lists and tables. For example, you can use the append strategy to merge the inner b list instead of overwriting it.
{a: {foo: 123 bar: "overwrite me"}, b: [1, 2, 3]} | merge deep --strategy=append {a: {bar: 456, baz: 789}, b: [4, 5, 6]}
# => ╭───┬───────────────╮
# => │ │ ╭─────┬─────╮ │
# => │ a │ │ foo │ 123 │ │
# => │ │ │ bar │ 456 │ │
# => │ │ │ baz │ 789 │ │
# => │ │ ╰─────┴─────╯ │
# => │ │ ╭───┬───╮ │
# => │ b │ │ 0 │ 1 │ │
# => │ │ │ 1 │ 2 │ │
# => │ │ │ 2 │ 3 │ │
# => │ │ │ 3 │ 4 │ │
# => │ │ │ 4 │ 5 │ │
# => │ │ │ 5 │ 6 │ │
# => │ │ ╰───┴───╯ │
# => ╰───┴───────────────╯This command is the work of a productive collaboration by @132ikl and @Bahex.
utouch [toc]
This release adds the new utouch command, utilizing uutils/coreutils! In addition to all the flags of touch, utouch also has a --timestamp and --date flag to specify the timestamp to use. Eventually, the utouch command will replace the touch command.
WASM support [toc]
Nushell used to have WASM support a while back, but at some point became incompatible with WASM. Thanks to the amazing work of @cptpiepmatz in #14418, Nushell can now be compiled to WASM again! In order to do so, certain (cargo) features have to be disabled meaning certain commands (like filesystem commands) will not be available.
sys net columns [toc]
Thanks to @rfaulhaber in #14389, the sys net command now has two additional columns. One is the mac column which lists mac address. The other is the ip column which lists the address(es) for each network interface.
Raw string pattern matching [toc]
With this release, raw strings can now be used as match patterns thanks to @sgvictorino in #14573.
match 'foo' {
r#'foo'# => true
_ => false
}Duration/Date Arithmetic [toc]
With #14295, dates can now be added to durations. Previously only durations could be added to dates.
explore keybinds [toc]
In #14468 thanks to @paulie4, more default keybindings were added to explore to better match less.
Version in Startup banner [toc]
With #14625, the Nushell version now displays at startup in the banner.
input --default [toc]
Thanks to @WindSoilder in #14374, the input command now has a --default parameter to set a default value when none is provided in the input.
PowerShell script invocation on Windows [toc]
With #14379 by @fdncred we now launch PowerShell scripts with a .ps1 extension directly through powershell.exe. This behavior follows the same logic we offer for scripts launched by cmd.exe.
New introspection tools [toc]
@fdncred added a series of new tools permitting you to inspect internals of Nushell's engine for better understanding or debugging. We hope you can put them to good use to drill down into bugs or to learn more how the Nushell engine understands a piece of code or represents your current state. As they refer to the engine internals we still want to actively evolve their output or behavior may change as we continue development. So don't depend on them in scripts but feel free to use them to diagnose issues or learn about the behavior of the current version.
view source now supports internal IDs
To access the content of closures or other code view source can now accept an integer ID which represents the internal BlockId to access the code stored there. This is useful whenever our output provided you with <Closure {BlockID}>. For closures stored in a variable you can still access it directly via view source.
view blocks
This new commands lists the raw code blocks as stored in the engine after parsing including block_id, source code, and spans.
ast --flatten
The ast command can now also output the flattened and simplified representation of the AST used by syntax highlighting and some of the completion logic. This is accessible through the --flatten flag.
config flatten
To see the whole configuration in a simplified representation, especially to spot differences between different user configurations, config flatten provides a simplified view that is not nested like $env.config. Note that this output is not directly compatible with the config record and may not have the correct types.
Breaking changes [toc]
++ operator [toc]
The ++ operator previously performed both appending and concatenation.
# Appending
[1 2 3] ++ 4 == [1 2 3 4]
# Concatenation
[1 2 3] ++ [4 5 6] == [1 2 3 4 5 6]This created ambiguity when operating on nested lists:
[[1 2] [3 4]] ++ [5 6]
# Should this be [[1 2] [3 4] [5 6]] or [[1 2] [3 4] 5 6] ?Additionally, the ++= operator was able to change the type of a mutable a due to its dual role:
mut str: string = 'hello '
($str | describe) == string
$str ++= ['world']
($str | describe) == list<string>After #14344, the ++ operator now only performs concatenation (between lists, strings, or binary values). To append a value to a list, either wrap the value in a list or use the append command.
mut list = [1 2]
$list ++= [3]
$list = $list | append 4Stricter command signature parsing [toc]
Input/output types
Previous versions of Nushell would fail to parse input/output types on custom commands in some cases. However, a parse error would not be shown, making these silent parse errors.
# These input/output types are not valid, but no error would be shown:
def some_cmd [] -> string { '' }
def some_cmd [] : string { '' }
# Since the input/output types failed to parse, then this code would fail only at runtime:
(some_cmd) + 1Thanks to @ratherforky, this has been fixed in #14510. Invalid input/output types will now cause an error to be shown at parse-time.
# The custom commands above will now cause a parse error and should instead be:
def some_cmd []: any -> string { '' }
def some_cmd [] : any -> string { '' }
# This will now fail at parse-time due to type checking, before any user code is run:
(some_cmd) + 1Custom command arguments
This release also makes the parsing for custom command arguments more strict thanks to @sgvictorino in #14309. For example, a colon (:) without a corresponding type is now an error. Below are some more examples of code snippets which are now parse errors.
# expected parameter or flag
def foo [ bar: int: ] {}
# expected type
def foo [ bar: = ] {}
def foo [ bar: ] {}
# expected default value
def foo [ bar = ] {}group-by [toc]
Thanks to @Bahex in #14337, the group-by command now supports grouping by multiple criteria (henceforth referred to as a grouper). When using multiple groupers, the output is in the form of nested records.
let data = [
[category color name];
[fruit red apple]
[fruit red strawberry]
[vegetable red tomato]
[fruit orange orange]
[vegetable orange carrot]
[vegetable orange pumpkin]
]
$data | group-by color category╭────────┬───────────────────────────────────────────────────────╮
│ │ ╭───────────┬───────────────────────────────────────╮ │
│ red │ │ │ ╭───┬──────────┬───────┬────────────╮ │ │
│ │ │ fruit │ │ # │ category │ color │ name │ │ │
│ │ │ │ ├───┼──────────┼───────┼────────────┤ │ │
│ │ │ │ │ 0 │ fruit │ red │ apple │ │ │
│ │ │ │ │ 1 │ fruit │ red │ strawberry │ │ │
│ │ │ │ ╰───┴──────────┴───────┴────────────╯ │ │
│ │ │ │ ╭───┬───────────┬───────┬────────╮ │ │
│ │ │ vegetable │ │ # │ category │ color │ name │ │ │
│ │ │ │ ├───┼───────────┼───────┼────────┤ │ │
│ │ │ │ │ 0 │ vegetable │ red │ tomato │ │ │
│ │ │ │ ╰───┴───────────┴───────┴────────╯ │ │
│ │ ╰───────────┴───────────────────────────────────────╯ │
│ │ ╭───────────┬──────────────────────────────────────╮ │
│ orange │ │ │ ╭───┬──────────┬────────┬────────╮ │ │
│ │ │ fruit │ │ # │ category │ color │ name │ │ │
│ │ │ │ ├───┼──────────┼────────┼────────┤ │ │
│ │ │ │ │ 0 │ fruit │ orange │ orange │ │ │
│ │ │ │ ╰───┴──────────┴────────┴────────╯ │ │
│ │ │ │ ╭───┬───────────┬────────┬─────────╮ │ │
│ │ │ vegetable │ │ # │ category │ color │ name │ │ │
│ │ │ │ ├───┼───────────┼────────┼─────────┤ │ │
│ │ │ │ │ 0 │ vegetable │ orange │ carrot │ │ │
│ │ │ │ │ 1 │ vegetable │ orange │ pumpkin │ │ │
│ │ │ │ ╰───┴───────────┴────────┴─────────╯ │ │
│ │ ╰───────────┴──────────────────────────────────────╯ │
╰────────┴───────────────────────────────────────────────────────╯With the --to-table flag, instead of nested records, the output is in the form of a table with columns corresponding to each grouper and the items column. Each column corresponding to a grouper is named after it. For closure groupers, the columns are named with the scheme closure_{i}.
$data | group-by color category --to-table╭───┬────────┬───────────┬───────────────────────────────────────╮
│ # │ color │ category │ items │
├───┼────────┼───────────┼───────────────────────────────────────┤
│ 0 │ red │ fruit │ ╭───┬──────────┬───────┬────────────╮ │
│ │ │ │ │ # │ category │ color │ name │ │
│ │ │ │ ├───┼──────────┼───────┼────────────┤ │
│ │ │ │ │ 0 │ fruit │ red │ apple │ │
│ │ │ │ │ 1 │ fruit │ red │ strawberry │ │
│ │ │ │ ╰───┴──────────┴───────┴────────────╯ │
│ 1 │ red │ vegetable │ ╭───┬───────────┬───────┬────────╮ │
│ │ │ │ │ # │ category │ color │ name │ │
│ │ │ │ ├───┼───────────┼───────┼────────┤ │
│ │ │ │ │ 0 │ vegetable │ red │ tomato │ │
│ │ │ │ ╰───┴───────────┴───────┴────────╯ │
│ 2 │ orange │ fruit │ ╭───┬──────────┬────────┬────────╮ │
│ │ │ │ │ # │ category │ color │ name │ │
│ │ │ │ ├───┼──────────┼────────┼────────┤ │
│ │ │ │ │ 0 │ fruit │ orange │ orange │ │
│ │ │ │ ╰───┴──────────┴────────┴────────╯ │
│ 3 │ orange │ vegetable │ ╭───┬───────────┬────────┬─────────╮ │
│ │ │ │ │ # │ category │ color │ name │ │
│ │ │ │ ├───┼───────────┼────────┼─────────┤ │
│ │ │ │ │ 0 │ vegetable │ orange │ carrot │ │
│ │ │ │ │ 1 │ vegetable │ orange │ pumpkin │ │
│ │ │ │ ╰───┴───────────┴────────┴─────────╯ │
╰───┴────────┴───────────┴───────────────────────────────────────╯timeit [toc]
The timeit command previously had a special behavior where expressions passed as arguments would have their evaluation deferred in order to later be timed. This lead to an interesting bug (14401) where the expression would be evaluated twice, since the new IR evaluator eagerly evaluates arguments passed to commands.
To make the deferred evaluation more explicit, the timeit command can now only take a closure as an argument instead of any expression or value (#14483). Additionally, blocks are no longer supported by timeit, so any changes to the environment will be isolated to inside the closure.
sys cpu [toc]
The cpu_usage column outputted by sys cpu works by sampling the CPU over a 400ms period. This wait long time is unhelpful if you are only interested in other information about the CPU like the number of cores (i.e., sys cpu | length). With #14485, the cpu_usage column is now gated behind the --long flag. This way, sys cpu will take around 0-2ms instead of 400ms by default.
from csv and from tsv [toc]
Thanks to @Bahex in #14399, parsing csv and tsv content with the --flexible flag is more flexible than before. Previously, the first row of csv or tsv content would determine the number of columns, and rows containing more values than the determined columns would be truncated, losing those extra values.
With this release, that is no longer the case. Now, --flexible flag means the number of columns aren't limited by the first row and can have not just less but also more values than the first row.
value
1,aaa
2,bbb
3
4,ddd
5,eee,extra.. | from csv --flexible --noheaders╭─#─┬─column0─┬─column1─┬─column2─╮
│ 0 │ value │ ❎ │ ❎ │
│ 1 │ 1 │ aaa │ ❎ │
│ 2 │ 2 │ bbb │ ❎ │
│ 3 │ 3 │ ❎ │ ❎ │
│ 4 │ 4 │ ddd │ ❎ │
│ 5 │ 5 │ eee │ extra │
╰─#─┴─column0─┴─column1─┴─column2─╯std/iter scan [toc]
Thanks to @Bahex in #14596, the order of scan's closure's parameters are flipped to be consistent with reduce. The closure now also receives the accumulator value as pipeline input as well.
> [a b c d] | iter scan "" {|x, y| [$x, $y] | str join} -n
# To keep its behavior same, this command should be changed to either of the following
> [a b c d] | iter scan "" {|it, acc| [$acc, $it] | str join} -n
> [a b c d] | iter scan "" {|it| append $it | str join} -nCompletion sorting [toc]
In #14424, some changes were made to completion sorting. If you have a custom completer that returns a record with an options field, then this may affect you.
- If
optionscontainssort: true, then completions will be sorted according to$env.config.completions.sort. Previously, they would have been sorted in alphabetical order. - If
optionscontainssort: false, completions will not be sorted. - If
optionsdoes not have asortcolumn, then that will be treated assort: true. Previously, this would have been treated assort: false.
Import module naming [toc]
Thanks to @sgvictorino in #14353, modules with special characters in their name will be normalized by converting these special characters to underscores (_). Previously, it was not possible to use these modules after importing them.
table formatting and the display_output hook [toc]
With #14361 by @132ikl our machinery to format structured now follows a simpler logic. If a $env.config.hooks.display_output hook is set, it is fully responsible for formatting the structured data, e.g. by invoking table with custom settings. Only if it is not set by null will table without arguments be run by default. Previously the output logic would invoke table regardless on top of the formatting by your display_output hook. This avoids some spurious formatting attempts.
du flag changes [toc]
Thanks to @WindSoilder in #14407, the du command shows a more condensed output by default. The files and (recursive) directories are not shown by default. Use du --long (-l) to show these columns. The --all (-a) switch has been removed -- Files and directories will both be shown with --long (-l).
Code specific environment variables updated during source [toc]
The variables $env.CURRENT_FILE and $env.FILE_PWD had already been set to the respective file paths whenever a script was executed or module loaded. Similarly $env.PROCESS_PATH is set for the execution of a script or module but unset when a module is simply used.
With #14486 by @fdncred $env.CURRENT_FILE and $env.FILE_PWD will now also be updated when a particular file is included via source. Similarly $env.PROCESS_PATH will be unset.
# test_source.nu
print $"$env.CURRENT_FILE = ($env.CURRENT_FILE?)"
print $"$env.FILE_PWD = ($env.FILE_PWD?)"
print $"$env.PROCESS_PATH = ($env.PROCESS_PATH?)"source test_source.nu
# => $env.CURRENT_FILE = /Users/fdncred/src/nushell/test_source.nu
# => $env.FILE_PWD = /Users/fdncred/src/nushell
# => $env.PROCESS_PATH =Deprecations [toc]
split-by [toc]
In #14019, the split-by command was deprecated. Instead, please use group-by with multiple groupers as shown above.
date to-record and date to-table [toc]
In #14319:
date to-recordhas been deprecated and will be removed in a future release. Please useinto recordin its place.date to-tablehas been deprecated and will be removed in a future release. Please useinto record | transpose | transpose -rin its place.
do --ignore-shell-errors and --ignore-program-errors [toc]
Thanks to @WindSoilder in #14385, --ignore-shell-errors and --ignore-program-errors for the do command have been deprecated. Use --ignore-errors (-i) instead.
Removals [toc]
NU_DISABLE_IR [toc]
With #14293, the NU_DISABLE_IR environment variable is no longer used. Nushell will now always use the new IR evaluator instead of previous AST based evaluator.
Bug fixes and other changes [toc]
ls [toc]
The ls command used to have deterministic output order, but this was broken in 0.94.0. Thanks to @userwiths in #13875, ls output will now be sorted by the name column. Future changes to the order of ls will be a breaking change.
Additionally, thanks to @sgvictorino in #14310, ls will now error if there are insufficient permissions to list the current working directory. Previously, ls would return empty output.
SHLVL [toc]
When starting Nushell as an interactive REPL, Nushell will now increment the SHLVL environment variable. This change was made in #14404 thanks to @rikukiix. (Note that it is a known issue that SHLVL is still incremented on exec.)
from commands [toc]
After #14602, the from commands now remove the content_type pipeline metadata thanks to @Bahex.
Completions on custom commands [toc]
Thanks to @RobbingDaHood in #14481, file completions are now triggered once again on custom commands after the first parameter. This was a regression due to the 0.99.x release.
seq char [toc]
Thanks to @anomius in #14261, seq char now works on any ASCII characters instead of only alphabetical ASCII characters.
http multipart [toc]
The http commands now use CRLF when joining headers to match the HTTP specification. This change was made in #14417 thanks to @Beinsezii.
scope variables [toc]
scope variables now lists constant variables in scope (when using the IR evaluator) thanks to [@sgvictorino](https://github.com/sgvictorino in #14577.
help system [toc]
@132ikl fixed a long standing issue in the help system, where commands with the same name but different module paths clashed. Now the help <name> correctly refers to the name of a command like it is visible in the scope through the definitions or use imports thanks to #14490.
Notes for plugin developers [toc]
As part of cleaning up we removed several enum variants actually unused in the core codebase:
Type::ListStreamas the engine representsPipelineData::ListStreammore consistently asType::ListFlatShape::And/FlatShape::Oras they are never populated.
Furthermore Value::Filesize now stores its value in its own Filesize type instead of a bare i64 to avoid confusion about the particular unit.
Hall of fame [toc]
Thanks to all the contributors below for helping us solve issues, improve documentation, refactor code, and more! 🙏
| author | title | link |
|---|---|---|
| @132ikl | Change tests which may invoke externals to use non-conflicting names | #14516 |
| @132ikl | Make glob stream | #14495 |
| @Bahex | docs(reduce): add example demonstrating accumulator as pipeline input | #14593 |
| @Bahex | test(path self): Add tests | #14607 |
| @DziubaMaksym | fix: sample_config | #14465 |
| @Jasha10 | enable test_cp_recurse on macos | #14358 |
| @Kissaki | Fix doc and code comment typos | #14366 |
| @PegasusPlusUS | Fix unstable test case: One time my windows report drive letter as lowercase | #14451 |
| @PerchunPak | Fix issues in the example configs | #14601 |
| @alex-kattathra-johnson | Shorten --max-time in tests and use a more stable error check | #14494 |
| @cptpiepmatz | Fix missing installed_plugins field in version command | #14488 |
| @cptpiepmatz | Fix commands::network::http::*::*_timeout tests on non-english system | #14640 |
| @maxim-uvarov | rewrite error message to not use the word function | #14533 |
| @sgvictorino | skip test_iteration_errors if /root is missing | #14299 |
| @sgvictorino | return accurate type errors from blocks/expressions in type unions | #14420 |
| @zhiburt | nu-table/ Do footer_inheritance by accounting for rows rather then a f… | #14380 |
Full changelog [toc]
| author | title | link |
|---|---|---|
| @132ikl | Rely on display_output hook for formatting values from evaluations | #14361 |
| @132ikl | Make length only operate on supported input types | #14475 |
| @132ikl | Add label rendering to try/catch rendered errors | #14477 |
| @132ikl | Change help commands to use name from scope instead of the name from the declaration | #14490 |
| @132ikl | Make glob stream | #14495 |
| @132ikl | Change tests which may invoke externals to use non-conflicting names | #14516 |
| @132ikl | Add merge deep command | #14525 |
| @132ikl | Remove grid icons deprecation warning | #14526 |
| @Bahex | Add path self command for getting absolute paths to files at parse time | #14303 |
| @Bahex | add multiple grouper support to group-by | #14337 |
| @Bahex | fix(group-by): re #14337 name collision prevention | #14360 |
| @Bahex | truly flexible csv/tsv parsing | #14399 |
| @Bahex | Add term query, for querying information from terminals. | #14427 |
| @Bahex | term query: refactor, add --prefix flag | #14446 |
| @Bahex | Propagate existing errors in insert and merge | #14453 |
| @Bahex | lsp and --ide-check fix for path self related diagnostics | #14538 |
| @Bahex | docs(reduce): add example demonstrating accumulator as pipeline input | #14593 |
| @Bahex | remove the deprecated index argument from filter commands' closure signature | #14594 |
| @Bahex | std/iter scan: change closure signature to be consistent with reduce | #14596 |
| @Bahex | remove content_type metadata from pipeline after from ... commands | #14602 |
| @Bahex | test(path self): Add tests | #14607 |
| @Beinsezii | command/http/client use CRLF for headers join instead of LF | #14417 |
| @DziubaMaksym | fix: sample_config | #14465 |
| @IanManske | Deprecate split-by command | #14019 |
| @IanManske | Change append operator to concatenation operator | #14344 |
| @IanManske | Make Hooks fields non-optional to match the new config defaults | #14345 |
| @IanManske | Add Filesize type | #14369 |
| @IanManske | Remove ListStream type | #14425 |
| @IanManske | Make timeit take only closures as an argument | #14483 |
| @IanManske | Remove duplicate implementations of CallExt::rest | #14484 |
| @IanManske | Add --long flag for sys cpu | #14485 |
| @Jasha10 | enable test_cp_recurse on macos | #14358 |
| @Kissaki | Fix doc and code comment typos | #14366 |
| @NotTheDr01ds | Load default_env.nu/default_config.nu before user env.nu/config.nu | #14249 |
| @NotTheDr01ds | Allow date to be added to duration | #14295 |
| @NotTheDr01ds | Deprecate date to-record and date to-table | #14319 |
| @NotTheDr01ds | Add proper config defaults for hooks | #14341 |
| @NotTheDr01ds | Fix small typos in std/dirs | #14422 |
| @NotTheDr01ds | Always populate config record during startup | #14435 |
| @NotTheDr01ds | Remove long-unused autoenv tests | #14436 |
| @NotTheDr01ds | Add example for PROMPT_COMMAND_RIGHT | #14439 |
| @NotTheDr01ds | Bump reedline to current main | #14455 |
| @NotTheDr01ds | Update default-files README | #14461 |
| @NotTheDr01ds | Allow inherited environment variables | #14467 |
| @NotTheDr01ds | Only run from_string conversion on strings | #14509 |
| @NotTheDr01ds | Use const NU_LIB_DIRS in startup | #14549 |
| @NotTheDr01ds | Allow both NU_PLUGIN_DIRS const and env at the same time | #14553 |
| @NotTheDr01ds | Set empty ENV_CONVERSIONS record by default | #14566 |
| @NotTheDr01ds | Update sample and scaffold files | #14568 |
| @NotTheDr01ds | Moves additional env vars out of default_env and updates some transient prompt vars | #14579 |
| @NotTheDr01ds | Add missing color_config settings | #14603 |
| @NotTheDr01ds | Doc file fixes | #14608 |
| @NotTheDr01ds | Remove duplicate version line | #14611 |
| @NotTheDr01ds | Add version info to startup banner | #14625 |
| @NotTheDr01ds | Add shape_garbage | #14626 |
| @NotTheDr01ds | Set split-by doc category to "deprecated" | #14633 |
| @PegasusPlusUS | Feature: PWD-per-drive to facilitate working on multiple drives at Windows | #14411 |
| @PegasusPlusUS | Fix unstable test case: One time my windows report drive letter as lowercase | #14451 |
| @PerchunPak | Fix issues in the example configs | #14601 |
| @RobbingDaHood | #14238 Now the file completion is triggered on a custom command after the first parameter. | #14481 |
| @RobbingDaHood | For # to start a comment, then it either need to be the first chara… | #14562 |
| @WindSoilder | Tests: add a test to make sure that function can't use mutable variable | #14314 |
| @WindSoilder | make std help more user friendly | #14347 |
| @WindSoilder | add --default flag to input command | #14374 |
| @WindSoilder | deprecate --ignore-shell-errors and --ignore-program-errors in do | #14385 |
| @WindSoilder | remove deprecated warnings | #14386 |
| @WindSoilder | raise ParseError if assign to a non-variable or non-mutable-variable | #14405 |
| @WindSoilder | du: add -l/--long flag, remove -a/--all flag | #14407 |
| @WindSoilder | update miette to 7.3 | #14454 |
| @WindSoilder | update unicode-width to 0.2 | #14456 |
| @WindSoilder | run cargo update manually to update dependencies | #14569 |
| @WindSoilder | update shadow-rs to 0.37 | #14617 |
| @WindSoilder | Remove -a/-all flag in du. | #14618 |
| @alex-kattathra-johnson | Shorten --max-time in tests and use a more stable error check | #14494 |
| @amtoine | add from ndnuon and to ndnuon to stdlib | #14334 |
| @amtoine | fix multiline strings in NDNUON | #14519 |
| @anomius | Seq char update will work on all char | #14261 |
| @app/dependabot | Bump crate-ci/typos from 1.27.0 to 1.27.3 | #14321 |
| @app/dependabot | Bump serial_test from 3.1.1 to 3.2.0 | #14325 |
| @app/dependabot | Bump tempfile from 3.13.0 to 3.14.0 | #14326 |
| @app/dependabot | Bump mockito from 1.5.0 to 1.6.1 | #14336 |
| @app/dependabot | Bump terminal_size from 0.3.0 to 0.4.0 | #14393 |
| @app/dependabot | Bump thiserror from 1.0.69 to 2.0.3 | #14394 |
| @app/dependabot | Bump shadow-rs from 0.35.2 to 0.36.0 | #14396 |
| @app/dependabot | Bump crate-ci/typos from 1.27.3 to 1.28.1 | #14447 |
| @app/dependabot | Bump crate-ci/typos from 1.28.1 to 1.28.2 | #14503 |
| @app/dependabot | Bump indexmap from 2.6.0 to 2.7.0 | #14505 |
| @app/dependabot | Bump multipart-rs from 0.1.11 to 0.1.13 | #14506 |
| @app/dependabot | Bump ureq from 2.10.1 to 2.12.0 | #14507 |
| @app/dependabot | Bump bytes from 1.8.0 to 1.9.0 | #14508 |
| @app/dependabot | Bump scraper from 0.21.0 to 0.22.0 | #14557 |
| @app/dependabot | Bump crate-ci/typos from 1.28.2 to 1.28.4 | #14614 |
| @ayax79 | Add support for converting polars decimal values to nushell values | #14343 |
| @ayax79 | Upgrading to polars 0.44 | #14478 |
| @ayax79 | Convert Filesize to Int | #14491 |
| @ayax79 | Documentation and error handling around polars with-column --name | #14527 |
| @ayax79 | Improve handling of columns with null values | #14588 |
| @ayax79 | Added flag --coalesce-columns to allow columns to be coalesced on full joins | #14578 |
| @cosineblast | Implement chunk_by operation | #14410 |
| @cptpiepmatz | Start to Add WASM Support Again | #14418 |
| @cptpiepmatz | Fix missing installed_plugins field in version command | #14488 |
| @cptpiepmatz | Fix table command when targeting WASM | #14530 |
| @cptpiepmatz | Expose "to html" command | #14536 |
| @cptpiepmatz | Fix commands::network::http::*::*_timeout tests on non-english system | #14640 |
| @devyn | Remove the NU_DISABLE_IR option | #14293 |
| @devyn | Turn compile errors into fatal errors | #14388 |
| @fdncred | allow nuscripts to be run again on windows with assoc/ftype | #14318 |
| @fdncred | fix ansi bleed over on right prompt | #14357 |
| @fdncred | update uutils crates | #14371 |
| @fdncred | allow ps1 files to be executed without pwsh/powershell -c file.ps1 | #14379 |
| @fdncred | add function to make env vars case-insensitive | #14390 |
| @fdncred | add new --flatten parameter to the ast command | #14400 |
| @fdncred | remove terminal_size crate everywhere it makes sense | #14423 |
| @fdncred | update rust toolchain to rust 1.81.0 | #14473 |
| @fdncred | Add environment variables for sourced files | #14486 |
| @fdncred | allow select to stream more | #14492 |
| @fdncred | add file column to scope modules output | #14524 |
| @fdncred | update to reedline 9eb3c2d | #14541 |
| @fdncred | fix 64-bit hex number parsing | #14571 |
| @fdncred | tweak polars join for better cross joins | #14586 |
| @fdncred | allow view source to take int as a parameter | #14609 |
| @fdncred | add view blocks command | #14610 |
| @fdncred | add config flatten command | #14621 |
| @fdncred | better error handling for view source | #14624 |
| @fdncred | lookup closures/blockids and get content in config flatten | #14635 |
| @fdncred | tweaks to config flatten | #14639 |
| @hustcer | Bump to dev version 0.100.1 | #14328 |
| @hustcer | Fix the document CI error for polars profile command | #14642 |
| @maxim-uvarov | rewrite error message to not use the word function | #14533 |
| @michel-slm | Bump quick-xml to 0.37.0 | #14354 |
| @michel-slm | Bump titlecase dependency | #14502 |
| @musicinmybrain | Update rstest from 0.18 to 0.23 (the current version) | #14350 |
| @musicinmybrain | Update procfs and which dependencies to their latest releases | #14489 |
| @musicinmybrain | Update roxmltree from 0.19 to 0.20, the latest version | #14513 |
| @paulie4 | explore: add more less key bindings and add Transition::None | #14468 |
| @ratherforky | Fix silent failure of parsing input output types | #14510 |
| @rfaulhaber | Add mac and IP address entries to sys net | #14389 |
| @rikukiix | Update SHLVL (only when interactive) on startup | #14404 |
| @schrieveslaach | Bump Calamine | #14403 |
| @sgvictorino | skip test_iteration_errors if /root is missing | #14299 |
| @sgvictorino | make command signature parsing more strict | #14309 |
| @sgvictorino | make ls return "Permission denied" for CWD instead of empty results | #14310 |
| @sgvictorino | normalize special characters in module names to allow variable access | #14353 |
| @sgvictorino | return accurate type errors from blocks/expressions in type unions | #14420 |
| @sgvictorino | support raw strings in match patterns | #14573 |
| @sgvictorino | return const values from scope variables | #14577 |
| @sholderbach | Cut down unnecessary lint allows | #14335 |
| @sholderbach | Remove unused FlatShapes And/Or | #14476 |
| @sholderbach | Add remove as a search term on drop commands | #14493 |
| @sholderbach | Improve sleep example using multiple durations | #14520 |
| @sholderbach | Remove unused sample_login.nu file | #14632 |
| @sholderbach | Remove pub on some command internals | #14636 |
| @sholderbach | Pin reedline to 0.38.0 release | #14651 |
| @userwiths | Fix inconsistency in ls sort-order | #13875 |
| @ysthakur | Add utouch command from uutils/coreutils | #11817 |
| @ysthakur | Avoid recomputing fuzzy match scores | #13700 |
| @ysthakur | fix: Respect sort in custom completions | #14424 |
| @zhiburt | nu-table/ Do footer_inheritance by accounting for rows rather then a f… | #14380 |