Skip to content

Comparar dos textos — Diff

Compara dos textos al instante en tu navegador. Vista lado a lado, resaltado palabra por palabra, exportación a diff unificado, opciones para ignorar mayúsculas/espacios/líneas vacías. 100 % navegador — sin uploads.

Sin rastreo Se ejecuta en el navegador Gratis
Toda la comparación se ejecuta localmente en tu navegador. Tu texto nunca sale de este dispositivo.
Opciones a ignorar
Revisado para paridad con la salida de `diff -u`, corrección del LCS intra-línea y accesibilidad (roles ARIA, anuncios de cambios para lectores de pantalla, manejo RTL/LTR). — Equipo de Herramientas de Texto de Go-Tools · May 21, 2026

¿Qué es un diff de texto?

Un diff de texto es una comparación estructurada de dos documentos textuales que encuentra el conjunto más pequeño de inserciones y eliminaciones que transforma uno en el otro. La salida hace visible el cambio: verde para líneas añadidas, rojo para eliminadas, en lado a lado o como patch unificado (el formato `---/+++/@@` usado por `git`, GitHub y el comando Unix `patch`).

Bajo el capó, todo diff moderno es un algoritmo de subsecuencia común más larga (LCS). El artículo de Eugene Myers de 1986 en O((N+M)D) es la implementación canónica eficiente; la programación dinámica clásica (usada aquí, con recorte de prefijo/sufijo común) es más simple y funciona perfectamente para entradas web típicas. Una vez alineadas las líneas, los pares vecinos de eliminación + adición pasan por una segunda LCS a nivel de token para que el renderizador resalte solo las palabras que realmente cambiaron dentro de una línea — lo que los revisores llaman diff intra-línea o palabra por palabra.

¿Por qué no comparar las cadenas carácter a carácter? Porque las ediciones rara vez son planas: insertar una línea en mitad de un archivo de 200 líneas desplaza todas las de abajo. Un `===` ingenuo declararía las 199 líneas diferentes. LCS dice la verdad: una línea añadida, 199 sin cambios.

Esta herramienta ejecuta toda la comparación en tu navegador. Sin subir archivos, sin archivo temporal, sin logs. Segura para código propietario, contratos anotados, logs privados y cualquier cosa que te incomodaría pegar en un servidor de terceros. ¿Necesitas comparar JSON? Usa el JSON Diff estructural para que el orden de claves y los espacios dejen de ser ruido. ¿Vas a comparar dos configuraciones en YAML o CSV? Conviértelas primero con YAML a JSON o JSON a CSV y luego compara con la herramienta adecuada para el formato.

// Two strings that look 'mostly the same' but a naïve check disagrees
const a = 'hello world';
const b = 'hello, world!';

// Character equality
a === b; // false — but only 3 characters actually changed.

// LCS-style diff (this tool, at line + word granularity)
// → 1 line modified, inline highlight: 'hello[, ]world[!]'
// → unified patch:
//   --- original
//   +++ modified
//   @@ -1 +1 @@
//   -hello world
//   +hello, world!

Características clave

Lado a lado + Unificado

Alterna entre la vista visual de dos columnas (para revisión humana) y el formato canónico de patch unificado (para `git apply`, herramientas de revisión de código e informes de bugs).

Resaltado inline palabra por palabra

Cuando dos líneas se emparejan como modificadas, solo los tokens cambiados llevan fondo de color. Tu ojo encuentra la edición al instante en lugar de escanear 80 caracteres.

Ignorar mayúsculas / espacios / vacías

Cuatro interruptores independientes: mayúsculas, todos los espacios, solo espacios finales, líneas vacías. Replica `git diff -i -w -b` en un par de clics.

Exportación a diff unificado

Copia un patch `---/+++/@@` limpio con tres líneas de contexto. Encaja directo en un comentario de PR, un informe de bug o `patch -p1`.

100 % en el navegador

