An Alternative to anyenv and asdf: Setting Up a Development Environment with Mise
This blog post is a translation of a Japanese article posted on October 24th, 2025.
Introduction
In software development, it is common to encounter situations like a project requiring Node.js v16, but another project not running unless it’s v18.
While it is natural to handle different languages and tool versions for each project, the constant need to switch contexts or repeat installation processes can become a burden for developers.
Historically, tools like anyenv and asdf have been widely used to help solve these issues.
However, mise has recently gained attention as a tool aiming for a simpler, more modern approach.
What is mise?
mise is a tool designed to unify the version management of multiple programming languages and CLI tools.
It is engineered with a focus on simplicity and speed, improving upon legacy systems that were often criticized for having “complicated configurations” or “unintuitive operations.”
Its main features include:
- Simple Usability: It features an intuitive command structure, allowing users to get started in a relatively short amount of time.
- Project-Based Environment Management: By defining necessary tools and versions in mise.toml, it becomes much easier to reproduce specific environments.
- High Performance: Built with Rust, it ensures snappy environment switching and version specification.
- Designed for Teams: Sharing configuration files allows team members to use the exact same environment, significantly smoothing the onboarding process.
Mise prioritizes easy and fast switching between development environments, making it a versatile tool for everything from personal use to team development.
Key Features
- Version Management: Easily switch between versions of languages like Node.js, Python, and Ruby.
- CLI Tool and Utility Management: You can also manage non-language CLI tools such as gcloud, pnpm, terraform, and kubectl. This allows you to reproduce the full development environment, combining both languages and tools as a single set.
- Project-Specific Settings: Using mise.toml facilitates the automatic reproduction of environments on a per-project basis.
- High Speed: The Rust-based implementation provides a low-stress experience during daily use.
Installation
On macOS, you can install it using Homebrew.
brew install mise
If you are using another operating system, please refer to the official documentation.
Basic Usage
Installing from mise.toml
mise install
Installing a Specific Tool
mise use <tool_name>@<version>
Example: Installing node v22.20.0
mise use node@22.20.0
Checking Available Versions
mise ls-remote <tool_name>
Checking Installed Tools
mise list
Comparison with Other Tools
The Role and Limitations of anyenv
- Scope of Management: anyenv acts as a combined wrapper for “individual language version managers” like nvm, rbenv, and pyenv. However, CLI tools like gcloud, pnpm, terraform, and kubectl are out of scope, meaning they must be installed separately via Homebrew or official installers.
- Operational Impact: While languages can be configured via anyenv, CLI tools are managed through a separate system. This can make it difficult to completely reproduce a “Language + Tool set” environment on a per-project basis.
Key Differences Between asdf and mise
- Configuration Files: asdf uses .tool-versions. Mise adopts mise.toml, which offers clearer declarations for each tool and better compatibility with project settings.
- Speed and Daily Use: Mise is fast, offering snappy switching operations. You can expect improved responsiveness in daily use compared to asdf.
Comparison Table
| Tool | anyenv | asdf | mise |
| Management Scope | Managers per language (nvm, pyenv, etc.) | Languages + CLI Tools | Languages + CLI Tools |
| Ease of Installation | Medium | Medium | High |
| Project Reproducibility | Languages only (Tools managed separately) | Good | Very Good (Integrates Languages + Tools) |
| Config File | Individual env configs | .tool-versions | mise.toml |
| Performance | Light (Simple) | Slightly heavy | Fast (Rust-based) |
| Team Suitability | Low | Average | High |
Summary
Managing development environments is an unavoidable theme as long as we deal with different languages and tools across projects.
While tools like anyenv and asdf have been the standard choices, mise offers a compelling new alternative in terms of simplicity, speed, and environment reproducibility.
- Low learning curve due to an intuitive command structure.
- Enables environment reproduction via
mise.toml, making it suitable for team development. - Rust-based high performance ensures a low-stress daily experience.
- Capable of managing non-language CLI tools like gcloud and pnpm.
Given these features, it is a tool worth considering for both individual and team use.
If you find yourself spending too much time on environment setup and version management, or if you are juggling multiple projects in parallel, trying mise could significantly improve your development experience.