Configure and operate Mise for deterministic developer environments. Use when installing runtime/tool versions, defining reusable tasks, managing layered environment variables, migrating from asdf/nvm/pyenv, or debugging mise.toml behavior in CI and local shells. Keywords: mise, mise.toml, tool versions, tasks, env, asdf migration, setup automation, dev environment.
Overall
score
99%
Does it follow best practices?
Validation for skill structure
# Show current configuration
mise config show
# Show as JSON
mise config show --json
# List all configuration files
mise config ls
# Show configuration from specific directory
mise config show -C /path/to/project# Validate all configuration files
mise doctor
# Check specific config file
mise config validate mise.toml
# Debug configuration issues
mise config show --debug# Generate mise.toml from existing version files
mise config generate
# Generate from .tool-versions
mise config generate .tool-versions > mise.toml
# Generate from .node-version, .python-version, etc.
mise config generate --all > mise.toml# Edit project config
$EDITOR mise.toml
# Edit global config
$EDITOR ~/.config/mise/config.toml
# Edit local overrides
$EDITOR mise.local.toml# Add a tool
echo 'node = "20"' >> mise.toml
# Update environment variable
mise set NODE_ENV=production
# Remove tool
mise unset tools.node# mise.toml
[tools]
# Add your tools here
# node = "20"
# python = "3.11"
[env]
# Add your environment variables here
# NODE_ENV = "development"
[tasks.dev]
description = "Start development"
run = "echo 'Add your dev command here'"
[settings]
experimental = false# ==============================================================================
# Tools: Define runtime versions
# ==============================================================================
[tools]
node = "20"
python = "3.11"
# ==============================================================================
# Environment: Project environment variables
# ==============================================================================
[env]
NODE_ENV = "development"
PROJECT_ROOT = "{{ config_root }}"
# PATH additions
_.path = ["{{ config_root }}/bin"]
# Load environment files
_.file = [".env", ".env.local"]
# ==============================================================================
# Tasks: Runnable commands
# ==============================================================================
[tasks.dev]
description = "Start development server"
run = "npm run dev"
[tasks.build]
description = "Build for production"
run = "npm run build"
[tasks.test]
description = "Run tests"
run = "npm test"
# ==============================================================================
# Settings: Mise behavior configuration
# ==============================================================================
[settings]
experimental = false
verbose = false# Convert .tool-versions to mise.toml
mise config generate .tool-versions > mise.toml
# Or migrate directly
mise install # Mise reads .tool-versions automaticallyManual migration:
# .tool-versions
node 20.10.0
python 3.11.0# mise.toml
[tools]
node = "20.10.0"
python = "3.11.0"# Old .envrc
export NODE_ENV=development
export API_URL=http://localhost:3000
PATH_add ./node_modules/.bin# New mise.toml
[env]
NODE_ENV = "development"
API_URL = "http://localhost:3000"
_.path = ["./node_modules/.bin"]# .nvmrc
20.10.0
# .python-version
3.11.0
# .ruby-version
3.2.0# mise.toml
[tools]
node = "20.10.0"
python = "3.11.0"
ruby = "3.2.0"# Backup mise configuration
cp mise.toml mise.toml.backup
# Backup global config
cp ~/.config/mise/config.toml ~/.config/mise/config.toml.backup
# Backup entire mise directory
tar -czf mise-backup.tar.gz ~/.config/mise ~/.local/share/mise# .gitignore
mise.local.toml
.env.local
*.backup
# Commit mise.toml
git add mise.toml
git commit -m "Add mise configuration"# mise.toml (shared with team)
[tools]
node = "20"
python = "3.11"
[env]
NODE_ENV = "development"
[tasks.dev]
run = "npm run dev"Setup for new team members:
git clone repo
cd repo
mise install # Installs tools
mise trust # Trust the configuration
mise run dev # Start development# mise.local.toml (personal, git-ignored)
[env]
DATABASE_URL = "postgresql://localhost/myapp_johndoe"
DEBUG = "true"
[settings]
verbose = trueConfiguration not loading:
# Check which configs are being used
mise config ls
# Verify syntax
mise config validate
# Check environment
mise envTool versions not applying:
# Check tool installation
mise list
# Verify configuration
mise config show
# Reinstall tools
mise installEnvironment variables not set:
# Check environment loading
mise env
# Verify activation
eval "$(mise activate bash)"
# Debug environment
mise env --debug# Full system check
mise doctor
# Verbose output
mise --verbose config show
# Debug mode
mise --debug config show
# Trace execution
mise --trace config show# mise.toml (committed)
[env]
_.file = [".env", ".env.secrets"]
# .env.secrets (git-ignored)
API_SECRET=secret-key
DATABASE_PASSWORD=password# Trust project configuration
mise trust
# Trust specific config file
mise trust mise.toml
# List trusted configs
mise trust list
# Revoke trust
mise trust revoke# Mise local configuration
mise.local.toml
# Environment files
.env.local
.env.secrets
*.secret
# Backup files
*.backup
mise.toml.backupmise doctor frequentlyproject/
├── mise.toml # All configuration
├── mise.local.toml # Local overrides (git-ignored)
└── .env.local # Secrets (git-ignored)project/
├── mise.toml # Tools and environment
├── .mise/
│ └── tasks/ # Complex tasks
│ ├── deploy
│ ├── test
│ └── build
├── mise.local.toml # Local overrides
└── .env.local # Secretsproject/
├── mise.toml # Root configuration
├── .mise/
│ ├── config.toml # Additional config
│ └── tasks/ # Shared tasks
├── packages/
│ ├── api/
│ │ └── mise.toml # API-specific config
│ └── web/
│ └── mise.toml # Web-specific config
└── mise.local.toml # Root overrides[env]
API_SECRET = "secret-key"[env]
_.file = ".env.local"# In every package's mise.toml
[tools]
node = "20"
python = "3.11"# Root mise.toml
[tools]
node = "20"
python = "3.11"
# Packages inherit from root[env]
DATA_DIR = "/Users/john/projects/myapp/data"[env]
DATA_DIR = "{{ config_root }}/data"[env]
NODE_ENV = "development"
[tools]
node = "20"
[env]
PORT = "3000"[tools]
node = "20"
[env]
NODE_ENV = "development"
PORT = "3000"