Alejandría

Busca en Alejandría

Herramientas

mise

Unifica versiones, variables y tareas por proyecto.

01

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.

02

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.