I would recommend the use of mise even for basic usage.
I only use it to manage OTP, elixir and nodejs; I don’t use any other features.
Which means that I only ever use two commands:
mise install inside a project after .tool-versions has been updated (by a coworker or myself)
mise use <elixir|erlang|nodejs>@<version> to change the default version used system-wide
With asdf, I found that I had trouble remembering how to use it. Plus, having to “manually” install each tool in the right version specified in .tool-versions was cumbersome.
I think Mise is generally recognised as being better than ASDF. There are articles listing all the reasons and I can’t recall them off hand, but I did read them all a while ago and made the switch after. This is all I do when setting up a new machine:
# Install Mise
curl https://mise.run | sh
# Activate Mise to keep the environment variable and `PATH` updated automatically.
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
# Restart current shell session
exec bash -l
# Install Erlang
mise install erlang@latest && mise use erlang@latest
# Install Elixir
mise install elixir@latest && mise use elixir@latest
# Run Mise Doctor to verfiy no issues
mise doctor
# List installed tools & runtimes
mise ls
I have a .tool-versions file. When I set up a new project I type asdf install.
I have a Taskfile.yml for my tasks, and use Task (https://taskfile.dev/) as a task runner.
That’s about it. I’m happy with the setup, I know it, and it works well for me.
Mise seems nice and I would definitely try it if I felt I would benefit from switching tools.
The best tool for you is often the one you know .
There’s obviously nothing wrong with playing around trying some new tooling though, even if it’s just for fun, and you have the time to spare.