標準的なバージョン管理ツールは通常、行単位で変更を処理します。そのため、100文字ある行のうち1文字だけが変わった場合でも、行全体が置換されたものとしてマークされてしまいます。OmniDiffは「コンテンツ認識型」の差分表示を提供することで、この問題を解決することを目指しています。Rustで開発されたこのツールは、比較対象のファイルの種類に基づいた特殊なアルゴリズムを使用し、何が正確に変化したかを特定します。例えば、ソースコードを比較する際、単純な変数の名前変更と複雑なロジックの変更を区別することができ、テキストのブロック全体を書き直すのではなく、関連する断片のみをハイライトします。

GNU diffが行全体を変化としてマークするのに対し、OmniDiffが特定のコード断片のみをハイライトする様子を示すサイドバイサイドの比較アニメーション。
Pythonのリファクタリングにおいて、標準的な行ベースの差分表示とOmniDiffのコンテンツ認識型アプローチを比較するアニメーション。github.com

このアニメーションは、OmniDiffがテキストのブロック全体を書き直すのではなく、特定のロジックの変更や移動した変数をどのように特定するかを実演しています。

このツールは、C++、Go、Java、Python、Rustを含む多くのプログラミング言語の構造分析のためにTree-sitter文法と統合することで、その正確性を実現しています。ソースコード以外にも、OmniDiffは内部構造を分析することでバイナリ形式を処理します。画像(PNG、JPEG)についてはピクセル単位の比較、Webフォント(WOFF2、TrueType)についてはグリフ単位の比較、そしてPDFドキュメントについてはページ単位の分析を提供できます。開発者がIntel Core i7プロセッサを搭載したノートPCで実施したベンチマークによると、このツールは高いパフォーマンスを維持しており、2,300以上のテスト用フィクスチャにおいて中央値100ms未満の差分計算時間を達成しています。

Font AwesomeのWebフォントファイルにおいて、OmniDiffが21個の変更されたグリフを特定する様子を示すアニメーション。
OmniDiffはWebフォントに対してグリフ単位の比較を提供し、標準的なツールが見逃す特定の変更を特定します。github.com

この視覚資料は、内部構造を分析することでWOFF2のようなバイナリ形式を処理するツールの能力を例証しています。

PDFドキュメントにおいて、OmniDiffがメタデータとページレベルの変更を特定する様子を示すアニメーション。
OmniDiffはPDFドキュメントに対してページ単位の分析を提供し、特定の修正された要素をハイライトします。github.com

これは、単純なバイナリフラグを超えて、PDFドキュメントに対して構造的な分析を提供するツールの能力を示しています。

OmniDiffは、`difftool`のバックエンドおよびフォーマッターとして、GitやJujutsu (jj)といった一般的なバージョン管理ワークフローに直接統合できます。24ビットカラーやKitty、Sixelなどのグラフィックスプロトコルをサポートするターミナルユーザーインターフェース(TUI)を提供すると同時に、CI/CDパイプライン向けのヘッドレスモードや、プログラムでの利用のためのJSON出力も提供しています。ライセンスに関しては、オープンなコラボレーションを促進するためにGNU Affero General Public License (AGPL)の下でリリースされていますが、これはBSDやMITのようなより寛容なライセンスを好む一部の企業ユーザーにとって障壁となる可能性があります。そのため、このプロジェクトでは、AGPLのソース開示要件を避けたい組織向けに商用ライセンスのティアも提供しています。

Pythonのリファクタリングの2パネルビューを表示するOmniDiffのターミナルユーザーインターフェースのスクリーンショット。
OmniDiffのターミナルユーザーインターフェース(TUI)は、ライトテーマで特定のコードの変更をハイライトします。github.com

このスクリーンショットは、24ビットカラーとグラフィックスプロトコルをサポートするターミナルユーザーインターフェースを紹介しています。