Hi all.

I’d like to introduce rustup, the fabulous new way to install and manage Rust toolchains. This is the successor to multirust, and began as multirust-rs by @Diggsey. Although there’s a lot of work yet to do on it, it is feature complete and I’d like to get some feedback. To try it just go to http://www.rustup.rs and follow the instructions - everything you need to know should be reachable from there. I strongly recommend uninstalling any existing version of Rust before doing so.

After you’re done come back here and consider the questions below and leave your feedback. This is an early beta, and there’s still a lot of churn to come over the next month, so I caution against recommending it for wider use yet.

Thanks to @Diggsey for creating multirust-rs, to @chriskrycho for reviewing the rustup CLI, @alexcrichton for setting up the build infrastructure, and to all the multirust and multirust-rs users and contributors.

Does grouping commands into subcommands help?

In order to make the CLI interface more approachable and leave more room for expansion I’ve grouped commands together logically, so commands that just manage toolchains are under rustup toolchain [subcommand] , those that deal with overrides rustup override [subcommand] . While this makes the CLI in some ways feel more consistent it also makes some common commands more verbose: for example adding a target is now rustup target add instead of rustup add-target . To then combat this verbosity there are some top-level commands that can be thought of as shortcuts, most notably the rustup update command, which could also be thought of as rustup toolchain update (which isn’t implemented to to avoid duplication).

The three ‘sub-command’ commands, toolchain , override and self also notably don’t do anything intersting when not provided a subcommand. In other words, whereas rustup toolchain list is a real command, rustup toolchain , the shorter command, doesn’t do anything. I could imagine rustup toolchain for example displaying the current toolchain like rbenv version (but I have other reservations about using rustup toolchain for this).

I still feel mostly good about this direction, but not sure if the ergonomics are in order yet.

Do rustup and rustup update do the right thing?

The simple rustup command is the ‘update all the things’ command. It updates all toolchains and self-updates, without confirmation. Originally I wanted this to be the only update command, but pretty quickly found myself just wanting to update nightly, so added rustup update . Now there are three ways to update toolchains: rustup , rustup update nightly , which does what you expect, and rustup update which updates the active toolchain.

I’ve already found myself typing rustup update and mistakenly wondering why it wasn’t ‘updating all the things’, which makes me think there are too many ways to update.

Are the verbs right?

A lot of the rustup commands are transactional: add or remove some piece of the system. For example

rustup update <toolchain> / rustup toolchain remove <toolchain>

/ rustup target add <target> / rustup target remove <target>

/ rustup override add <toolchain> / rustup override remove

So the ‘add’ / ‘remove’ verbs are consistent except for with toolchains, which use ‘update’, not ‘add’. And again, update being its own command for convenience makes the lack of a rustup toolchain add command inconsistent.

I happen to prefer three different verbs for adding here - ‘update’ for adding (or updating) toolchains, ‘add’ for adding targets to an existing toolchain, and ‘set’ for setting the override. If we were to follow that though then it would provide no intuition at all for adding different types of things.

What information is missing from the website?

The website is supposed to be very slim, just enough to convince you to run the installer and get you on your way. Is there any other information that you were expecting to be given during install?

If anybody wants to try their hand at the website style too, I’m not wedded to this. I generally am going for something simple, strong, and authoritative. People who encounter it should think, “yeah, this website knows what’s up; I’m going to do what it says”.