Las entradas nunca salen del dispositivo. Sin subir archivos, sin analítica sobre el texto. Funciona sin conexión una vez cargada la página. Segura para código propietario y prosa confidencial.

Unicode + RTL

Tokeniza en los límites de palabra de Unicode. Árabe, hebreo y CJK se comparan limpiamente; las variantes de fin de línea (CRLF, LF, CR) se normalizan todas.

Ejemplos

Revisión de código — renombrado de una variable

function getUser(id) {
  const u = db.users.find(x => x.id === id);
  return u;
}
function getUser(userId) {
  const u = db.users.find(x => x.id === userId);
  return u;
}

La vista lado a lado destaca cada línea que contiene el renombrado, mientras que el diff palabra por palabra atenúa los tokens sin cambios para que el revisor vea exactamente qué identificador cambió.

Edición de contrato — una cláusula añadida

1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
3. Disputes are resolved in California courts.
1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
2a. Termination notice must be in writing.
3. Disputes are resolved in California courts.

Una sola cláusula insertada (línea 2a) es la única diferencia. Las líneas de contexto que la rodean se mantienen limpias — útil para revisar contratos o documentos de política en modo control de cambios.

Investigación de logs — tiempos de petición cambiados

GET /api/users 200 14ms
POST /api/orders 201 88ms
GET /api/orders/42 200 21ms
GET /api/users 200 14ms
POST /api/orders 201 4200ms
GET /api/orders/42 500 21ms

Cambian dos líneas. El resaltado inline muestra la deriva de latencia 88ms → 4200ms y el código de estado 200 → 500. Cronología de incidente lista para usar.

Espacios al final — opción « Ignorar espacios finales »

  margin: 0;  
  padding: 0;
  border: none;
  margin: 0;
  padding: 0;
  border: none;

Sin la opción, la línea 1 reporta una diferencia (espacios finales). Activa « Ignorar espacios / tabulaciones finales » y el diff baja a cero — el mismo truco que hace `git diff -b`.

Cómo usar

  1. 1

    Pega ambas versiones

    Texto original a la izquierda, modificado a la derecha. El diff en vivo se renderiza mientras escribes; las entradas grandes (>200 KB combinadas) cambian a un botón Diff manual.

  2. 2

    Activa las opciones de ignorar que necesites

    Ignorar mayúsculas, ignorar todos los espacios, ignorar espacios finales o ignorar líneas vacías — cada una independiente y persistida entre visitas.

  3. 3

    Lee el diff o llévate el patch

    Lado a lado para revisión humana, Unificado para el formato `---/+++/@@`. « Copiar diff unificado » envía un patch limpio al portapapeles para revisión de código o `patch -p1`.

Trampas comunes del diff

Archivo entero « cambiado » tras copiar entre Windows y Unix

Si pegas desde Notepad en Windows en un original editado en Unix, cada línea mostrará diferencias por \r. Activa « Ignorar espacios / tabulaciones finales » para silenciar los caracteres CR.

✗ Incorrecto
Diff: 200 modifications (all because of trailing \r)
✓ Correcto
Ignore trailing spaces / tabs → 2 real changes

El diff de indentación grita

Reformatear tabulaciones ↔ espacios hace explotar los diffs línea por línea. « Ignorar todos los espacios » colapsa el diff a los cambios semánticos reales.

✗ Incorrecto
Diff: 87 modifications (all are indent changes)
✓ Correcto
Ignore all whitespace → 4 actual changes

Párrafos idénticos marcados por una línea en blanco

Añadir o eliminar una sola línea vacía en prosa puede desalinear toda una región. « Ignorar líneas vacías » lo arregla sin tocar el contenido.

✗ Incorrecto
Diff: paragraph 2 'completely changed' (one blank line moved)
✓ Correcto
Ignore blank lines → no changes in paragraph 2

El diff dice « idéntico » pero los archivos son distintos

