Elixir Version Managers

Edit: Please see this more recent thread:

Forum Poll / 2019


In Ruby we have RVM, Chruby Rbenv etc - what are the Elixir options? Maybe we can compile a list…

ExENV

exenv lets you easily switch between multiple versions of Elixir. It’s simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

exenv is a Elixir version of rbenv and used denv as a reference. Thanks to @sstephenson and @repeatedly.

KIEX

Kiex allows you to easily build and switch between different Elixir versions.

It supports setting the default (global) Elixir version as well as per shell/project versions.

Everything is self-contained under ~/.kiex.

Usage is based lightly on RVM, kerl, and rbenv.

ASDF

Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more


Blog Posts

Changing versions of Elixir and Erlang - 9elements.com

Managing Elixir versions with Kiex - johanwarlander.com

Introducing Asdf: The Extendable Version Manager - stratus3d.com

Integrating direnv with kiex - blog.differentpla.net (by @rlipscombe)

14 Likes

Not exactly sure if this fits the description but it’s quite popular Exrm

I think @AstonJ means a software to let you have multiple elixir versions in your machine. :wink:

1 Like

Guys I wanted to use a version manager for Elixir. I would like to request about each and everyones review on the above available version managers. At first glance I like the concept of asdf being able to manage also ruby and node however am not sure if it has any quirks. I would like to ask the advantage of one over the other hopefully as far as you experienced them.

1 Like

I’ve added a heading for Blog Posts - please feel free to add any you find. I think they could be helpful too :slight_smile:

asdf has the big downsite, that it hides the installed system version completely and you can’t use it except by fully qualifying it (might create other problems because system and asdf executables are called in a mix) or kicking asdfs binary wrapper folder out of the $PATH. This makes it totally useless for me. Also it plugins for elixir and erlang don’t hold their promisses. I can’t install from git master, tag or sha, but only official releases while I have to test some of my work against master of both of them.

So I am using kiex (for elixir) and evm (erlang) currently. I don’t know if there is an easier way to do it, but for my personal testing it’s enough to be able to quick compile erlang from source and set $PATH in that shell so that erlang is used directly out of the sourcetree, while I do kiex install master and use that elixir version as necessary.

Especially the erlang workflow isnt optimal so far, but weren’t possible with asdf in general.

3 Likes

Thanks @NobbZ for sharing your perspective about asdf :slight_smile:

1 Like

Any newer info on version managers? What is the suggested way of installing version 1.4 on Ubuntu? I used apt-get which currently installs version 1.3, but it is incompatible with some packages/proejcts, so I would like to update to 1.4.

1 Like

I’d like to say that I have been using asdf to manage all of Erlang, Elixir, Ruby, Haskell, Idris, Rust, Postgres, PHP, Node.js and Crystal without any problems. The problems with installing from git master, tag or commit hash seem to be fixed, as far as I know. (I use the master version of Elixir and the nightly version of Rust, for instance).

The great advantage of asdf is that it handles all the tool-specific version management for you, and you do not have to remember all the different installation procedures for each of them.

I think @NobbZ’ advice thus is outdated now, but of course YMMV ;-).

5 Likes

Ok, thanks I will try out asdf.

I want to use asdf for everything and I’ve found that it’s fine for global installs of most languages, but I can’t get it to be more effective for Ruby than RVM. I don’t know what it is, but something about RVM works proper for me every time while I can’t get the same experience from rbenv or asdf.

As a data point, I’ve been using asdf for a few months also. It works like a charm and would be great if I had to manage multiple versions.

I’ve only run into one minor issue. I sometimes use IntelliJ IDEA and it would not recognize asdf’s elixir or erlang installs as valid. I ended up symlinking ~/.asdf/shims/[iex,erl,mix] to /usr/local/bin which quieted IDEA down.

2 Likes

Any equivalent to .ruby-gemset that works for asdf?

I’m using asdf managing Elixir, Ruby, Rust, Erlang and … Highly recommend it!

2 Likes

Not gemset but at least you can pin the versions of the languages

1 Like

What’s everyone using these days?

2 Likes

I use asdf everyday, it’s simple and great.

3 Likes

ASDF for everything beside rust. Works great almost out of the box with everything. But it doesn’t work for rust (for me at least) because I couldnt make rustup add component work with asdf, and I need it very much.

1 Like

I switched to systems elixir for development and have a script which runs tests in docker containers which are mimicking my target system as close as possible.

This does in a certain sense help to keep best practices which are enforced by warnings on a current version (using Funtoo I am mostly up to date) while stil ensuring compatibility with my target system(s).

2 Likes

Is there a way to get it to respect .ruby-gemset ?