🤔 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:

  1. Mise is one stop shop for building dev envs. It includes tool version management, environment setup and task execution.
  2. 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.