Documentation/Jutsu/Mise/ skills /mise-tool-management

📖 mise-tool-management

Use when managing development tool versions with Mise. Covers installing tools, version pinning, and replacing language-specific version managers.



Overview

Managing development tool versions across projects with Mise as a unified version manager.

Basic Tool Installation

Installing Tools

# Install specific version
mise install node@20.10.0
mise install python@3.12.0
mise install rust@1.75.0

# Install latest version
mise install node@latest
mise install python@latest

# Install from .tool-versions or mise.toml
mise install

Setting Tool Versions

# Set global version
mise use --global node@20

# Set project version
mise use node@20.10.0
mise use python@3.12 rust@1.75

# Use latest
mise use node@latest

Tool Configuration in mise.toml

Basic Tool Definitions

# mise.toml
[tools]
node = "20.10.0"
python = "3.12.0"
rust = "1.75.0"
terraform = "1.6.0"

Version Prefixes

[tools]
# Latest patch version
node = "20.10"

# Latest minor version
node = "20"

# Latest version
node = "latest"

# Prefix notation
terraform = "1.6"  # Latest 1.6.x

Multiple Versions

[tools]
# Use multiple versions
node = ["20.10.0", "18.19.0"]
python = ["3.12", "3.11", "3.10"]
# Switch between versions
mise shell node@18.19.0

Tool-Specific Configuration

Node.js Configuration

[tools]
node = { version = "20.10.0", postinstall = "corepack enable" }

Python with Virtual Environments

[tools]
python = "3.12"

[env]
_.python.venv = { path = ".venv", create = true }

Custom Tool Sources

[tools]
# From specific registry
"cargo:eza" = "latest"
"npm:typescript" = "5.3"

# From git repository
my-tool = "git:https://github.com/org/tool.git"

Supported Languages & Tools

Core Tools

[tools]
# Languages
bun = "1.0"
deno = "1.38"
elixir = "1.15"
erlang = "26.1"
go = "1.21"
java = "21"
node = "20.10"
python = "3.12"
ruby = "3.3"
rust = "1.75"
zig = "0.11"

# Infrastructure
terraform = "1.6"
kubectl = "1.28"
awscli = "2.13"

Package Managers

[tools]
"npm:pnpm" = "8.10"
"npm:yarn" = "4.0"
"cargo:cargo-binstall" = "latest"
"go:github.com/golangci/golangci-lint/cmd/golangci-lint" = "latest"

Tool Version Strategies

Lock to Specific Versions

# Production: Pin exact versions
[tools]
node = "20.10.0"
terraform = "1.6.4"

Use Ranges for Flexibility

# Development: Use minor version ranges
[tools]
node = "20"      # Any 20.x
python = "3.12"  # Any 3.12.x

Latest for Experimentation

# Experimental projects
[tools]
rust = "latest"
bun = "latest"

Managing Tool Aliases

Creating Aliases

# Set alias for current directory
mise alias set node lts 20.10.0

# Set global alias
mise alias set --global python3 python@3.12

Using Aliases in Configuration

[tools]
node = "lts"
python = "3.12"

Tool Verification

Check Installed Tools

# List installed tools
mise list

# Check current versions
mise current

# Verify tool installation
mise doctor

Tool Information

# Show tool details
mise ls-remote node

# List available versions
mise ls-remote python

# Check latest version
mise latest node

Migration from Other Version Managers

From asdf

# Mise reads .tool-versions files
cat .tool-versions
# nodejs 20.10.0
# python 3.12.0

# Migrate to mise.toml
mise use node@20.10.0 python@3.12.0

From nvm

# Read from .nvmrc
cat .nvmrc
# 20.10.0

mise use node@$(cat .nvmrc)

From pyenv

# Read from .python-version
mise use python@$(cat .python-version)

Best Practices

Pin Production Dependencies

# Good: Explicit production versions
[tools]
node = "20.10.0"
terraform = "1.6.4"
postgres = "16.1"

Document Required Tools

# mise.toml - All project dependencies in one place
[tools]
node = "20.10.0"
python = "3.12.0"
terraform = "1.6.4"
kubectl = "1.28.0"

[env]
PROJECT_NAME = "my-app"

Use Tool-Specific Settings

[tools]
# Enable corepack for package managers
node = { version = "20.10.0", postinstall = "corepack enable" }

# Create Python virtual environment
python = { version = "3.12", venv = ".venv" }

Verify Tool Installation

# In CI/CD pipelines
mise install --check
mise doctor

# Verify specific tools
mise current node
mise current python

Common Patterns

Monorepo Tool Management

# Root mise.toml - shared tools
[tools]
node = "20.10.0"
terraform = "1.6.4"

# packages/api/mise.toml - additional tools
[tools]
"npm:typescript" = "5.3"
"npm:prisma" = "5.7"

# packages/web/mise.toml
[tools]
"npm:next" = "14.0"

Development vs Production

# mise.toml - production tools
[tools]
node = "20.10.0"
postgres = "16.1"

# mise.local.toml - development tools (gitignored)
[tools]
"npm:nodemon" = "latest"
"cargo:cargo-watch" = "latest"

Tool Updates Strategy

# Check for updates
mise outdated

# Update to latest patch version
mise upgrade node

# Update all tools
mise upgrade

# Update with constraints
mise use node@20  # Updates to latest 20.x

Anti-Patterns

Don't Mix Version Managers

# Bad: Using multiple version managers
nvm use 20
mise use node@20  # Conflicts

# Good: Use only Mise
mise use node@20

Don't Hardcode Tool Paths

# Bad: Hardcoded paths
/Users/me/.local/share/mise/installs/node/20.10.0/bin/node

# Good: Use mise shims or mise exec
mise exec -- node
mise x -- node

Don't Skip Version Constraints

# Bad: No version specified
[tools]
node = "latest"  # Can break on updates

# Good: Specify constraints
[tools]
node = "20.10.0"  # Explicit
# OR
node = "20"  # Controlled range

Don't Ignore Tool Dependencies

# Bad: Missing required tools
[tools]
terraform = "1.6"
# Missing: kubectl, helm for deployment

# Good: Include all dependencies
[tools]
terraform = "1.6.4"
kubectl = "1.28.0"
helm = "3.13.0"

Advanced Patterns

Conditional Tool Installation

[tools]
# Install based on platform
node = "20.10.0"
python = "3.12"

# Platform-specific tools
[tools."cargo:watchexec-cli"]
platforms = ["linux", "darwin"]
version = "latest"

Tool Installation Hooks

[tools]
node = {
  version = "20.10.0",
  postinstall = '''
    corepack enable
    npm install -g npm@latest
  '''
}

Backend Selection

# Use specific backend for tools
[tools]
# Use core backend (faster)
node = "core:20.10.0"

# Use asdf plugin
ruby = "asdf:3.3.0"

Related Skills

  • task-configuration: Defining tasks that use managed tools
  • environment-management: Managing environment variables with tools