O que é o jjui?
O jjui é uma interface de terminal para o Jujutsu, o sistema de controle de versão compatível com Git que você usa pelo comando jj. Rode-o dentro de um repositório jj e ele mostra o grafo de revisões e deixa você trabalhar direto nele: mude o revset, com autocompletar, para escolher o que aparece, faça rebase de uma revisão ou de um branch inteiro, faça squash, split e abandon de revisões, mova bookmarks, abra uma revisão para ver os seus arquivos e diffs e restaurar arquivos um a um, veja a saída de jj show e jj diff ao lado do grafo, faça push e fetch por um menu Git e navegue pelo log de operações ou restaure um estado dele. Tudo funciona pelo teclado ou com o mouse. O jjui é escrito em Go por Ibrahim Dursun e tem licença MIT.
apt upgrade normal atualiza juntos o jjui e o jj de que ele depende.
⚡ Principais recursos do jjui
🌳 O grafo de revisões, ao vivo
O jjui abre no mesmo grafo que o jj log imprime, mas você pode se mover por ele, selecionar revisões e agir sobre elas, e o grafo é redesenhado a cada mudança.
🔎 Revsets com autocompletar
Edite o revset no topo da tela para escolher quais revisões aparecem; funções e aliases são completados enquanto você digita, então não é preciso decorar a linguagem de revsets.
✂️ Rebase, squash, split, abandon
Faça rebase de uma revisão ou de um branch inteiro sobre outro, squash de uma revisão no pai, split em duas, abandon, ou mova um bookmark, tudo a partir do grafo, vendo o resultado na hora.
📄 Arquivos, diffs e prévias
Abra uma revisão para listar os arquivos que ela muda, ler os diffs e restaurar arquivos de forma interativa, ou mantenha um painel com a saída de jj show ou jj diff do que estiver selecionado.
🔄 Menu Git e log de operações
Faça push e fetch por um menu Git sem sair do grafo, e navegue pelo log de operações para ver o que mudou e restaurar o repositório a um estado anterior.
🖱️ Teclado, mouse, Lua e temas
Cada ação tem um atalho de teclado (aperte ? para ver a lista) e o mouse também funciona. Scripts em Lua adicionam as suas próprias ações, e temas mudam as cores.
apt upgrade mantém você na versão mais recente.
📦 Instalação a partir do deb.griffo.io
Passo 1: Adicionar o repositório
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Existe um espelho grátis para sempre. deb-free.griffo.io distribui pacotes grátis para sempre — sem conta, sem assinatura, no máximo 2 meses atrás do upstream, correções de segurança imediatas. Hoje ele traz cliamp, Forgejo Runner, Ghostty, lazydocker, Oh My Posh, Uncloud e Zed; jjui não está entre elas, então o repositório acima é a única forma de instalar hoje — peça e ela pode ser adicionada.
🧩 Sobre a opção extrepo. extrepo é a ferramenta do próprio Debian para repositórios externos: ela escreve o arquivo de sources e instala a chave de assinatura para você, conferindo a chave contra metadados assinados antes de usá-la. Este repositório está registrado nela como griffo, e o espelho gratuito para sempre como griffo-free, então no Debian (bookworm, trixie, forky e sid) os comandos acima são toda a configuração.
O extrepo configura apenas o arquivo de sources e a chave: as credenciais de uma assinatura continuam indo em /etc/apt/auth.conf.d/deb.griffo.io.conf. O Ubuntu não é coberto, porque o extrepo publica metadados só para as suítes do Debian: lá, use os comandos com sudo ou como root.
Passo 2: Instalar o jjui
# Instalar a versão mais recente do jjui (traz junto o jujutsu, que fornece o jj)
sudo apt install jjui
# Verificar a instalação
dpkg -s jjui | grep Version# Instalar a versão mais recente do jjui (traz junto o jujutsu, que fornece o jj)
apt install jjui
# Verificar a instalação
dpkg -s jjui | grep VersionPasso 3: Primeira execução
# O jjui comanda o jj, então comece dentro de um repositório jj
cd ~/src/myproject
# Um checkout Git existente? Coloque o jj junto com ele (colocate) antes
jj git init --colocate
# Abrir o grafo de revisões
jjui
# Aperte ? dentro do jjui para ver os atalhos, q para sair🎯 Exemplos básicos de uso
Iniciando e configurando o jjui:
# Abrir o grafo de revisões do repositório em que você está
jjui
# Editar a configuração no $EDITOR (atalhos, tema, ações em Lua)
jjui -config
# O jjui usa o jj que está no seu PATH; veja qual versão é
jj --versionDentro do jjui:
# Aperte ? para ver todos os atalhos da tela em que você está
# Mude o revset no topo, com autocompletar, para escolher o que aparece
# Selecione uma revisão e faça rebase, squash, split ou abandon, ou mova um bookmark
# Abra uma revisão para listar os arquivos, ler os diffs e restaurá-los um a um
# Veja jj show / jj diff ao lado do grafo, ou abra o log de operações para restaurar um estado
# Push e fetch pelo menu Git, sem sair do grafoMantendo em dia:
# O jjui e o jj são atualizados junto com o resto do sistema
sudo apt update && sudo apt upgrade
# Quais versões estão instaladas e quais são as mais recentes disponíveis
apt policy jjui jujutsu
# Remover (o jj continua instalado)
sudo apt remove jjui# O jjui e o jj são atualizados junto com o resto do sistema
apt update && apt upgrade
# Quais versões estão instaladas e quais são as mais recentes disponíveis
apt policy jjui jujutsu
# Remover (o jj continua instalado)
apt remove jjui🔧 Integrações
O jjui é uma interface para o jj, então se encaixa onde o jj já se encaixa:
- Jujutsu: cada ação roda o comando
jj, então o jjui vê o mesmo repositório, a mesma configuração e os mesmos aliases de revset que o próprio jj; o pacote depende dejujutsu (>= 0.37), e o deb.griffo.io empacota o Jujutsu para todas as versões, então o apt o instala junto com o jjui - Remotos Git: num repositório colocado, o push e o fetch do menu Git vão para os seus remotos Git de sempre, com as credenciais que você já usa
- O seu editor:
jjui -configabre o arquivo de configuração no$EDITOR, onde ficam os atalhos, o tema e as ações próprias - Scripts em Lua: escreva as suas próprias ações em Lua e associe-as a teclas, para os comandos jj que você roda com frequência
- Temas: as cores do grafo, da seleção e dos painéis vêm de um tema que você pode trocar ou escrever do zero
- Mouse: clique para selecionar revisões e role o grafo e a prévia, em qualquer terminal com suporte a mouse
- Documentação: o upstream não fornece página man, então o guia completo está em idursun.github.io/jjui, e
?dentro do jjui lista os atalhos
🚀 Por que escolher o deb.griffo.io?
- Debian oficial: não empacota o jjui, e
apt install jjuifalha num sistema padrão - Downloads do upstream: um zip com um único binário na página de releases do GitHub, copiado na mão para o seu PATH, a ser baixado de novo a cada versão, e com o jj instalado à parte
- Compilar do código-fonte: uma toolchain Go e um
go installa cada versão, e o jj ainda a instalar de outro jeito - deb.griffo.io: versão mais recente com atualizações automáticas
- ✅ A única fonte apt: o jjui não está nem nos arquivos do Debian nem nos do Ubuntu; este repositório empacota a versão oficial do upstream
- ✅ O jj vem junto: o pacote depende de
jujutsu (>= 0.37), o mínimo do upstream, e o deb.griffo.io empacota o Jujutsu para todas as versões, entãosudo apt install jjuiinstala um jj recente no mesmo passo - ✅ Empacotamento honesto: o binário do upstream em
/usr/bin/jjui: o upstream não fornece página man nem completions de shell, então o pacote não inventa nenhum - ✅ Atualizações automáticas: os pacotes são atualizados poucas horas após cada lançamento upstream
- ✅ Duas arquiteturas: amd64 e arm64 em todas as versões, então o mesmo jjui roda em notebooks, servidores e placas ARM como o Raspberry Pi
- ✅ Multi-distribuição: funciona no Bookworm, Trixie, Forky e Sid
- ✅ Manutenção simples: atualizações com os comandos apt de sempre
📦 Repositório de build do pacote
Os pacotes Debian são construídos e mantidos automaticamente neste repositório do GitHub:
- 🪢 jjui-debian - Builds dos últimos lançamentos
🔗 Pacotes relacionados
Também disponíveis no deb.griffo.io:
- Jujutsu - O sistema de controle de versão jj que o jjui comanda, instalado junto com ele
- lazygit - Uma interface de terminal para o Git, para os repositórios que você ainda usa com git
- GitUI - Uma interface de terminal rápida para o Git, só no teclado
- difftastic - Uma ferramenta de diff estrutural que o jj pode usar nos seus diffs
- serie - Um grafo de commits Git rico, no terminal