En pocas palabras
Gestor de herramientas, variables de entorno y tareas por proyecto, configurado principalmente mediante mise.toml.
Qué problema resuelve
Diferencias de versiones entre desarrolladores y CI, configuración manual repetida y comandos dispersos.
Cuándo utilizarlo
Proyectos con distintas versiones de Node.js, Python o Java. Ejemplo: declarar versiones y una tarea test compartida por desarrolladores y CI.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
Cómo funciona
El archivo mise.toml reúne las herramientas del proyecto, sus variables y tareas. Al activar mise en la shell, cambia el entorno según el directorio; mise exec permite ejecutar con ese entorno sin depender de una shell interactiva.
Ejemplo: un entorno compartido
[tools]
node = "22"
python = "3.12"
[env]
APP_ENV = "development"
[tasks.test]
run = "npm test"
Con mise instalado, ejecuta mise install y mise run test. La tarea presupone un proyecto Node.js con dependencias instaladas y un script test.
Herramientas, entorno y tareas en un archivo
# mise.toml
[tools]
java = "temurin-21"
node = "22.20"
python = "3.12"
terraform = "1.13"
"npm:@hoppscotch/cli" = "latest"
[env]
APP_ENV = "development"
_.file = ".env.local" # cargar variables locales no versionadas
_.path = ["./bin"]
[tasks.build]
description = "Compila el backend"
run = "./mvnw -q package -DskipTests"
sources = ["src/**/*.java", "pom.xml"]
outputs = ["target/*.jar"]
[tasks.test]
depends = ["build"]
run = "./mvnw -q verify"
Con sources y outputs, mise omite la tarea si nada cambió, de forma parecida a una caché de build sencilla.
Comandos de uso diario
mise install # instala todas las herramientas del proyecto
mise use node@22 # añade o cambia una versión en mise.toml
mise ls # versiones activas y de dónde vienen
mise run test # ejecuta una tarea (y sus dependencias)
mise exec -- java -version # ejecuta con el entorno del proyecto
mise doctor # diagnostica la instalación
Backends de herramientas
mise instala desde varias fuentes: plugins propios (core), el registro de aqua, binarios de GitHub releases, paquetes de npm, pipx, cargo y go. Esto permite fijar también utilidades de línea de comandos (linters, CLIs de nube) en la misma configuración.
mise en CI
- uses: jdx/mise-action@v2 # instala y cachea las herramientas de mise.toml
- run: mise run test
Así CI y desarrolladores usan exactamente las mismas versiones. Un mise.lock permite fijar además las versiones exactas resueltas y sus checksums.
mise frente a alternativas
Sustituye a asdf (es compatible con sus plugins y con .tool-versions), nvm, pyenv o sdkman, y a herramientas de tareas como make o just en casos sencillos. Para entornos completos con servicios y sistema operativo, Dev Containers es complementario: mise define versiones dentro o fuera del contenedor.
Criterios de implementación
Versiona la configuración y fija versiones completas cuando necesites mayor reproducibilidad. Mantén secretos fuera del repositorio. Decide si mise o uv administra Python para evitar dos configuraciones contradictorias.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.