OmniDiff: el git difftool en Rust que compite con difftastic ✅ yoDEV Tested

OmniDiff es una alternativa a git diff escrita en Rust que compara código por su estructura sintáctica, no línea por línea. En nuestra prueba con 283 cambios reales de ripgrep y Flask fue la única de tres herramientas que marcó el código movido como movido. La versión 0.3.0 llegó a crates.io el 1 de noviembre de 2026 y ese mismo día se presentó en Show HN.

diff-vs-omnidiff

:white_check_mark: yoDEV Tested · 2 de noviembre de 2026
Compilamos OmniDiff 0.3.0, difftastic 0.72.0 y delta 0.20.1 desde crates.io y los comparamos en Linux sobre 283 cambios reales de ripgrep y Flask. Los resultados que reportamos como nuestros salen de esa prueba.

¿Qué es OmniDiff?

OmniDiff es un visor de diferencias y un backend para git difftool que analiza las dos versiones de un archivo con tree-sitter y compara los árboles de sintaxis en lugar de las líneas. Es lo que en inglés se conoce como syntax aware git diff o tree-sitter diff.

Analiza estructuralmente 25 lenguajes: C, C#, C++, CSS, Go, HTML, Java, JavaScript, JSON, Kotlin, Lua, Perl, PHP, Python, R, Ruby, Rust, Scala, Bash, Swift, TSX, TypeScript, Vimscript, XML y YAML. Bazel, Dart, Emacs Lisp, Markdown, Protocol Buffers y SQL los reconoce, pero los compara como texto.

También va más allá del código: imágenes, fuentes, archivos comprimidos, cursores, catálogos de mensajes y PDF se reconocen por sus bytes y se comparan por su contenido.

Funciona de tres formas: una interfaz interactiva de dos paneles en la terminal (la opción por defecto), texto plano con --headless, o un único objeto JSON con --mode json para integraciones con editores.

El autor declara en el README que el proyecto se desarrolla con una asistencia sustancial de IA (Claude Code), y los commits llevan un trailer Co-Authored-By. Por ahora no acepta contribuciones.

¿En qué se diferencia OmniDiff de difftastic y git delta?

En corto: delta colorea el diff de líneas de siempre de git; difftastic y OmniDiff lo reemplazan por un diff estructural basado en tree-sitter.

  • delta (git delta) hace que la salida de git diff se lea mejor: resaltado de sintaxis, palabras cambiadas dentro de la línea, vista lado a lado. Pero el algoritmo de fondo sigue siendo el de líneas de git. Si una función cambia de lugar, delta la muestra borrada en un sitio y agregada en otro.
  • difftastic es el diff estructural establecido, también basado en tree-sitter. Entiende que una expresión reformateada no cambió, pero en nuestra prueba no detectó una función movida.
  • OmniDiff usa un algoritmo de diff de árboles (APTED, según explicó el autor en Hacker News) y detecta y etiqueta el código movido de forma explícita.

En Hacker News, el autor afirma que, en el código que difftastic soporta, OmniDiff acierta por completo en el 90 por ciento de los diffs frente al 64 por ciento de difftastic. Es una medición propia del autor y el README no la repite. Por eso hicimos la nuestra.

¿Cuál es más rápido para comparar código: OmniDiff, difftastic o delta?

Compilamos las tres herramientas desde crates.io y las ejecutamos sobre cada archivo de código y configuración modificado en los últimos 80 commits de ripgrep (Rust) y Flask (Python): 283 pares antes/después, en una máquina Linux de 2 vCPU. Los tiempos son de reloj por archivo e incluyen el arranque del proceso.

Herramienta Mediana p90 p99 Más lento Fallos
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

Tres lecturas:

  1. delta es la más rápida y la más estable, porque hace el trabajo más barato: un diff de líneas con color. No es un defecto; es otra herramienta.
  2. Entre las dos herramientas estructurales, OmniDiff ganó en la mediana y en los casos más lentos. Su peor archivo tardó 803 ms; el de difftastic, más de dos segundos. difftastic fue más rápida en el p90.
  3. Los archivos de Rust son el caso caro para ambas: mediana de 72 ms para OmniDiff y 95 ms para difftastic, frente a menos de 10 ms en TOML y YAML.

¿Qué pasa cuando mueves una función?

Aquí se nota la diferencia. Tomamos un archivo pequeño de Python, subimos parse() por encima de load_config(), mandamos load_config() al final y le agregamos a parse() un parámetro sep y una comprobación de líneas vacías.

  • OmniDiff marcó el bloque como Moved from lines 10-13 y pintó solo los cambios reales: el parámetro nuevo, las dos líneas nuevas y partition(sep).
  • difftastic mostró load_config eliminada arriba y agregada abajo.
  • delta hizo lo mismo que git a secas: un bloque borrado y un bloque agregado.

