Mise (antigo rtx): gerencie versões de runtime com um único comando
1. O que é o Mise e por que ele substitui o rtx
O Mise (anteriormente conhecido como rtx) é uma ferramenta unificada e moderna para gerenciar versões de runtime e ferramentas de desenvolvimento. Originalmente lançado como "rtx" (uma brincadeira com "runtime exec"), o projeto foi renomeado para "Mise" em 2024 para evitar confusão com a sigla RTX (Real-Time eXtensions) e para refletir sua missão mais ampla: "mise en place" — o conceito culinário de ter tudo em seu devido lugar antes de começar a cozinhar.
A principal motivação do Mise é eliminar a fragmentação de ferramentas como nvm (Node), pyenv (Python), rbenv (Ruby), sdkman (Java, Scala, Kotlin) e jenv (Java). Em vez de instalar e gerenciar múltiplos gerenciadores de versão, cada um com sua própria sintaxe e arquivos de configuração, o Mise oferece uma interface única e consistente para todos eles.
Comparado às alternativas tradicionais, o Mise se destaca por:
- Velocidade: implementado em Rust, é significativamente mais rápido que ferramentas escritas em shell script.
- Unificação: um único comando para gerenciar Node, Python, Ruby, Java, Go, Rust, Deno, Terraform e centenas de outras ferramentas.
- Configuração declarativa: arquivos .mise.toml simples e versionáveis.
- Plugins: arquitetura extensível que permite adicionar suporte a qualquer runtime ou ferramenta.
2. Instalação e configuração inicial
A instalação do Mise é simples e pode ser feita de várias formas:
Via curl (Linux/macOS):
curl https://mise.run | sh
Via Homebrew (macOS/Linux):
brew install mise
Via winget (Windows):
winget install jdx.mise
Após a instalação, é necessário ativar o Mise no shell. Adicione a seguinte linha ao seu arquivo de inicialização (.bashrc, .zshrc ou config.fish):
Para bash/zsh:
eval "$(mise activate bash)"
eval "$(mise activate zsh)"
Para fish:
mise activate fish | source
Verifique a instalação:
mise --version
mise help
3. Gerenciando runtimes com um único comando
O Mise unifica todos os comandos de gerenciamento de versão em uma única interface. Exemplos práticos:
Instalar versões específicas:
mise install node@18.20.0
mise install python@3.11.9
mise install java@openjdk-21
Listar versões disponíveis e instaladas:
mise ls-remote node # Versões disponíveis para instalação
mise ls # Versões instaladas localmente
mise ls --global # Versões instaladas globalmente
Definir versões padrão (global) e por projeto (local):
mise use --global node@18.20.0 # Versão global
mise use node@20.11.0 # Versão local (cria .mise.toml no diretório atual)
4. O arquivo de configuração .mise.toml
O coração do Mise é o arquivo .mise.toml, que usa a sintaxe TOML para declarar versões de runtime de forma clara e versionável.
Exemplo prático para um projeto Node + Python + Java:
[tools]
node = "18.20.0"
python = "3.11.9"
java = { version = "21", source = "openjdk" }
[env]
NODE_ENV = "development"
Estrutura e herança:
- O arquivo .mise.toml no diretório atual define versões para aquele projeto.
- Arquivos em diretórios pais são herdados (escopo global vs. local).
- É possível ter múltiplos arquivos .mise.toml em diferentes níveis do sistema de arquivos.
Versionamento: Recomenda-se adicionar .mise.toml ao repositório Git para garantir que todos os membros da equipe usem as mesmas versões.
5. Plugins e suporte a múltiplos ecossistemas
O Mise suporta nativamente dezenas de runtimes e ferramentas, incluindo Node.js, Python, Ruby, Java, Go, Rust, Deno, Bun, Elixir, Erlang, Terraform, Packer, e muito mais. Para runtimes não suportados nativamente, o sistema de plugins permite extensão fácil.
Instalar um plugin:
mise plugins install kubectl
Listar runtimes suportados nativamente e via plugins:
mise plugins ls --all
Exemplo de ferramentas não-runtime gerenciáveis:
- Linters: ESLint, Prettier, Ruff
- Formatadores: Black, gofmt
- Bancos de dados: SQLite, PostgreSQL (clientes)
- Infraestrutura: Terraform, Pulumi, AWS CLI
6. Comandos avançados e integração com CI/CD
mise exec e mise run: Execute comandos com runtimes específicos sem ativar o ambiente permanentemente.
# Executar um script Node com versão específica
mise exec node@18.20.0 -- node script.js
# Executar comando usando as versões definidas no .mise.toml local
mise run make build
Integração com Docker: O Mise pode ser usado dentro de containers Docker para garantir versões consistentes:
FROM ubuntu:22.04
RUN curl https://mise.run | sh
RUN eval "$(mise activate bash)" && mise install node@18.20.0
Uso em pipelines CI (GitHub Actions):
- name: Setup Mise
run: |
curl https://mise.run | sh
echo "$HOME/.local/share/mise/bin" >> $GITHUB_PATH
eval "$(mise activate bash)"
mise install
7. Fluxo de trabalho com projetos existentes
Migração de nvm/pyenv/rbenv: O Mise consegue importar configurações existentes automaticamente.
# Importar versão de .nvmrc
mise use node --ref .nvmrc
# Importar versão de .python-version
mise use python --ref .python-version
# Importar versão de .ruby-version
mise use ruby --ref .ruby-version
Trabalhando com múltiplos projetos: Cada projeto pode ter seu próprio .mise.toml. O Mise alterna automaticamente as versões ao navegar entre diretórios (graças à ativação no shell).
Cache e desempenho: O Mise faz cache das versões baixadas e dos binários compilados, tornando a alternância entre versões praticamente instantânea.
8. Dicas, limitações e próximos passos
Boas práticas:
- Sempre versionar .mise.toml no repositório.
- Evitar configurar versões globais conflitantes (ex.: Node 18 global e Node 20 local).
- Usar mise trust para marcar arquivos .mise.toml de projetos confiáveis.
Limitações conhecidas:
- Suporte a Windows ainda é experimental (alguns plugins podem não funcionar).
- Plugins da comunidade podem ter qualidade variável.
- A migração de ferramentas legadas (como asdf) requer atenção aos arquivos .tool-versions.
Próximos passos: Explore a documentação oficial, participe do Discord da comunidade e acompanhe o changelog no GitHub para novidades.
Referências
- Documentação oficial do Mise — Guia completo de instalação, comandos e configuração.
- Repositório GitHub do Mise — Código-fonte, issues, discussões e changelog.
- Artigo: "Mise: The One Tool to Manage All Your Runtimes" — Tutorial detalhado no Dev.to sobre migração de nvm/pyenv para Mise.
- Mise vs asdf: A Comparison — Análise técnica comparando Mise com asdf (ferramenta similar).
- Awesome Mise — Lista curada de plugins, tutoriais e recursos da comunidade.
- Mise Discord Server — Comunidade oficial para suporte e discussões.
- Changelog do Mise — Histórico de versões, novas funcionalidades e correções.