I have asked on Twitter what was your favorite version manager for Ruby.
The clear leader was Rbenv, ASDF, which was most of the comment for the last response; then we have RVM, but I will not consider it for the rest of this post because it is pretty obscure how it works :).
Let's understand the critical difference between those and help you make some choices for your Ruby Version manager.
Community
Leaderboard :
1.Rbenv
2.ASDF
3.Chruby
First, the Tweet shows that Rbenv is a great winner for the Ruby community. But it seems mainly because it is the goto solution.
Nevertheless, this is a great thing because if you have an issue. It is more likely that you are one of many to have it.
Versatility
In terms of versatility, here is the leaderboard :
1. ASDF
2. Rbenv
3. ChRuby
Indeed, ASDF enables you to manage your ruby version and supports many other languages and tools like nodejs. Moreover, you can add a plugin to it.
Rbenv is also versatile, and you can add plugins; nevertheless, as its name suggests, you can only manage the ruby version. Rbenv and ASDF both use the same underlying gem, which is ruby-build.
ChRuby is not extensible, and you can only manage Ruby with it. But it comes with ruby-mac, an excellent tool for installing ruby quickly on Mac.
Speed
1. ChRuby
2. Rbenv
3. ASDF
Why?
Rbenv and Asdf are Shim. They act like a proxy for every call to Ruby. Inevitably, they are slower.
Chruby does not provide that, and you need to use chruby-exec if you want to use the version managed by chruby.
Misc
Moreover, both Rbenv and ASDF use ruby-build to compile and install ruby. Whereas chruby can use both ruby-build and ruby-install for new rubies installation.
In addition, chruby is really simple to install if you are on Mac thanks to ruby-mac utility tool.
And the winner is ?
There is no such thing as a better version manager. It all depends on what you want to do.
If you want a lightweight and quick version manager, use chruby.
You have several choices if you want something with more extensibility and do not care about speed :
ASDF if you want to manage several other language than Ruby.
Rbenv if you need a versatile version manager that manages only ruby
There is this good resource that also talk about different ruby version manager from the Rbenv repository. With some links to benchmarks of ASDF and Rbenv.
Top comments (7)
Very good article on version managers for Ruby.
After coming across ASDF in 2021 I'm loving it. On my latest install I'm managing Ruby, Node, Erlang and Elixir as well as PostgreSQL versions with it.
...also Rust for Ruby 3.2 with YJIT
Thanks ! ASDF seems indeed to be really cool for the versatility :)
asdf all the way!
Thanks. One of the first reviews I've read the fairly rates chruby. Fast and simple. Most reviewers seem to push the cooler, more complex ADSF and rbenv without really saying many may not need it.
Simplicity is a cool feature, often underrated :)
I followed the GoRails guide (gorails.com/setup/ubuntu/24.04) and it switched from ASDF to mise (from Ubuntu 22.04 onward). I think this eliminates the shim useage. Can you comment? I like that it's for generic tool useage, like ASDF.
choose rtx and you'll get performance (written in rust, can be shim-less) as well as extensibility since it uses asdf plugins.