Casi siempre es una opción de « Ignorar » mayúsculas o espacios que quedó activada de una sesión anterior. Abre el panel « Opciones a ignorar » — ahí están todas las casillas. Desactívalas todas si quieres una comparación byte-strict.

✗ Incorrecto
0 differences shown, but `cmp` says the files differ
✓ Correcto
Disable all Ignore options → real diff appears

JSON pegado que parece « todo cambiado »

El diff de texto trata el orden de las claves como significativo; JSON no. Para payloads JSON, usa la herramienta dedicada JSON Diff — ignora el orden de claves y respeta la estricteza de tipos.

✗ Incorrecto
Text diff on JSON: 100% of lines changed (just a key reorder)
✓ Correcto
<a href="/es/tools/json-diff">JSON Diff</a>: 0 differences

Aviso de diff truncado ignorado

Por encima de 5 000 líneas por lado, la entrada se recorta. Si aparece el aviso, cambia a línea de comandos `diff -u file1 file2` o `git diff --no-index` — ambos hacen streaming y manejan gigabytes.

✗ Incorrecto
Pasted a 20,000-line log — only first 5,000 lines diffed
✓ Correcto
`diff -u a.log b.log` in terminal handles full file

Casos de uso comunes

Fragmento de revisión de código
Suelta dos versiones de una función en los cuadros para ver de un vistazo un renombrado, una rama eliminada o una nueva cláusula de guarda. El resaltado palabra por palabra es más rápido que escanear el diff de GitHub para un cambio de una línea.
Línea roja de contrato / política
Pega el contrato de ayer frente a la revisión de hoy. Las cláusulas insertadas saltan a la vista; los párrafos sin cambios colapsan a gris. Exporta el patch unificado para el rastro de revisión legal.
Investigación de cronología de logs
Compara el corte de logs previo al incidente de un SRE con el corte durante el incidente. Latencia, código de estado y deriva de frecuencia afloran al instante sin `awk`.
Revisión de prosa / borrador
Pega un borrador y la versión de tu editor. El diff palabra por palabra muestra exactamente qué frases se reescribieron — invaluable para aceptar o rechazar cambios uno por uno.
Revisión de traducción
Compara una traducción antigua contra una re-traducción para confirmar que la nueva copia preserva sentido, estructura y placeholders. Activa « Ignorar espacios finales » para silenciar el ruido que los traductores suelen introducir.
Auditoría de .env / archivos de configuración
Compara dos `.env`, `docker-compose.yaml` o archivos rc de shell. Con « Ignorar líneas vacías » activado, el diff se centra en las diferencias funcionales en vez de en el ruido de formato.

Detalles técnicos

LCS con recorte de prefijo/sufijo
Las líneas comunes al principio y al final se eliminan antes de ejecutar la LCS por programación dinámica. Un diff de « dos configs de 2 000 líneas con una sola línea cambiada » colapsa a una tabla DP de 1×1 y se renderiza en menos de un milisegundo.
Diff intra-línea a nivel de token
Los hunks adyacentes de eliminación + adición se emparejan y tokenizan mediante secuencias Unicode de palabra/no-palabra/espacio. Una segunda pasada de LCS produce los tramos verdes/rojos que hacen legibles las líneas modificadas.
Diff unificado compatible con git/patch
La salida sigue el formato `---/+++/@@ -L,C +L,C @@` definido para GNU patch y usado por Git, GitHub y todas las herramientas de revisión de código. Aplícalo con `pbpaste | patch -p0`.
Límite de entrada de 5 000 líneas por lado
Más allá del límite, el diff trunca y avisa. Para entradas de varios MB, usa `diff -u` en línea de comandos o `git diff --no-index` — hacen streaming y manejan gigabytes.

Buenas prácticas

