rsh 0.80

rsh, or Rsh for short, is a new shell that takes a modern, structured approach to your command line. It works seamlessly with the data from your filesystem, operating system, and a growing number of file formats to make it easy to build powerful command line pipelines.

Today, we're releasing version 0.80 of Rsh. This release adds record type annotations, modules from directories, and improvements to the standard library.

Where to get it

Rsh 0.80 is available as pre-built binariesopen in new window or from crates.ioopen in new window. If you have Rust installed you can install it using cargo install rsh.

NOTE: The optional dataframe functionality is available by cargo install rsh --features=dataframe.

As part of this release, we also publish a set of optional plugins you can install and use with Rsh. To install, use cargo install rsh_plugin_<plugin name>.

Themes of this release / New features

Record type annotations (@1Kinotiopen in new window)

Starting with this release, you can add more information about the type of a record your command expects. For example:

def okay [person: record<name: string age: int>] {}

The above will require two fields to be present, a name that's a string, and an age that's an int. The current version requires that the record has exactly these fields, though we may loosen this in future releases to allow for structural subtyping.

Modules from directories (@Kubouchopen in new window)

It is now possible to create a module from a directory. The directory must contain mod.rsh and all other .rsh files are added as a submodule of the module. This allows some traditional shell patterns such as dumping completion files into a directory to be loaded automatically. Check out the newly updated book chapteropen in new window for more details and examples.

The enabling feature for module directories was organizing modules into submodule structure instead of solely relying on re-importing symbols with export use. module and especially export module have been added as a result of this change. While not immediately visible, the module update allows for cleaner submodule oganization without relying on re-exporting symbols with export use. Since modules are now aware of their submodules, in the future we hope to improve discoverability of definitions within modules, enhancing our IDE support (such as our LSPopen in new window).

Stdlib update ([@amtoine, @EmilySeville7cfg, @skelly37, @YummyOreo][std-lib PRs])

hash commit PR
3268ecd11 FEATURE: add the bench command to the standard library #8969open in new window
155de9f6f Added log custom command & exported log levels #9055open in new window
edb61fc1d Try to show help pages for external commands w/ help command #9025open in new window
7a945848d swap the date and the log level in the std log format #9138open in new window

other interesting new features

hash commit PR
e251f3a0b Change type of parameter default values to Option<Value> #8940open in new window
c422c6cc3 Fix completion on $rsh to show correct menus #8919open in new window
44493dac5 Add extern def which allows raw arguments #8956open in new window
fb10e1dfc add --ide-ast for a simplistic ast for editors #8995open in new window
4ca47258a Add --redirect-combine option to run-external #8918open in new window
e590d3587 enable history isolation #9063open in new window
d45e9671d Suggest existing variables on not found #8902open in new window
a7c1b363e Don't run .sh files with /bin/sh #8951open in new window
e4625acf2 support bracketed paste #8907open in new window
b82e279f9 REFACTOR: remove deprecated commands (old-alias) #9056open in new window
10d65b611 adds a list subcommand to input (interactive selections) #8963open in new window

Breaking changes

Full changelog

rsh

Extension

Documentation

rsh_Scripts

reedline