mise: A One-Stop Development Tool Version Manager to Replace nvm/pyenv

mise is a Rust-powered tool that unifies version management, env vars, and task running in one CLI.
mise is an open-source development environment management tool written in Rust that consolidates version management (replacing nvm, pyenv, rbenv), environment variable handling (replacing direnv), and task running (replacing Make/npm scripts) into a single binary. With 32K+ GitHub stars, asdf plugin compatibility, and sub-millisecond performance, it offers teams a unified, reproducible dev setup through simple TOML configuration.
Introduction: The Pain Points of Development Environment Management
Every developer has experienced this predicament to some degree: Project A requires Node.js 18, while Project B depends on Node.js 20; Python version management needs pyenv, Node needs nvm, and Ruby requires rbenv — each language has its own version management tool. On top of that, environment variable configurations are scattered everywhere, and build, test, and deployment scripts are spread across Makefiles, npm scripts, and shell scripts, making unified maintenance difficult.
This fragmented tool ecosystem not only raises the barrier for newcomers but also significantly undermines project reproducibility. The fragmentation of development tool version management has been a longstanding issue — early Unix/Linux systems relied on system package managers (like apt, yum) to install language runtimes, but system-level installation could only maintain one global version, unable to meet the needs of parallel multi-project development. As a result, each language community developed its own version management solution: Ruby's rvm (2009) and rbenv (2011), Node.js's nvm (2010), and Python's pyenv (2012). asdf, which appeared in 2014, attempted to unify multi-language version management with a plugin architecture, but its shell script implementation introduced performance bottlenecks and cross-platform compatibility issues. This historical evolution laid the groundwork for mise's creation.
mise was built specifically to solve this series of problems. Written in Rust, it has already garnered over 32,000 Stars on GitHub, with 135 new stars added in a single day, showing continuously rising popularity.

What is mise: A One-Stop Development Environment Management Tool
mise (pronounced like the French "meez," derived from "mise en place," meaning having everything prepared before cooking) positions itself as a "one-stop" development environment management tool, combining three core capabilities:
Development Tool Version Management: Replacing nvm, pyenv, rbenv
mise serves as a unified replacement for asdf, nvm, pyenv, rbenv, and other version managers. You can use it to install and switch between runtime versions of virtually any language — Node.js, Python, Ruby, Go, Rust, Java, and more. It's compatible with asdf's plugin ecosystem, meaning the hundreds of plugins accumulated by the asdf community can be directly reused, significantly reducing migration costs.
asdf's plugin ecosystem is one of its greatest assets, with the community currently maintaining over 600 plugins covering everything from mainstream programming languages to DevOps tools like Terraform and kubectl. Each asdf plugin is essentially a set of shell scripts that define how to download, install, and switch versions of a specific tool. mise achieves full compatibility with the asdf plugin interface, allowing these existing plugins to be called by mise without any modification. Additionally, mise provides native core plugins (for high-frequency tools like Node.js and Python), which bypass the shell script layer and handle version resolution and installation logic directly in Rust, further improving performance.
Simply place a mise.toml configuration file in your project root directory, declare the required tools and versions, and mise will automatically switch to the corresponding versions when you enter the directory and restore them when you leave. This directory-based automatic switching greatly simplifies the experience of parallel multi-project development. mise's choice of TOML (Tom's Obvious, Minimal Language) as its configuration format is well-considered. TOML was designed by GitHub co-founder Tom Preston-Werner with the goal of being a semantically clear, easy-to-read minimal configuration language. Compared to JSON's lack of comment support and YAML's indentation sensitivity that easily leads to errors, TOML strikes a good balance between readability and rigor. mise.toml supports hierarchical overrides (project-level > user-level > system-level) and can differentiate configurations for different deployment environments through environment tags (such as [env.development], [env.production]), achieving declarative environment management.
Environment Variable Management: Replacing direnv
Similar to direnv, mise allows you to declare project-specific environment variables in configuration files. When you enter a project directory, these variables are automatically loaded; when you leave, they're automatically unloaded. This is particularly useful for managing API keys, database connection strings, and other sensitive or environment-related configurations, avoiding global environment variable pollution.
direnv is a tool that implements directory-aware environment variable management at the shell level, hooking into the shell's cd command to automatically load/unload variables defined in .envrc files. Its core limitations include: needing to eval a piece of shell code every time you switch directories, which poses security risks in certain scenarios; its configuration language is bash script, which has a learning curve for developers unfamiliar with shell programming; and it only solves the environment variable problem without linking to version management and task running. mise incorporates environment variable management into its unified TOML configuration system, preserving direnv's core capabilities while eliminating these limitations.
Task Runner: Replacing Make and npm scripts
mise includes built-in task runner functionality that can replace Make, npm scripts, and similar tools. You can define build, test, deployment, and other tasks in the configuration and execute them with a unified mise run command. Tasks also support dependency declarations, making complex workflow orchestration clear and controllable.

