Pitch: Apresentando o XPO CLI — porque `app.json` quebrado às 23h não é divertido
Se você trabalha com Expo e já precisou fazer um build para produção, provavelmente conhece o ritual:
- Abrir o
app.jsonmanualmente - Lembrar qual era a versão anterior
- Incrementar
version,versionCodeebuildNumber(nos três lugares certos, claro) - Rodar o
eas build - Torcer
- Descobrir que você esqueceu de atualizar o
versionCodeno Android - Repetir
O XPO existe para eliminar exatamente essa sequência.
O que é o XPO?
XPO é um CLI para projetos Expo que substitui os scripts frágeis de Makefile por uma ferramenta tipada, transparente e segura. Ele cuida das partes repetitivas do ciclo de release — para você focar no que importa: entregar o app.
npm install -g @xpo-cli/xpo
Ou, sem instalar nada:
npx @xpo-cli/xpo --help
O que ele faz (de verdade)
🔢 Versionamento automático
Nada de abrir o app.json na mão. O XPO gerencia version, android.versionCode e ios.buildNumber de forma interativa ou via flag:
xpo version patch # 1.0.0 → 1.0.1
xpo version minor # 1.0.0 → 1.1.0
xpo version major # 1.0.0 → 2.0.0
Quer ver o que mudaria sem salvar nada? Existe flag pra isso:
xpo version patch --dry-run
🛡️ Builds com rollback automático
Antes de qualquer build, o XPO cria um app.json.xpo-backup. Se o EAS falhar no meio do caminho, o arquivo original é restaurado automaticamente.
Nada de app.json corrompido. Nada de versão errada empurrada sem querer.
🔭 Total transparência
O XPO nunca esconde o que faz. Antes de executar qualquer comando, ele te mostra exatamente o que está rodando:
→ Executando: eas build --platform android --profile production
Sem mágica. Sem comportamento oculto. Só menos boilerplate.
🚀 Modo CI/CD nativo
100% não-interativo para pipelines automatizados:
xpo build all --bump patch --profile production
O fluxo completo de um xpo build all
Para quem gosta de saber o que acontece por baixo dos panos:
| # | O que o XPO faz |
|---|---|
| 1 | Lê e valida o app.json |
| 2 | Pergunta o tipo de bump (patch / minor / major) |
| 3 | Pergunta o perfil do eas.json |
| 4 | Grava app.json.xpo-backup como snapshot de segurança |
| 5 | Atualiza app.json com os novos números |
| 6 | Executa eas build para Android e iOS |
| ✅ | Sucesso → remove backup, exibe resultado |
| ❌ | Falha → restaura o app.json original, encerra com erro |
Zero lock-in
O XPO apenas chama eas e expo por baixo. Remova-o a qualquer momento — seu projeto continua 100% padrão. Sem dependências escondidas, sem formatos proprietários.
Versionamento standalone
Não quer acionar um build agora? Sem problema. O xpo version funciona de forma completamente independente — ideal para equipes com pipelines customizados que só precisam controlar a versão:
xpo version patch --app-json ../outro-projeto/app.json
Primeiros passos
# 1. Instalar o EAS CLI (pré-requisito)
npm install -g eas-cli
# 2. Instalar o XPO
npm install -g @xpo-cli/xpo
# 3. Rodar o primeiro build
xpo build all
O XPO vai te guiar pelo resto de forma interativa.
Por que isso importa?
Porque o tempo que você gasta lembrando se o versionCode é 42 ou 43 é tempo que você não está gastando construindo features. E porque um app.json corrompido às vésperas de uma release não deveria ser uma possibilidade.
O XPO resolve um problema pequeno, mas resolve com cuidado. E às vezes é exatamente isso que a gente precisa.
🤝 Isso não é uma verdade absoluta — e é aí que você entra
Criei o XPO por que resolveu o meu problema da minha forma. Funciona bem pra mim e transformei em um padrão para meus projetos, mas o ecossistema Expo é grande e cada equipe tem seu jeito de trabalhar.
Talvez você faça o bump de versão diferente. Talvez seu pipeline de CI seja mais complexo. Talvez você olhe pro código e pense "por que ele não fez assim?" — e a resposta honesta é: porque eu não pensei nisso ainda.
Se o XPO te parece útil mas falta alguma coisa, abre uma issue, manda um PR, ou deixa um comentário aqui mesmo. Projeto open source só cresce com perspectivas que não são as minhas.
Landing Page: xpo-cli
GitHub: github.com/DavidLSousa/xpo
Instalação: npm install -g @xpo-cli/xpo
Feito para o ecossistema Expo. MIT License.