asdf

asdf is a runtime version manager.

It can replace nvm, rbenv, pyenv, gvm, and a pile of other version managers with a single tool.

You can pin versions globally or per project.

Global pinning is stored in ~/.tool-versions and is done with the command:

asdf global plugin-name version

For example:

asdf global rust 1.62.1

The real payoff is pinning versions per individual project.

In that case .tool-versions lives at the project root and is version-controlled alongside the source code.

Project-local versions are pinned with:

asdf local plugin-name version

For example:

asdf local golang 1.16.15

This lets every team member automatically switch to a specific runtime version for each project.

On my team, the runtime versions on every developer’s local machine match the versions on staging and production exactly.

That rules out any backwards-compatibility surprises or code that accidentally relies on language features the deployed runtime doesn’t have.

References