Why Choose mise Over Other Version Management Tools
Performance Advantages from Rust Implementation
mise is written in Rust, offering orders-of-magnitude speed improvements compared to shell-script-based asdf. In scenarios involving frequent directory switching and version detection, this performance difference results in a noticeably smoother development experience. Startup has virtually no perceptible delay — something many shell-based tools struggle to achieve.
mise's choice of Rust as its implementation language is no accident — it reflects a significant trend in the development tools space. In recent years, numerous Rust-rewritten command-line tools have gained widespread adoption: ripgrep replacing grep, fd replacing find, bat replacing cat, and exa/eza replacing ls. Rust's zero-cost abstractions, GC-free memory management, and ability to compile into a single static binary make it particularly suitable for developing CLI tools that require extremely low startup latency. For tools like mise that need to execute detection logic on every shell prompt refresh, sub-millisecond response time is critical — asdf's shell script implementation can introduce 100-200ms of delay in the prompt, while mise typically stays below 10ms.
Unified Design Philosophy
mise's greatest value lies in "integration." In traditional workflows, developers need to simultaneously maintain multiple independent tools like nvm, pyenv, direnv, and Make, each with its own configuration format and usage patterns. mise consolidates these capabilities into a single binary and one configuration file, significantly reducing cognitive overhead.
For team collaboration, this means new members only need to install mise and run a single command to get a complete development environment consistent with the team — including correct tool versions, environment variables, and available tasks. Project reproducibility and consistency are fundamentally guaranteed.
Compatibility and Zero-Cost Migration
mise maintains compatibility with asdf's .tool-versions files and also supports reading common version declaration files like .nvmrc and .node-version. This means existing projects can migrate to mise at virtually zero cost without large-scale overhauls to existing configurations.
Typical Use Cases for mise
Multi-language full-stack projects: A project that includes frontend Node.js, backend Python, and infrastructure Terraform can declare all tool versions in a single mise.toml, configured once and shared by everyone.
CI/CD pipelines: Since mise ensures consistency between local and production environment tool versions, it effectively prevents the classic "works on my machine" problem. "Works on My Machine" is one of the most classic problems in software engineering. Its root cause lies in implicit differences between development environments and CI/CD environments: minor tool version differences (like Node.js 18.17 vs. 18.19), different system library versions, missing or inconsistent environment variables, etc. Docker alleviates this problem to some extent, but its heavyweight nature (image build time, resource consumption) makes it unsuitable for all scenarios. mise provides a lighter-weight solution: by executing mise install in CI pipelines to precisely reproduce the local development environment's toolchain without the extra overhead of containerization. Major platforms like GitHub Actions and GitLab CI can integrate mise through simple steps.
Open source project maintenance: Contributors only need to install mise to quickly set up a development environment that meets project requirements, lowering the contribution barrier.
Summary
mise represents the "simplification" trend in development toolchain management. It unifies three capabilities that developers use frequently but have long been fragmented — version management, environment variables, and task running — into a single high-performance Rust tool. With 32,000 Stars of community recognition plus compatibility with the asdf ecosystem, it's a development environment management solution worth serious evaluation today.
If you're troubled by the fragmentation of multiple version management tools, or want to establish a consistent, reproducible development environment for your team, mise is undoubtedly worth trying. It can serve as a smooth replacement for existing tools or as an infrastructure starting point for new projects, helping developers truly focus their energy on the code itself rather than the tedious details of tool configuration.
Related articles

oqoqo: A Developer Tool for Building Custom AI Evaluation Benchmarks with Real-World Tasks
oqoqo is a developer-focused AI evaluation tool for building private benchmarks, measuring Agent performance on real products, and optimizing model selection across GPT, Claude, and Gemini.

Prime Agent: An Open-Source Coding Agent That Can Improve Its Own Underlying Framework
Prime Agent is an open-source self-improving coding agent using Recursive Language Models and Continual Harness abstractions, achieving 95.5% on ARC-AGI-3.

Salesman AI: A Full-Cycle Sales AI Assistant from Pre-Meeting Rehearsal to Post-Meeting Follow-Up
Salesman AI is a full-cycle AI sales assistant covering pre-meeting buyer intelligence, adaptive rehearsal, post-meeting deal intelligence extraction, and follow-up management to turn every meeting into measurable pipeline progress.