Elige las opciones de ignorar antes de leer
El ruido de espacios finales, CRLF y mayúsculas ahoga la señal. Activa las opciones correctas primero; el diff es mucho más fácil de leer y dejarás de entrenarte para saltarte cambios 'falsos'.
Usa Unificado para compartir y Lado a lado para revisar
Las columnas visuales son para tus ojos. Los patches unificados son para las terminales de los demás. Un diff unificado copiado se cuela en un mensaje de Slack, un comentario de Jira o `patch -p1` sin traducción.
Verifica con el % de similitud
Si dos archivos son 'casi iguales' pero la similitud es del 30 %, tienes un problema de finales de línea o espacios. Activa « Ignorar todos los espacios » y vuelve a comprobar antes de leer el diff.

Preguntas frecuentes

¿El texto que pego se envía a tu servidor?
No. Cada comparación se ejecuta en JavaScript dentro de tu navegador. Tu texto no se sube, ni se registra, ni se guarda en disco, ni se envía a terceros. Solo tus preferencias de interfaz (modo de vista y opciones « Ignorar ») se guardan en localStorage para que la página las recuerde la próxima visita — nunca el texto. Puedes verificarlo abriendo DevTools → Red: cero peticiones al hacer clic en Diff.
¿Cuál es la diferencia entre diff de texto y diff de JSON?
El diff de texto compara línea por línea — perfecto para prosa, código, logs, contratos y archivos de configuración. JSON Diff entiende el modelo de datos de JSON: el orden de las claves es irrelevante, los tipos son estrictos y los arrays pueden emparejarse por clave. Si pegas JSON en un diff de texto, las reordenaciones de claves y las diferencias de espacios se marcarán como cambios; JSON Diff las ignora. Usa el diff de texto para contenido no estructurado y JSON Diff para respuestas de API y configuraciones.
¿Cómo ignoro espacios, mayúsculas o líneas vacías?
Haz clic en el panel « Opciones a ignorar » sobre el diff. « Ignorar mayúsculas » hace que A y a sean equivalentes. « Ignorar todos los espacios » colapsa cada espacio, tabulación y salto de línea antes de comparar. « Ignorar espacios / tabulaciones finales » solo elimina los espacios al final de línea — el comportamiento estándar de `git diff -b`. « Ignorar líneas vacías » descarta las líneas vacías o con solo espacios antes del diff. Cada opción es independiente y se conserva entre visitas.
¿Qué es un diff unificado (y cuándo lo copio)?
Un diff unificado es el formato de texto `---/+++/@@` usado por `patch`, `git apply`, las PR de GitHub y la mayoría de herramientas de revisión de código. Haz clic en « Copiar diff unificado » para obtener un patch con tres líneas de contexto alrededor de cada cambio — pégalo en un informe de bug, un comentario de revisión o un comando `patch -p1` y se aplica limpiamente. La vista lado a lado es para humanos; el diff unificado es para máquinas (y para revisores que piensan como máquinas).
¿Por qué el diff muestra líneas enteras cambiadas si solo edité una palabra?
No es así — mira de cerca. La línea completa se resalta porque algo cambió en ella, pero dentro del resaltado solo los tokens cambiados llevan el fondo brillante (verde para añadidos, rojo tachado para eliminados). Es el diff intra-línea palabra por palabra: el contexto de la línea sigue siendo legible mientras tu ojo se posa en la edición exacta. Si dos líneas consecutivas fueron modificadas, ambas mostrarán resaltado inline.
¿Cómo se manejan los finales de línea CRLF y LF?
Se reconocen ambos. El diff divide en \r\n, \n y \r suelto, por lo que el CRLF de Windows, el LF de Unix y el CR del Mac antiguo se alinean correctamente. Si quieres marcar específicamente los cambios de fin de línea, deja « Ignorar espacios / tabulaciones finales » desactivada — el \r aparecerá como carácter final. Para eliminar por completo el ruido de finales de línea, activa « Ignorar todos los espacios ».
¿Qué tan grandes pueden ser las dos entradas?
El diff corre en el hilo principal, así que los límites prácticos son unas 5 000 líneas o 1 MB por lado; por encima recortamos y mostramos un aviso. El diff en vivo se desactiva por encima de 200 KB combinados y cambia a un botón Diff manual. Para archivos de varios MB, usa `diff -u` en línea de comandos o `git diff --no-index` — hacen streaming y manejan gigabytes.
¿Y para comparar código? ¿Conoce mi lenguaje?
El diff es agnóstico del lenguaje: ve líneas y tokens, no sintaxis. Eso es una ventaja para fragmentos de revisión, ediciones de configuración y patches pegados. Si quieres un diff semántico de código (función renombrada entre archivos, nivel AST), usa git, la vista de PR de GitHub o una herramienta dedicada de diff estructural. Para el 90 % de las situaciones de revisión de código — examinar una función, comparar dos fragmentos — el diff línea + palabra es lo que necesitas.
¿Por qué a veces una sola edición aparece como una línea eliminada más una añadida?
Cuando una línea cambia tanto que el resaltado palabra por palabra deja de ser útil, el diff la reporta como líneas separadas de eliminación + adición para mantener limpia la estructura. La misma heurística da una salida legible para reescrituras de prosa y bloques de código reescritos en lugar de editados. Cambia a la vista Unificada para ver el clásico par `-`/`+` usado en patches.
¿Cómo se calcula el porcentaje de similitud?
Es el número de líneas sin cambios (tras aplicar las opciones « Ignorar ») dividido por el mayor de los dos recuentos de líneas, limitado al 100 %. Dos entradas idénticas dan 100 %. Añadir una línea nueva a un archivo de 100 líneas da 99 %. Reemplazar cada línea da 0 %. Útil para juzgar rápido « ¿es una edición pequeña o una reescritura completa? » antes incluso de leer el diff.
¿Puedo compartir un diff con un colega?
Sí, de dos maneras. (1) Haz clic en « Copiar diff unificado » y pega el patch en un chat, en Slack o en un comentario de PR — cualquiera con una terminal puede hacer `patch < clip`. (2) Toma una captura del panel lado a lado para revisión visual. Deliberadamente no ofrecemos un botón « compartir por URL »: eso obligaría a subir tu texto, y eso no lo hacemos.
¿El diff maneja idiomas de derecha a izquierda como el árabe o el hebreo?
Sí para el contenido de texto — las líneas y tokens son Unicode-aware. La interfaz usa direcciones CSS lógicas, por lo que en locales RTL la canaleta y las columnas de líneas se invierten de forma natural. Dentro de una celda de diff la dirección del texto sigue al contenido, así que las cadenas en árabe y hebreo se muestran correctamente mientras los marcadores +/- siguen alineados con la canaleta.

