Product update

Diff Anything 1.2: sharper comparisons, safer previews, one engine everywhere

Diff Anything 1.2 opens every desktop comparison engine to Free previews, improves semantic and visual accuracy, and keeps desktop, CLI, and batch behavior aligned.

Diff Anything 1.2 is a quality release in the most literal sense: the same files produce more faithful results, difficult inputs fail more honestly, and every route into a comparison follows the same rules.

The visible change starts with a more useful Free tier. Underneath it is a larger rebuild of comparison routing, format handling, resource limits, and regression coverage—the work that makes a diff tool easier to trust when the result matters.

01 / Try the complete range

Every desktop comparison engine now has a Free preview

Free is no longer limited to choosing only text or JSON in the desktop app. You can open YAML, XML, CSV, environment files, HTTP responses, API schemas, folders, archives, PDF and Office documents, images, and binary files before deciding whether Pro fits your workflow.

The boundary is explicit: Free accepts files up to 5 MiB per side and 10 new comparison sessions per local day. CSV, folder, and archive previews show the first 100 rows or items, and PDF review shows the first 3 rendered page previews. Reworking rules or rerunning the same source pair in its tab does not consume another session.

Pro removes those preview and session limits within the app's technical safety limits. It also unlocks saved profiles, live watch, history, report export, three-way merge, folder synchronization, trusted preprocessors, every CLI mode, and batch manifests. The Free CLI remains focused on text and JSON.

Diff Anything local source picker for files, folders, and pasted content
Every comparison still begins with two local sources; 1.2 makes the specialist engines available as bounded Free previews.

02 / Preserve meaning

Structured comparisons keep more of the awkward truth

Real data is rarely the tidy example from a parser tutorial. JSON can contain comments, trailing commas, duplicate keys, keyed arrays, and floating-point values that should be compared within a tolerance. Version 1.2 handles those cases explicitly and warns when information, such as a duplicate key, cannot be represented without ambiguity.

YAML comparisons now preserve multiple documents and distinguish non-finite numeric values. XML compares namespace meaning rather than prefix spelling, preserves mixed-content order, and limits ignored child order to the paths you choose. Wildcard rules also reach array descendants instead of stopping at object properties.

CSV review retains ragged cells, disambiguates duplicate headers, and pairs repeated key occurrences instead of silently overwriting a row. HTTP comparison preserves repeated headers, rejects malformed header lines, and still compares a JSON body semantically. Environment values remain masked while duplicate or malformed assignments become visible warnings.

Diff Anything semantic JSON comparison with changed paths, values, and review state
Structured differences stay attached to stable paths so rules, review state, applying changes, and reports refer to the same change.

Choose the comparison model that matches the material.

03 / Review contracts carefully

API mode now covers more than OpenAPI and JSON Schema

OpenAPI and JSON Schema review now catches additional compatibility signals, including nullable fields becoming non-nullable, while keeping its conclusion deliberately cautious: finding no known breaking change is not the same as proving compatibility.

Version 1.2 also adds lightweight contract comparison for GraphQL types and SQL CREATE TABLE definitions. Removed GraphQL fields and changed SQL columns can be surfaced as material changes. These are intentionally bounded parsers, not complete GraphQL or SQL implementations; constructs outside their scope produce a warning and should be reviewed in the raw schema.

See the exact API compatibility scope and limitations.

04 / Measure what is visible

Image and document results are more precise about what they know

Image comparison now measures colour in linear light and evaluates alpha after premultiplication. Invisible RGB values under complete transparency no longer create false differences. Different dimensions still share a transparent canvas, while decoded-size budgets reject pathological images before allocating the comparison surfaces.

If pixel decoding fails, Diff Anything keeps the useful binary metadata and explains why the pixel result is unavailable. Animation and colour profile limitations are disclosed rather than hidden behind an apparently exact score.

Diff Anything image heatmap with threshold, similarity, changed pixels, and error measurements
Heatmap and changed-pixel views now rest on safer decoding and more faithful colour and transparency calculations.

Document handling received the same treatment. PDF wording differences map back to rendered pages more reliably, including multipage files and fallback extraction. Office parts are ordered numerically, XLSX shared strings resolve correctly, and RTF Unicode and hexadecimal escapes are decoded without presenting extracted text as proof of identical layout.

Diff Anything comparing rendered PDF pages with navigation, zoom, and a selected wording difference
Rendered PDF pages and normalized text remain connected, while the distinction between visual and extracted evidence stays explicit.

05 / Stay responsive

Large results are bounded without pretending the totals are smaller

Text comparison keeps exact added, removed, and changed totals while capping the detailed records transferred into the interface. Structured results report an explicit warning when their detail cap is reached. Folder, archive, and image work can be cancelled during expensive native processing instead of only before it begins.

Archive comparison now pages large entry sets and applies explicit entry, per-file, and total expanded-size limits. ZIP and TAR-family archives are handled without relying on external system commands, and symbolic links are compared by their targets rather than followed into unrelated paths.

06 / Remove drift

Desktop, CLI, and batch now share one comparison model

The largest change in 1.2 is mostly invisible. The desktop coordinator no longer owns a long chain of mode-specific routing. A typed comparator registry now defines what each mode requires, how it runs, which result it returns, whether it can be cancelled, how its summary is read, and which export data it exposes.

The native CLI and batch paths resolve the same canonical mode names and execute every comparator through one runner. That prevents a YAML file, mixed JSON/YAML pair, restored profile, CLI command, and batch case from quietly choosing different engines or reporting different summary semantics.

Options, defaults, review identities, source validation, workspace state, platform behavior, and comparison rendering were also extracted into focused modules. The user-facing result is less drift: one fix applies to every entry point instead of being copied into several large branches.

Diff Anything comparing TypeScript source with syntax highlighting and moved-block detection
The comparison view stays format-specific; the routing and result contract underneath it are now shared and testable.

07 / Prove the release

More coverage for the cases a diff tool cannot afford to guess

The 1.2 release gate runs 301 frontend tests and 130 native Rust tests. Frontend line coverage is 74.69%; native line coverage is 81.86% and is enforced alongside region and function thresholds. Formatting, linting, TypeScript, Clippy, release metadata, cross-platform builds, and benchmark budgets are also part of the release check.

Generated tests exercise reversible folder synchronization in both directions, three-way merge cases, structured selectors, archive safety, image alpha and colour math, PDF page mapping, report redaction, terminal behavior, accessibility focus handling, and the complete comparator registry. The point is not the test count by itself; it is making the difficult claims executable.

Diff Anything 1.2 keeps the original promise—compare private work locally, without an account, analytics, telemetry, or a cloud comparison service—and makes the answer more dependable across every supported kind of diff.