Ir para o conteúdo
CDGet
  • Início
  • Projetos
  1. Início
  2. Todos os projetos
  3. Diffine

Diffine

Biblioteca

Um motor de comparação e um visualizador lado a lado para texto e para imagens, publicados como biblioteca React e como pacote Flutter. Emparelha duas versões linha a linha e, dentro das linhas alteradas, palavra a palavra, compara duas imagens píxel a píxel e desenha o resultado com os dois lados à mesma altura, pelo que a aplicação não tem de construir nem a comparação nem o alinhamento.

Site (abre em uma nova aba)Documentação (abre em uma nova aba)Código-fonte (abre em uma nova aba)

Sobre este projeto

O Diffine descobre o que mudou entre duas versões e põe isso no ecrã, para texto e para imagens, em React e em Flutter. A comparação e a vista são uma só biblioteca, e não um pacote de diferenças com um visualizador por cima: as duas metades encontram-se num valor. O diffText devolve linhas, alterações e contagens, e o diffImage devolve uma máscara, as regiões alteradas como retângulos e as contagens, sem componente nem widget em nenhum dos dois. A vista é um dos consumidores desse valor e não o único caminho até ele, pelo que a mesma comparação pode ser impressa num terminal, executada num worker ou confrontada com um limiar numa compilação. Um patch unificado também é uma comparação: o parsePatch lê um e converte-o nesse mesmo valor, e o formatPatch volta a escrevê-lo.

O texto é emparelhado em dois níveis, numa só passagem. Primeiro juntam-se as linhas aos pares e depois, dentro de um par que foi editado e não substituído, as palavras ou os caracteres que se moveram mesmo. A vista desenha isso em dois painéis mantidos à mesma altura, com ligações sobre o intervalo, e cada parte dela é uma opção com um valor por omissão: os números de linha, a mudança de linha, o alinhamento, as ligações, a vista unificada e o recolhimento das linhas que ninguém editou. Um modo de edição coloca um campo sobre cada painel e volta a calcular a comparação a cada tecla premida. As imagens comparam-se lado a lado, sobrepostas em transparência, com uma cortina deslizante ou apenas pela máscara, e a comparação aceita uma tolerância, ignora a suavização deixada por um renderizador e encontra o deslocamento entre duas capturas que não estão alinhadas; o diffImages compara mais de duas de uma vez, e o imageSimilarity responde com um único número. Ler sem rato resulta, porque cada painel é uma região que recebe o foco, os botões que saltam de uma alteração para a seguinte têm um nome, e o que mudou é anunciado assim que se mexe.

A instalação é o pacote e uma linha de CSS na web, e uma importação em Flutter. Cada pacote tem uma única dependência: o de React acrescenta o highlight.js para o realce de sintaxe, carregado uma gramática de cada vez através de uma importação dinâmica, para que uma comparação de texto simples não descarregue nada dele, e o de Flutter acrescenta o characters, que o Flutter já inclui. O react e o react-dom são dependências de par, portanto usam-se as cópias que a aplicação já tem. Os dois pacotes partilham o motor e a paleta até ao último valor de cor, e o tema escuro segue a definição do sistema. O pacote React é ESM com declarações de TypeScript, e a sua raiz é apenas o motor, com os visualizadores em diffine-react/text-diff e diffine-react/image-diff, pelo que uma aplicação que só quer a comparação não arrasta nenhum visualizador atrás de si.

Funcionalidades

  • Site de documentação

  • Tipos de TypeScript

  • Vários idiomas

  • Verificado por testes

  • Multiplataforma

  • Acessível de origem

  • Modo escuro

  • Permite tree shaking

Informação do projeto

Início
2026
Licença
MIT (abre em uma nova aba)
Linguagens de programação
DartJavaScript
Etiquetas
diffdiff-viewertext-diffimage-diffreactflutter
Pacotes
diffine-react (abre em uma nova aba)npmdiffine (abre em uma nova aba)pub.dev
Popularidade
3
Estrelas no GitHub
83
Transferências de npm
Pontos de dados: 30. Intervalo: de 0 a 24.
Diffine — Transferências de npm, Últimos 30 dias
Transferências de npm
23 de set.24
24 de set.2
25 de set.0
26 de set.0
27 de set.7
28 de set.1
29 de set.3
30 de set.1
1 de out.2
2 de out.1
3 de out.0
4 de out.1
5 de out.2
6 de out.0
7 de out.3
8 de out.4
9 de out.5
10 de out.1
11 de out.5
12 de out.3
13 de out.0
14 de out.0
15 de out.0
16 de out.13
17 de out.0
18 de out.3
19 de out.0
20 de out.0
21 de out.0
22 de out.2
Últimos 30 dias
ContactoDoar
Os projetos listados aqui são de código aberto sob a Licença MIT.© 2026 CDGet. Todos os direitos reservados.