Herramientas relacionadas

Ver todas las herramientas →

Probador de Regex Gratis — Depura Patrones en Línea

Procesamiento de Texto

Prueba patrones de expresiones regulares al instante contra cualquier texto. Resaltado de coincidencias en vivo, grupos de captura, vista previa de reemplazo, división y explicador. Regex JavaScript, 100% privado, sin registro.

Contador de Palabras y Caracteres Gratis

Procesamiento de Texto

Cuenta palabras, caracteres, oraciones, párrafos y tiempo de lectura al instante. Contador de palabras en tiempo real con límites de Twitter, meta descripción e Instagram. Gratis, privado y sin registro.

Conversor de Bases — Binario, Hex, Decimal, Octal

Herramientas de Conversión

Convierte números entre binario, hexadecimal, decimal, octal y cualquier base personalizada (2-36) al instante. Gratis, privado, sin registro — todo el procesamiento ocurre en tu navegador.

Decodificador y Codificador Base64

Codificación y Formato

Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.

Generador Crontab y Constructor de Expresiones Cron

Fecha y Hora

Construye, valida y decodifica expresiones cron en el navegador. Vista previa de próximas ejecuciones en hora local o UTC. POSIX 5 campos, presets y descripción natural. Gratis y privado.

Convertidor de CSV a JSON

Codificación y Formato

Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.