<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia" -->

---
title: Show HN: OmniDiff – Opensource, super fast, content...
description: OmniDiff is a content-aware diff tool written in Rust that diffs code structurally and renders pictures, fonts, archives, PDFs and more by their actual content...
canonical: https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Show HN: OmniDiff – Opensource, super fast, content aware Git difftool, in Rust | daily.dev
og:description: OmniDiff is a content-aware diff tool written in Rust that diffs code structurally and renders pictures, fonts, archives, PDFs and more by their actual content...
og:url: https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia
og:image: https://api.daily.dev/og/posts/P0m0EfnIA.png
og:image:alt: Show HN: OmniDiff – Opensource, super fast, content aware Git difftool, in Rust
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Show HN: OmniDiff – Opensource, super fast, content aware Git difftool, in Rust

**[Hacker News](https://daily.dev/sources/hn)** · 17 min read · 0 upvotes · 0 comments

## Summary

OmniDiff is a content-aware diff tool written in Rust that diffs code structurally and renders pictures, fonts, archives, PDFs and more by their actual content instead of printing 'Binary files differ'. It diffs 99.95% of code changes across 442,530 tested file pairs and handles 98.8% of all changed files as text or by content. Median diff time is 4.2ms, with 97.6% finishing under 100ms. It works as a git difftool and a jj diff tool, and parses 25 languages with tree-sitter grammars. Accuracy goals of 90% zero-mismatch and 99% at-most-1%-mismatch are not yet met, at 60-70% and 87-92% respectively. It's licensed AGPL v3, with a paid commercial license available, and built with substantial AI assistance from Claude Code.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/ivankovic/omnidiff>

## Questions this post answers

### How do I get a git difftool that shows meaningful diffs for binary files like fonts, images and PDFs instead of 'Binary files differ'?

OmniDiff is a Rust-based diff tool that works as a git difftool backend and renders content-specific diffs: pictures pixel by pixel, fonts glyph by glyph, PDFs page by page, archives file by file, and cursors and message catalogs by their own formats. Configure it with 'omnidiff git configure' or manually via 'git config difftool.omnidiff.cmd'. It diffs 98.8% of all changed files as text or by content rather than printing a binary notice.

_daily.dev surfaces tool comparisons like this for developers picking their next diff or review setup._

### How fast is the OmniDiff diff tool compared to typical diff goals?

OmniDiff measured a median (p50) diff time of 4.2ms, p90 of 35.1ms, and p99 of 177ms across 2,302 code fixtures, with the slowest case at 482ms. 100ms was the 97.6th percentile, meeting its goal of a median under 100ms and 99th percentile under 1000ms. Archives and PDFs are slower due to decoding overhead, with PDFs only hitting the under-100ms mark 57% of the time.

_benchmarks like these help developers weigh diff tool performance before adopting one, track them on daily.dev._

### Why doesn't jj (Jujutsu) use my git difftool configuration for diffing?

Jujutsu does not read git's difftool or diff.external settings even in a colocated repository, so external diff tools need separate jj configuration via 'jj config set --user merge-tools.<name>.program' and related diff-args settings. For tools like OmniDiff, the diff-invocation-mode must be set to 'file-by-file', since jj's default hands a diff tool two directory trees rather than one file pair at a time.

_developers adopting jj alongside git track integration quirks like this on daily.dev._

## Community take

How the wider developer community reacted, aggregated from 1 discussion and 54 comments across hackernews (as of 2026-11-02).

**TL;DR:** Reaction is largely impressed by the speed and content-aware diffing (especially moved-code detection), but a long sub-thread argues over whether AGPL is a smart licensing choice, with side debates about AI-generated code and copyright.

**Sentiment:** 45% positive · 40% mixed · 15% skeptical

**The case for**

- Several people say it produces noticeably more minimal/accurate diffs than existing tools, especially for moved code.
- The author's responsiveness and transparency about benchmarks versus Difftastic and Delta was well received.
- Some explicitly praised the AGPL choice as giving users more confidence/freedom.

**The pushback**

- Many argue AGPL plus a commercial license will hinder adoption compared to permissive (MIT/BSD) alternatives like Difftastic and Delta.
- A sub-thread questions whether AGPL even applies meaningfully if the code was substantially AI-generated, since copyright may not attach.
- Packaging/installation friction (no Arch/AUR package, multiple install methods) was cited as a reason to prefer Delta.
- At least one person tried it as a git difftool and got a broken single-column output instead of the expected diff view.
- One commenter said after viewing examples they didn't actually prefer OmniDiff's output over alternatives.

**By community**

- hackernews (mixed): Praise for the tool's speed and content-aware diffing is tempered by a heated, lengthy debate over the AGPL licensing choice and whether AI-assisted code can even be meaningfully copyrighted.

**Hottest debate:** Whether choosing AGPL (versus permissive MIT/BSD licenses used by competitors) helps or dooms the project's adoption, compounded by doubts about copyright validity given AI-assisted authorship.

**Open questions**

- Will three-way diffs for merge conflicts ever be supported, given the author says it's the hardest unsolved problem?
- Can packaging be extended beyond manual Debian/Arch builds and Homebrew to ease installation?
- What's the best default terminal-width threshold for switching between side-by-side and unified views?

**Highlights**

> You have a good core idea here. You're pretty much killing your project in infancy with the AGPL+donation license model. Meanwhile, some other projects will take the core idea of "language aware differ" and release BSD, and one of those will win, including perhaps making it into git/future version controls. IMO, you should seek to make this a standard that wins, and hopefully other opportunities that come will be where you make commercial hay. My unsolicited 2c.
> — [anilgulecha on hackernews · 2 comments](https://news.ycombinator.com/item?id=50326498)

> Comparing is slightly complicated but roughly speaking: Difftastic only diffs code, which is only 2/3 of all diffs. When only measured on stuff difftastic supports: Difftastic is perfect on 64% of diffs and near-perfect on 17% more. Omnidiff is perfect on 90% of diffs and near-perfect on 5% more. Speed is p50 - 35ms difftastic vs 4ms OmniDiff p99 - 637ms vs 420ms Difftastic wins on license. MIT vs AGPL.
> — [FabCH on hackernews · 1 comments](https://news.ycombinator.com/item?id=50326933)

> > Meanwhile, some other projects will take the core idea of "language aware differ" and release BSD, and one of those will win, including perhaps making it into git/future version controls. Diffsitter and Difftastic have been around for a while, both MIT, so I doubt it.
> — [IshKebab on hackernews](https://news.ycombinator.com/item?id=50327518)

> Delta has a really nice way to show diffs with its diff-so-fancy mode, it's more similar to GitHub's UI where not only the line is colored up differently but there's a different shade of color to highlight the characters. There's a screenshot and video of it here that I wrote a while back: https://nickjanetakis.com/blog/awesome-git-diffs-with-delta-... In OmniDiff's readme and web version I didn't see a way to do that. In a different comment you mentioned OmniDiff is much better than Delta and you mentioned "About a third of diffs are significantly better.". Can you provide some examples of these? I've never seen Delta fail a diff. Also Delta has a package for Arch in its official repos. For folks who just want a "it works" experience, that's a pretty big win. With Delta the same package can be installed in the same way on Debian, Arch and macOS with Brew using standard package managers. With OmniDiff, there's 3 different ways to install it (manual deb package on Debian, manual package compile on Arch and brew install on a Mac). Just something to think about, as someone who has public dotfiles that work in those 3 environments, I'd skip OmniDiff based on this alone.
> — [nickjj on hackernews · 1 comments](https://news.ycombinator.com/item?id=50328043)

> I don't know what I did wrong, but using this as a git difftool (following the config) I didn't get any of the cool things from the demos, I got a weird single-column diff output that only showed the new side of the changes, not a diff.
> — [andunie on hackernews · 1 comments](https://news.ycombinator.com/item?id=50331105)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=50325253) · 207 points · 54 comments

## Similar posts on daily.dev

- [flamestro/deff: interactive, side-by-side file review for git diffs with per-file navigation, vertical and horizontal scrolling, syntax highlighting, and added/deleted line tinting](https://daily.dev/posts/flamestro-deff-interactive-side-by-side-file-review-for-git-diffs-with-per-file-navigation-vertic-qso6x6mtm) · Hacker News · 4 upvotes · 0 comments
- [GitHub - igorkasyanchuk/diffnotes: Your coding agent explains its pull request; your team reads the notes, screenshots and live demos inside the diff on GitHub, GitLab and Bitbucket. Self-hosted, MIT.](https://daily.dev/posts/github---igorkasyanchuk-diffnotes-your-coding-agent-explains-its-pull-request-your-team-reads-the--qklcepigg) · Ruby Flow · 0 upvotes · 1 comments
- [VoidZero Announces Oxfmt Alpha with Rust-Powered Performance and Prettier Compatibility](https://daily.dev/posts/voidzero-announces-oxfmt-alpha-with-rust-powered-performance-and-prettier-compatibility-ceknbbris) · InfoQ · 1 upvotes · 0 comments
- [Git Diff Drivers](https://daily.dev/posts/git-diff-drivers-fdrpr1vwp) · Andrew Nesbitt · 1 upvotes · 0 comments
- [DiffsHub, from Pierre](https://daily.dev/posts/diffshub-from-pierre-qjcz2fpnh) · Lobsters · 1 upvotes · 0 comments

---

Tags: [#rust](https://daily.dev/tags/rust)

[View this post on daily.dev](https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Show HN: OmniDiff – Opensource, super fast, content aware Git difftool, in Rust","url":"https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia"},"datePublished":"2026-11-01T22:03:33.891Z","dateModified":"2026-11-02T07:04:32.056Z","description":"OmniDiff is a content-aware diff tool written in Rust that diffs code structurally and renders pictures, fonts, archives, PDFs and more by their actual content...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9d4418a8c26ac97ddd23c54215ca044c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9d4418a8c26ac97ddd23c54215ca044c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"rust","timeRequired":"PT17M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"Show HN: OmniDiff – Opensource, super fast, content aware Git difftool, in Rust"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/show-hn-omnidiff-opensource-super-fast-content-aware-git-difftool-in-rust-p0m0efnia#faq","mainEntity":[{"@type":"Question","name":"How do I get a git difftool that shows meaningful diffs for binary files like fonts, images and PDFs instead of 'Binary files differ'?","acceptedAnswer":{"@type":"Answer","text":"OmniDiff is a Rust-based diff tool that works as a git difftool backend and renders content-specific diffs: pictures pixel by pixel, fonts glyph by glyph, PDFs page by page, archives file by file, and cursors and message catalogs by their own formats. Configure it with 'omnidiff git configure' or manually via 'git config difftool.omnidiff.cmd'. It diffs 98.8% of all changed files as text or by content rather than printing a binary notice. daily.dev surfaces tool comparisons like this for developers picking their next diff or review setup."}},{"@type":"Question","name":"How fast is the OmniDiff diff tool compared to typical diff goals?","acceptedAnswer":{"@type":"Answer","text":"OmniDiff measured a median (p50) diff time of 4.2ms, p90 of 35.1ms, and p99 of 177ms across 2,302 code fixtures, with the slowest case at 482ms. 100ms was the 97.6th percentile, meeting its goal of a median under 100ms and 99th percentile under 1000ms. Archives and PDFs are slower due to decoding overhead, with PDFs only hitting the under-100ms mark 57% of the time. benchmarks like these help developers weigh diff tool performance before adopting one, track them on daily.dev."}},{"@type":"Question","name":"Why doesn't jj (Jujutsu) use my git difftool configuration for diffing?","acceptedAnswer":{"@type":"Answer","text":"Jujutsu does not read git's difftool or diff.external settings even in a colocated repository, so external diff tools need separate jj configuration via 'jj config set --user merge-tools.\u003cname\u003e.program' and related diff-args settings. For tools like OmniDiff, the diff-invocation-mode must be set to 'file-by-file', since jj's default hands a diff tool two directory trees rather than one file pair at a time. developers adopting jj alongside git track integration quirks like this on daily.dev."}}]}
```

