BEAMUp is still early but it works for basic everyday usage so I released and am announcing it, GitHub - tsloughter/beamup: Install and control active BEAM languages. There is an curl | sh installer, or download a binary, or build from source with cargo if you prefer.
Things that works (ok, “work”, I actually need to add tests too!):
- Build Erlang from a Github releases
- Install Gleam from a binary release
- Set global default of Erlang or Gleam to use
- Set a per-directory version of Erlang or Gleam to use
Most important thing that doesn’t work yet that may be a blocker to you trying it is no custom ./configure options to Erlang builds. That is the next thing I’m working on, so hopefully you’ll see a release 0.2.0 when you read this and it’ll be in there.
Other important missing features:
- Delete an install
- List installs
- Build Erlang from branch or tag and use a different repo
- Install Erlang from binary builds
- Install/build Elixir
- Build config profiles
Also to come is “component” installs where it’ll support installing things like rebar3 and elp (ELP - Erlang Language Platform | ELP).
I’ll end with a question, if you have any thoughts on support for installing builds for other hosts let me know on this issue, Support "cross-compilation" of Releases? · Issue #16 · tsloughter/beamup · GitHub
–
Figure I’ll need to answer, ‘why not kerl’, and no, I don’t have a good answer for why I don’t instead add support to kerl for binary installs and installing stuff like Gleam and elp/rebar3 (it seems it does now support installing from a branch or tag? This originally was a feature of erlup different from kerl). Some of those I don’t know that the maintainers would accept, but I also never asked, it’d be cool if they did! I started erlup in part to learn Rust and, honestly, I still can barely make my way around it, so a major part of why BEAMUp exists is simply my goal of learning Rust ![]()
I should note though that BEAMUp does “active version” differently from kerl. It doesn’t rely on your PATH, you don’t need to activate a version. Instead a link from the commands like erl, erlc and gleam is setup which actually runs beamup, beamup looks up the active version based on the global config or the local config and then runs the appropriate executable. This is a hardlink now because I saw that is what rustup does and those work on Windows which I plan to support. I still need to verify if that is the right decision, erlup used a symlink.