TUESDAY, NOVEMBER 10, 2026 Tech news, minus the noise.
N News Cast
LATEST
Home  /  Dev
Dev

OmniDiff Is a Rust Difftool That Reads Code, Not Just Lines

OmniDiff parses 25 languages with tree-sitter and diffs code structurally, so a moved function stops looking like a rewrite. It also handles images, PDFs, fonts and archives.

OmniDiff Is a Rust Difftool That Reads Code, Not Just Lines
Source: Markus Spiske via Unsplash / Wikimedia Commons (CC0)

OmniDiff Is a Rust Difftool That Reads Code, Not Just Lines

Every developer has stared at a diff that says a whole function was deleted and re-added, when all that happened was that it moved. Traditional diff tools compare lines of text, so they cannot tell a moved block from a rewritten one. OmniDiff, a new open-source Rust difftool that hit Hacker News on November 1, tries to fix that by parsing your code first and diffing the structure, not the text.

The project comes from independent engineer Marko Ivankovic, who says he spent his research time studying real diffs from open-source repositories before writing the tool. He sampled 2,000 diffs from the roughly 7,400 repositories listed in Gentoo packages and solved them by hand to understand what a good diff needs. The result is a tool that understands 25 languages through tree-sitter grammars, and recognizes images, PDFs, fonts, archives, cursors, and compiled message catalogs by their bytes rather than their filenames. A font with two redrawn glyphs shows you two glyphs instead of a binary blob notice.

What makes this Rust difftool different

OmniDiff works as a multi-stage pipeline: binary sniffing and format identification, domain-specific parsing or structural decompression, pairwise semantic alignment, and presentation in a fast terminal interface. For code, that means it can align nodes in the syntax tree, so a function that moved to another place in the file shows up as moved, and a renamed variable shows up as renamed, instead of a wall of red and green.

The author's own numbers are striking, and they are the project's own figures, not independent benchmarks. Across 442,530 real code file pairs pulled from recent history of about 7,500 open-source repositories, 99.95 percent completed without hitting a size cap. The project claims 98.8 percent of changes are diffed using content-specific algorithms. On a 2023 ThinkPad T14s with an Intel Core i7-1370P, the median diff runs in 4.2 milliseconds, the 99th percentile in 177 milliseconds, and the author reports diffing C++ files of tens of thousands of lines in under 100 milliseconds.

Those numbers deserve the usual caution. They come from the README, and the accuracy figures are the project's own. One independent reviewer confirmed the image comparison works, and explicitly did not test PDF or font rendering. Treat the headline figures as a claim to verify with your own codebase, not as a verdict.

How to try it

OmniDiff is at version 0.3.0, and the author says he has been using it daily as his git difftool for months. Installation is straightforward. From source, run cargo install --locked omnidiff, which needs a C compiler on your path and a Rust toolchain, rustc 1.92 or later, because the build compiles every tree-sitter grammar from C. Prebuilt binaries for Linux, macOS on Intel and Apple Silicon, and Windows are attached to every GitHub release, and there is a Homebrew tap, an apt repository, and a Nix flake.

Git integration takes one command. Run the interactive setup wizard with omnidiff git configure, which asks whether to configure it globally or for the current repository only, then launch it with git difftool --tool=omnidiff. If you want to avoid touching global config, the lighter path needs no configuration at all: GIT_EXTERNAL_DIFF=omnidiff git diff works directly with git diff and git log -p, though piping through a pager loses some information the tool needs.

There are also VS Code and Neovim extensions, plus a backend for Jujutsu, the Git-compatible version control system. One limitation to know: VS Code does not yet let an extension replace its built-in diff view. The API is implemented upstream but unreleased, so the extension will adopt it when it ships. There is a headless mode for scripts and CI, and JSON output for tooling.

The fine print

OmniDiff is released under AGPL-3.0, with a paid commercial license for teams that cannot live with source-disclosure obligations. That is a stricter license than the MIT or Apache terms most developer tools use, so check with your team before adopting it at work. Contributions are not accepted at this time, while the author keeps development speed high.

The author is open about AI assistance: the project uses Claude Code, and his disclosure reads, in full, that he uses AI and does not vibe-code. The early bug reports are honest too. One Hacker News user reported a single-column diff output that only showed the new side of the changes. The author of git difftool offered to help upstream a mergetools entry, and another commenter noted the structural diff algorithm does not build anything useful for a three-way merge. Those are the rough edges of a version 0.3.0 tool.

None of that changes the core idea, which is sound. Diffs should understand what they are showing. If you review code every day, the test costs ten minutes: install it, point it at a repository you know well, and look at a diff you already understand. If the moved function finally shows up as moved, you have found a better tool. The Perplexity SPACE sandbox showed the same instinct applied to AI agents, and the Rust Adobe clones project showed what one determined developer can build in this language. OmniDiff belongs in that company: small, opinionated, and built from real diffs instead of theory.

AS
News Cast Editorial Team

We cover AI, gadgets, startups and security — original reporting and explainers, written by humans, for humans. Got a tip? Reach us via the contact page.