OmniDiff é uma alternativa ao git diff escrita em Rust que compara código por sua estrutura sintática, não linha por linha. Em nosso teste com 283 mudanças reais do ripgrep e Flask foi a única de três ferramentas que marcou o código movido como movido. A versão 0.3.0 chegou ao crates.io em 1º de novembro de 2026 e nesse mesmo dia foi apresentada no Show HN.

yoDEV Testado · 2 de novembro de 2026
Compilamos OmniDiff 0.3.0, difftastic 0.72.0 e delta 0.20.1 a partir do crates.io e os comparamos no Linux sobre 283 mudanças reais do ripgrep e Flask. Os resultados que reportamos como nossos saem desse teste.
O que é OmniDiff?
OmniDiff é um visualizador de diferenças e um backend para git difftool que analisa as duas versões de um arquivo com tree-sitter e compara as árvores de sintaxe em vez das linhas. É o que em inglês se conhece como syntax aware git diff ou tree-sitter diff.
Analisa estruturalmente 25 linguagens: C, C#, C++, CSS, Go, HTML, Java, JavaScript, JSON, Kotlin, Lua, Perl, PHP, Python, R, Ruby, Rust, Scala, Bash, Swift, TSX, TypeScript, Vimscript, XML e YAML. Bazel, Dart, Emacs Lisp, Markdown, Protocol Buffers e SQL os reconhece, mas os compara como texto.
Também vai além do código: imagens, fontes, arquivos comprimidos, cursores, catálogos de mensagens e PDF se reconhecem por seus bytes e se comparam por seu conteúdo.
Funciona de três formas: uma interface interativa de dois painéis no terminal (a opção padrão), texto plano com --headless, ou um único objeto JSON com --mode json para integrações com editores.
O autor declara no README que o projeto se desenvolve com uma assistência substancial de IA (Claude Code), e os commits trazem um trailer Co-Authored-By. Por enquanto não aceita contribuições.
Em que se diferencia OmniDiff do difftastic e git delta?
Em resumo: delta coloriza o diff de linhas do git normal; difftastic e OmniDiff o substituem por um diff estrutural baseado em tree-sitter.
- delta (
git delta) faz com que a saída degit difffique mais legível: destaque de sintaxe, palavras mudadas dentro da linha, visualização lado a lado. Mas o algoritmo de fundo continua sendo o de linhas do git. Se uma função muda de lugar, delta a mostra deletada em um local e adicionada em outro. - difftastic é o diff estrutural estabelecido, também baseado em tree-sitter. Entende que uma expressão reformatada não mudou, mas em nosso teste não detectou uma função movida.
- OmniDiff usa um algoritmo de diff de árvores (APTED, segundo explicou o autor no Hacker News) e detecta e etiqueta o código movido de forma explícita.
No Hacker News, o autor afirma que, no código que difftastic suporta, OmniDiff acerta completamente em 90 por cento dos diffs em relação a 64 por cento do difftastic. É uma medição própria do autor e o README não a repete. Por isso fizemos a nossa.
Qual é mais rápido para comparar código: OmniDiff, difftastic ou delta?
Compilamos as três ferramentas a partir do crates.io e as executamos em cada arquivo de código e configuração modificado nos últimos 80 commits do ripgrep (Rust) e Flask (Python): 283 pares antes/depois, em uma máquina Linux de 2 vCPU. Os tempos são de relógio por arquivo e incluem a inicialização do processo.
| Ferramenta | Mediana | p90 | p99 | Mais lento | Falhas |
|---|---|---|---|---|---|
| OmniDiff 0.3.0 | 21,7 ms | 176,5 ms | 693 ms | 803 ms | 0 |
| difftastic 0.72.0 | 28,1 ms | 141,2 ms | 1.734 ms | 2.040 ms | 0 |
| delta 0.20.1 | 23,5 ms | 31,4 ms | 39,9 ms | 51,5 ms | 0 |
Três lições:
- delta é a mais rápida e a mais estável, porque faz o trabalho mais barato: um diff de linhas com cor. Não é um defeito; é outra ferramenta.
- Entre as duas ferramentas estruturais, OmniDiff venceu na mediana e nos casos mais lentos. Seu pior arquivo levou 803 ms; o do difftastic, mais de dois segundos. difftastic foi mais rápida no p90.
- Os arquivos de Rust são o caso caro para ambas: mediana de 72 ms para OmniDiff e 95 ms para difftastic, contra menos de 10 ms em TOML e YAML.
O que acontece quando você move uma função?
Aqui é onde se nota a diferença. Pegamos um arquivo pequeno de Python, movemos parse() para cima de load_config(), mandamos load_config() para o final e adicionamos a parse() um parâmetro sep e uma verificação de linhas vazias.
- OmniDiff marcou o bloco como
Moved from lines 10-13e pintou apenas as mudanças reais: o novo parâmetro, as duas novas linhas epartition(sep). - difftastic mostrou
load_configdeletada acima e adicionada abaixo. - delta fez o mesmo que o git puro: um bloco deletado e um bloco adicionado.
Em um pull request cheio de refatorações, essa é a diferença entre revisar três linhas mudadas e reler uma função inteira.
Como instalar OmniDiff?
O jeito mais rápido em qualquer plataforma com Rust instalado:
cargo install --locked omnidiff
Precisa de Rust 1.92 ou posterior e um compilador de C. Tenha paciência com a compilação: em nossa máquina de 2 vCPU levou 14 minutos e meio.
Outras formas, todas documentadas no README:
- Binários pré-compilados em cada versão do GitHub, para Linux, macOS (Intel e Apple Silicon) e Windows.
- Homebrew, através do tap
ivankovic/omnidiff, no macOS e Linux. - Debian/Ubuntu: pacotes
.debassinados para amd64 e arm64 do repositório apt do projeto. - Nix:
nix run github:ivankovic/omnidiff(com flakes habilitados). - Arch e Gentoo: receitas no diretório
packaging/do repositório. - VS Code (também no Open VSX) e Neovim. Atenção: uma extensão ainda não pode substituir a visualização de diff integrada do VS Code.
Como usar OmniDiff com git diff e git difftool?
A forma interativa é omnidiff git configure, um assistente que o configura globalmente ou por repositório. Se você preferir fazer manualmente:
git config --global difftool.omnidiff.cmd 'omnidiff "$LOCAL" "$REMOTE"'
git config --global diff.tool omnidiff
git config --global difftool.prompt false
E depois:
git difftool
O detalhe importante: git diff e git log -p nunca abrem OmniDiff por si sós. Continuam mostrando o diff normal do git. Para passá-los por OmniDiff, defina a variável de diff externo:
GIT_EXTERNAL_DIFF=omnidiff git diff
Testamos as duas formas no histórico do Flask e ambas funcionaram. OmniDiff muda apenas para saída de texto plano quando não escreve em um terminal. Se você quer revisar os comandos básicos que cercam tudo isso, temos um guia dos 15 comandos de git que todo engenheiro de software usa.
Se usa Jujutsu, existe omnidiff jj configure; o README indica que diff-invocation-mode deve ser file-by-file.
Dois flags que vale a pena conhecer: --minimal pinta apenas os intervalos que trazem significado e --full pinta tudo. A ajuda da ferramenta os descreve como duas leituras fiéis do mesmo diff, não como uma correta e outra incorreta.
Quão preciso é OmniDiff?
O README é inusitadamente honesto: o objetivo de precisão do autor ainda não foi alcançado. De acordo com o README que lemos em 2 de novembro de 2026, sobre 1.419 casos etiquetados manualmente, 60,0 por cento têm zero bytes discrepantes no modo --full e 69,6 por cento no --minimal, em relação a um objetivo de 90 por cento. “Discrepante” significa um byte cuja coloração não corresponde à referência etiquetada por uma pessoa, não um diff errado, e o README esclarece que a maioria dos erros restantes vem das regras de coloração e não do algoritmo de emparelhamento.
A robustez é mais sólida: em cerca de 442.530 pares de código de 7.500 repositórios open source, 99,95 por cento terminou dentro de um limite de 120 segundos e 6 GB. Em nosso teste de 283 pares nenhum falhou.
Essas cifras mudaram entre versões, então as tome como uma foto do momento.
OmniDiff é gratuito?
Sim, sob licença AGPL-3.0-only (a versão 0.2.0 era “or later”; a 0.2.1 e a 0.3.0 são “only”). Usá-lo como sua ferramenta de diff pessoal não levanta nenhum problema. Se sua empresa quer integrá-lo ou usá-lo internamente sem as obrigações de publicar código da AGPL, o autor vende uma licença comercial como assinatura mensal do GitHub Sponsors. difftastic e delta, em comparação, têm licença MIT.
Convém mudar do difftastic ou delta?
Se o que você quer é que git diff fique melhor, delta continua sendo a opção com menos fricção. Se já usa difftastic e revisa muitas refatorações, vale a pena instalar OmniDiff junto a ela: detectar código movido é justamente o que difftastic não fez em nosso teste, e em nosso conjunto de arquivos foi mais rápida nos casos lentos. Dito isso, tenha em mente que é um projeto 0.x, com contribuições fechadas e um objetivo de precisão que o próprio autor reconhece que ainda não alcança.
E você? Qual ferramenta usa hoje para revisar diffs no terminal?
- Que detecte o código movido
- Que seja rápida em arquivos grandes
- Que se integre com meu editor
- Prefiro outra opção (conta qual)
Comente abaixo ou, se este artigo chegou para você por email, responda diretamente ao email: sua resposta é publicada aqui.
Relacionado: Como ver o git diff do seu agente no navegador antes do commit com Diffle