mise (mise-en-place)

mise is a fast, Rust-based development environment tool that consolidates version management, environment variable handling, and task automation into a single unified interface. Pronounced “MEEZ ahn plahs,” mise serves as a modern, faster alternative to tools like asdf, nvm, pyenv, and rbenv.

Core Capabilities

1. Dev Tools Version Management

Manages versions of programming language runtimes and tools:

  • Node.js, Python, Java, Go, Rust, Ruby
  • Terraform, AWS CLI, Kubectl
  • 100+ tools via asdf plugin ecosystem

2. Environment Variable Management

Replaces direnv for managing per-project environment variables:

  • Global configuration via ~/.config/mise/config.toml
  • Project-level mise.toml overrides
  • Automatic activation entering/exiting directories
  • Support for .env files

3. Task Runner

Built-in task automation replacing make, npm scripts, just, etc.:

  • Define tasks in mise.toml
  • Automatic tool version and environment variable inheritance
  • Task dependencies and parallel execution
  • Multi-line command support

Performance & Architecture

Rust-Based Speed

  • Written entirely in Rust (not shell scripts)
  • ~5ms prompt load overhead vs. ~120ms with asdf
  • Direct PATH modification instead of shims
  • Minimal shell startup latency

Compatibility

  • Drop-in replacement for asdf: Reads .tool-versions files natively
  • Windows support: Unlike asdf, mise supports Windows (for non-asdf backends)
  • Leverages asdf plugins: Works with existing asdf plugin ecosystem
  • Zero-config migration: Move from asdf with no configuration changes

Installation

Quick Install

curl https://mise.run | sh  

Activation (choose your shell)

Bash:

echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc  

Zsh:

echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc  

Fish:

echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish  

PowerShell:

echo '~/.local/bin/mise activate pwsh | Out-String | Invoke-Expression' >> ~/.config/powershell/Microsoft.PowerShell_profile.ps1  

Usage Examples

Install & Use Tools

# Install specific version globally  
mise use --global node@24  
mise use --global python@3.11  
  
# Install multiple tools  
mise use --global node@24 go@1 terraform@1.5  
  
# Execute one-off command with specific version  
mise exec node@24 -- node -v  

Environment Variables

# mise.toml  
[env]  
NODE_ENV = "production"  
AWS_REGION = "us-west-2"  
DATABASE_URL = "postgres://..."  

Task Definition

# mise.toml  
  
[tasks.build]  
description = "Build the project"  
run = "npm run build"  
  
[tasks.deploy]  
description = "Deploy infrastructure"  
depends = ["validate", "plan"]  
run = """  
terraform apply -auto-approve  
notify-team  
"""  
dir = "{{config_root}}"  

Configuration

mise.toml Structure

[tools]  
node = "24"  
python = "3.11"  
terraform = "1.5"  
  
[env]  
NODE_ENV = "production"  
AWS_REGION = "us-west-2"  
  
[tasks.build]  
description = "Build the project"  
run = "npm run build"  
  
[tasks.test]  
description = "Run tests"  
depends = ["build"]  
run = "npm test"  

Version Specifications

Simple versions:

node = "24"  
python = "3.11"  

Prefix matching:

python = "prefix:3.11"  # Latest 3.11.x  

Reference to commit:

custom-tool = "ref:abc123def456"  # Git commit reference  

Path to custom installation:

my-tool = "path:/usr/local/bin/my-tool"  # System-installed  

Sub-versions:

node = "sub-1:latest"  # Use version before latest  

Key Commands

CommandPurpose
mise installInstall all configured tools and plugins
mise use <tool>@<version>Install and set tool version
mise exec <tool>@<version> -- <cmd>Run command with specific tool version
mise run <task>Execute a defined task
mise activate <shell>Hook mise into shell
mise doctorVerify installation and configuration
mise set VAR=valueSet environment variable

Comparison to ASDF

FeatureASDFmise
LanguageBashRust
Performance Overhead~120ms~5ms
Configuration.tool-versionsmise.toml (also supports .tool-versions)
Windows SupportNoYes
Task RunnerNoYes (built-in)
Environment VarsNoYes (built-in)
Learning CurveSteepLow
Example: Install node 20asdf plugin add node, asdf install node latest:20, asdf local node latest:20mise use node@20

Advanced Features

Hierarchical Configuration

  • Global defaults at ~/.config/mise/config.toml
  • Project-level overrides in mise.toml
  • Automatic merging with most specific taking precedence

Multiple Tool Versions

Install and manage multiple versions of same tool simultaneously

Shims

Lightweight symlinks to mise binary for environment variable management

  • Works in CI/CD pipelines
  • Functions in IDEs
  • Less feature-complete than mise activate

Fuzzy Matching

Forgiving command structure with intelligent matching

Task Dependencies

Define which tasks must run before others

  • Automatic dependency resolution
  • Parallel execution where possible

Backends

Multiple installation sources for tools:

  • asdf: Traditional asdf plugins
  • npm: npm packages as tools
  • pipx: Python packages
  • github: Tools directly from GitHub releases
  • aqua: Aqua registry support
  • core: Built-in tool support

Use Cases

Perfect for:

  • Polyglot development environments (Node.js, Python, Go, Rust simultaneously)
  • Team onboarding (automatic version consistency)
  • CI/CD pipelines (environment standardization)
  • Project-specific tool versions
  • Replacing multiple version managers with one tool
  • Organizations using multiple programming languages

Real-World Example

# mise.toml for infrastructure project  
  
[tools]  
terraform = "1.5"  
aws-cli = "2"  
node = "24"  
  
[env]  
TF_WORKSPACE = "development"  
AWS_REGION = "us-west-2"  
AWS_PROFILE = "dev"  
  
[tasks.validate]  
description = "Validate AWS credentials and terraform config"  
run = """  
aws sts get-caller-identity  
terraform validate  
"""  
  
[tasks.plan]  
description = "Run terraform plan with configured workspace"  
run = """  
terraform init  
terraform workspace select $TF_WORKSPACE  
terraform plan  
"""  
  
[tasks.deploy]  
description = "Deploy infrastructure after validation"  
depends = ["validate", "plan"]  
run = "terraform apply -auto-approve"  

Community Reception

  • Widely praised for simplicity and speed
  • Strong adoption from developers transitioning from asdf
  • Recommended for both development and build automation
  • 23k+ stars on GitHub
  • Active community on Discord

Strengths

Speed: Rust implementation is significantly faster than bash-based tools
Unified interface: One tool replaces many (asdf, nvm, pyenv, rbenv, direnv, make)
Easy migration: Works with existing .tool-versions files
Developer experience: Intuitive commands and clear error messages
Windows support: Unlike asdf, works on Windows
Comprehensive: Includes task runner and environment management
Plugin ecosystem: Leverages 100+ asdf plugins

Limitations

⚠️ Requires tool reinstallation when migrating from asdf (not reusing asdf directories)
⚠️ Some edge cases with IDE integration (VS Code pathing)
⚠️ Maintainer-driven project (fewer community contributions)

Installation Methods

  • Curl script: curl https://mise.run | sh
  • Homebrew: brew install mise
  • Apt (Debian/Ubuntu): apt install mise
  • DNF (Fedora 41+): dnf install mise
  • Nix: nix package
  • Snap: beta available

Last updated: January 2025
Confidence: High (official documentation)
Status: Active development, v2026.1.6
Creator: @jdx
GitHub: https://github.com/jdx/mise
Discord: https://discord.gg/mABnUDvP57
Stars: 23.3k+
License: MIT