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.