En un pull request lleno de refactorizaciones, esa es la diferencia entre revisar tres líneas cambiadas y volver a leer una función entera.

¿Cómo se instala OmniDiff?

La vía más rápida en cualquier plataforma con Rust instalado:

cargo install --locked omnidiff

Necesita Rust 1.92 o posterior y un compilador de C. Ten paciencia con la compilación: en nuestra máquina de 2 vCPU tardó 14 minutos y medio.

Otras vías, todas documentadas en el README:

  • Binarios precompilados en cada release de GitHub, para Linux, macOS (Intel y Apple Silicon) y Windows.
  • Homebrew, mediante el tap ivankovic/omnidiff, en macOS y Linux.
  • Debian/Ubuntu: paquetes .deb firmados para amd64 y arm64 desde el repositorio apt del proyecto.
  • Nix: nix run github:ivankovic/omnidiff (con flakes habilitados).
  • Arch y Gentoo: recetas en el directorio packaging/ del repositorio.
  • VS Code (también en Open VSX) y Neovim. Ojo: una extensión todavía no puede reemplazar la vista de diff integrada de VS Code.

¿Cómo usar OmniDiff con git diff y git difftool?

La forma interactiva es omnidiff git configure, un asistente que lo configura de forma global o por repositorio. Si prefieres hacerlo a mano:

git config --global difftool.omnidiff.cmd 'omnidiff "$LOCAL" "$REMOTE"'
git config --global diff.tool omnidiff
git config --global difftool.prompt false

Y luego:

git difftool

El detalle importante: git diff y git log -p nunca abren OmniDiff por sí solos. Siguen mostrando el diff normal de git. Para pasarlos por OmniDiff, define la variable de diff externo:

GIT_EXTERNAL_DIFF=omnidiff git diff

Probamos las dos vías sobre el historial de Flask y ambas funcionaron. OmniDiff cambia solo a salida de texto plano cuando no escribe en una terminal. Si quieres repasar los comandos básicos que rodean a todo esto, tenemos una guía de los 15 comandos de git que todo ingeniero de software usa.

Si usas Jujutsu, existe omnidiff jj configure; el README indica que diff-invocation-mode debe ser file-by-file.

Dos flags que vale la pena conocer: --minimal pinta solo los rangos que aportan significado y --full lo pinta todo. La ayuda de la herramienta los describe como dos lecturas fieles del mismo diff, no como una correcta y otra incorrecta.

¿Qué tan preciso es OmniDiff?

El README es inusualmente franco: el objetivo de precisión del autor todavía no se cumple. Según el README que leímos el 2 de noviembre de 2026, sobre 1.419 casos etiquetados a mano, el 60,0 por ciento tiene cero bytes discrepantes en modo --full y el 69,6 por ciento en --minimal, frente a un objetivo del 90 por ciento. “Discrepante” significa un byte cuyo resaltado no coincide con la referencia etiquetada por una persona, no un diff equivocado, y el README aclara que la mayoría de los errores restantes vienen de las reglas de resaltado y no del algoritmo de emparejamiento.

La robustez es más sólida: en unos 442.530 pares de código de 7.500 repositorios open source, el 99,95 por ciento terminó dentro de un límite de 120 segundos y 6 GB. En nuestra prueba de 283 pares no falló ninguno.

Estas cifras han cambiado entre versiones, así que tómalas como una foto del momento.

¿OmniDiff es gratis?

Sí, bajo licencia AGPL-3.0-only (la versión 0.2.0 era “or later”; la 0.2.1 y la 0.3.0 son “only”). Usarlo como tu difftool personal no plantea ningún problema. Si tu empresa quiere integrarlo o usarlo internamente sin las obligaciones de publicar código de la AGPL, el autor vende una licencia comercial como suscripción mensual de GitHub Sponsors. difftastic y delta, en comparación, tienen licencia MIT.

¿Conviene cambiar de difftastic o delta?

Si lo que quieres es que git diff se vea mejor, delta sigue siendo la opción con menos fricción. Si ya usas difftastic y revisas muchas refactorizaciones, vale la pena instalar OmniDiff junto a ella: detectar código movido es justo lo que difftastic no hizo en nuestra prueba, y en nuestro conjunto de archivos fue más rápida en los casos lentos. Eso sí, ten en cuenta que es un proyecto 0.x, con contribuciones cerradas y un objetivo de precisión que su propio autor reconoce que aún no alcanza.


¿Y tú? ¿Qué herramienta usas hoy para revisar diffs en la terminal?

¿Qué es lo que más te importa en una herramienta de diff?
  • Que detecte el código movido
  • Que sea rápida en archivos grandes
  • Que se integre con mi editor
  • Prefiero otra opción (cuéntanos cuál)
0 votantes

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: Cómo ver el git diff de tu agente en el navegador antes del commit con Diffle