🤔 What?
You are working on multiple projects and you need multiple versions and tools of each project.
🚀 How?
There are multiple ways to do this. Some are stack specific and others are stack agnostic (e.g pipx, npx, asdf, cargo…).
My favorite tool is Mise (AKA mise-en-place). The best 2 things about mise besides speed are:
- Mise is one stop shop for building dev envs. It includes tool version management, environment setup and task execution.
- Mise supports multiple backend to download and install dev tools including stack specific ones (pipx, Go, Cargo …) and stack agnostic ones (aqua, asdf, ub2
Let’s say you have 2 projects using different versions of terraform. And each projects uses a different set of tools.
# Use terraform v0.9 for project 1
cd project_1
# Use terraform v1.3 for project 2
mise use terraform@1.3
cd project_2
# Use latest version of terraform globally
mise use -g terraform
You can also use other backends to install your tools in case the default backend (aqua) does not contain the tool of version you are looking for
# Install a binary release from GitHub release using ubi backend.
mise use ubi:rust-lang/mdBook #rust-lang/mdBook is the GitHub repo.
# Install a python binary using pipx backend (it uses uv if available).
mise use pipx:aws-sso-util
Mise provides other cool features you can check in their docs.