Your code has a full history — every change, who made it, and a one-click revert. Your data usually has none of that. Data version control brings the git model to the tables and files you work with.
Most databases only keep the current state of a table. Do an UPDATE and the old values are simply gone. Data version control keeps the timeline instead:
| What it protects | Limitation | |
|---|---|---|
| Transaction (COMMIT/ROLLBACK) | A single in-flight unit of work | Gone the moment you commit — see database rollback |
| Backup / snapshot | Disaster recovery of the whole DB | All-or-nothing restore; loses everything after the snapshot |
| Version control | Every change, over time | Revert one change, keep the rest — like git |
Transactions are a pre-commit safety net. Backups are a blunt whole-database rewind. Version control is the fine-grained, after-the-fact history most people actually want when they say "can I undo that?"
Real data is scattered across a PostgreSQL server, a MySQL server, a DuckDB file and stray spreadsheets — and each has its own idea of history (or none). Stitching a single timeline across all of them by hand is impractical, so most teams just don't have one.
Varan keeps a git-style version history across every source in your workspace — PostgreSQL, MySQL, DuckDB and files — so you can see what changed and revert an already-applied change without a DBA restore or an engine-specific flashback feature. It sits alongside cross-source SQL, column-level lineage and anomaly detection, so you can trust, trace, and undo your data in one place.
Version, diff and revert across your sources. Free during the beta — macOS, Windows and Linux.
Request beta access →Same idea, applied to data instead of code — a recorded history you can diff and revert. Varan brings that model to databases and files.
Yes — that's the point of a history. See what is database rollback for how this differs from SQL ROLLBACK.