01 File-native data review

Review data changes at line speed.

A key-aware diff for CSV, Parquet, and Arrow. Exact row and schema changes, streamed through DuckDB, delivered to your terminal or one portable report.

pip install tabular-file-diff
Art-deco illustration of tabular row trains converging on a brass key junction, then splitting into change routes
Two snapshots. One key junction. Every change routed.

02 One full outer join

A departure board for your data.

  1. AOld snapshotCSV / Parquet / Arrow
  2. KPrimary keyUnique and explicit
  3. BNew snapshotScanned by DuckDB
  4. ΔChange setRows, columns, schema

03 Built for real snapshots

No conversion detours.

50M

Scale-oriented

Parquet and CSV are scanned by DuckDB. Cap displayed samples without weakening the aggregate counts.

0B

Leaves your machine

No account, upload, telemetry, or remote execution. HTML reports remain complete and self-contained.

Fits your workflow

Use the typed Python API, terminal CLI, or wire the native drivers into Git and DVC review.

04 Local station

Try a CSV diff.

Your files are parsed in this tab and are never uploaded. The browser demo is for small CSVs; use the CLI for Parquet, Arrow, or large files.

No file selected
No file selected

No comparison yet. Load the sample or choose two CSV files.

05 Now boarding

From install to signal in one command.

snapshot review
$ tdiff old.parquet new.parquet --key account_id

TABULAR FILE DIFF
old.parquet → new.parquet
key: account_id

  + added               12
  - removed              3
  ~ modified            41
  = unchanged       2,184,009

CHANGES BY COLUMN
  status                   8
  amount                  33

06 Connect your line

Git and DVC are first-class stops.

git config diff.tdiff.command 'tdiff-git --key id'
printf '*.parquet diff=tdiff\n' >> .gitattributes
git diff -- data/snapshot.parquet