Mise: The Last Version Manager You’ll Ever Need
Why Version Management is a Headache (Until Now)
Ever found yourself debugging an issue for hours, only to realize you’re using the wrong Node.js version? Or struggling to get your Python environment just right? Version managers promise to solve these issues, but managing multiple tools can be a headache—until now.
Enter mise-en-place (mise): an all-in-one package version manager designed for simplicity, performance, and compatibility. With mise, you can forget about juggling multiple version managers and focus on coding.
What is mise?
Mise is a modern, fast, and flexible version manager that aims to replace tools like asdf while maintaining compatibility with its ecosystem. It allows you to manage multiple versions of programming languages, databases, and other dependencies with ease, all within a unified and intuitive interface.
Why mise Should Be Your Default Version Manager
-
Unified Version Management Instead of installing and managing multiple version managers ( e.g., nvm for Node.js, pyenv for Python, etc.), mise consolidates everything into one tool. This simplifies your development environment and reduces conflicts.
-
Speed and Performance Mise is designed for speed, leveraging Rust’s performance benefits. It runs 2-5x faster than asdf when switching environments or installing new versions, making it a compelling alternative for developers looking for efficiency.
-
Cross-Compatibility with asdf If you’re already using asdf, you don’t have to start over. Mise is compatible with
.tool-versions
files, so migrating is seamless. Just install mise, and it will pick up your existing configurations. -
Better Defaults, Less Configuration Mise improves upon asdf by offering sane defaults and reducing the need for extensive configuration. It also supports global, project-level, and shell-specific version management with ease.
- Simple and Intuitive CLI
The mise CLI is straightforward and user-friendly. Installing a tool version is as simple as:
mise use node@20 mise use [email protected]
It also supports lazy-loading, reducing overhead in shell startup times.
-
Automatic Version Switching Like asdf, mise automatically switches tool versions based on
.tool-versions
or.mise.toml
files, ensuring you’re always using the correct version for each project. - Built-in Plugin System Mise has its own plugin system while also supporting asdf plugins, allowing you to manage a wide variety of tools and languages effortlessly.
Before and After Mise
Workflow | Without Mise | With Mise |
---|---|---|
Node Version | nvm use 18 |
Automatic via .tool-versions |
Python Version | pyenv activate project-env |
Automatic via mise |
Install New Tool | Install separate version manager & tool | mise use [email protected] |
Mise vs Other Version Managers: Pros and Cons
Feature | mise | asdf | nvm | pyenv | Best For |
---|---|---|---|---|---|
Speed | ✅ Fast (Rust-based) | ❌ Slower (Bash-based) | ⚠️ Moderate | ⚠️ Moderate | Mise for speed |
Unified Tool Management | ✅ Yes | ✅ Yes | ❌ No (Node.js only) | ❌ No (Python only) | Mise for all-in-one |
Cross-Compatibility | ✅ Supports asdf plugins | ✅ Native support | ❌ No | ❌ No | Developers migrating from asdf |
Automatic Version Switching | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | All tools |
Lazy Loading | ✅ Yes | ❌ No | ✅ Yes | ❌ No | Faster shell startup |
Global & Project-Specific Versions | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | Consistency across projects |
Simplicity & Ease of Use | ✅ Very Simple | ❌ Requires Plugins | ⚠️ Moderate | ⚠️ Moderate | Developers who want minimal setup |
Real-World Developer Workflow
Imagine switching from a Node.js monorepo to a Python-based data science project. With mise:
cd my-node-app # Automatically uses node@18
cd ../ml-project # Automatically uses [email protected]
No manual switching, no broken environments. Just code.
Getting Started with mise
Installation on macOS
brew install mise
Or, using the official installation script:
curl -fsSL https://mise.jdx.dev/install.sh | sh
Then, add mise to your shell configuration:
eval "$(mise activate zsh)" # or bash/fish
Installation on Linux
If you’re using a Debian-based system, you can install mise via the official script:
curl -fsSL https://mise.jdx.dev/install.sh | sh
There’s also an available package for Arch Linux users:
pacman -S mise-bin
Once installed, follow the shell activation step:
eval "$(mise activate bash)" # or zsh/fish
Demo
Day-to-Day Usage Examples
- Setting a Global Version
mise use --global node@18 [email protected]
- Setting a Project-Specific Version
mise use --pin node@20 --path . mise use --pin [email protected] --path .
Or, even more explicitly:
mise use --pin node@20 --path ~/Projects/github/node-project
This creates or updates a
.tool-versions
or.mise.toml
file in the current directory. Without--path
,mise
might save it to the nearest parent folder instead. - Checking Installed Versions
mise list
- Uninstalling a Version
mise uninstall node@18
- Running a Temporary Version Without Installing
mise shell node@20 -- node -v
Tips and Troubleshooting
- Update all plugins:
mise plugins update
- Clean unused versions:
mise prune
- See what’s installed:
mise list
- View available versions:
mise ls-remote <plugin>
Who Should Use Mise?
- Developers using multiple languages (Node.js, Python, Rust, etc.)
- Teams that want consistent tooling across projects
- People frustrated with slow version managers
- Those looking for a simple, high-performance alternative to asdf
Final Thoughts
If you’re tired of juggling multiple version managers and want a unified, high-performance solution, mise is an excellent choice. With its speed, compatibility, and simplicity, it’s a strong contender for becoming your default package version manager.
Ditch the clutter, simplify your setup, and give mise a try today at mise.jdx.dev! 🚀