4 ms·
Show HN: VisiGrid CLI – Git-diff for financial reconciliation
Most financial reconciliation fails silently.
A stale Excel filter. A CSV export with reordered rows. A tolerance mismatch that looks “close enough” until it isn’t. By the time a number looks wrong, the mistake is already baked into downstream reports.
VisiGrid CLI is a local-first tool that treats reconciliation like Git diff: deterministic, auditable, and safe to run in CI.
The recurring failure mode in financial models isn’t bad math — it’s undetected drift. Spreadsheets rarely fail loudly. This tool is designed to make drift explicit.
The core primitive visigrid-cli diff answers one question reliably:
What matches, what differs, and what’s missing — with numeric tolerance handled explicitly.
Think Git diff, but for datasets:
- Schema-aware row matching (--key)
- Tolerance-aware numeric comparison
- Deterministic output (no hidden state or background recalculation)
- CI-grade exit codes
* 0 = reconciled
* 1 = material drift detected
Example:
textvisigrid-cli diff vendor.csv internal.csv \
--key invoice_id \
--tolerance 0.01 \
--out json
The output is a versioned JSON contract (contract_version = 1) meant for machines, not eyeballing.
Supporting tools
The CLI also includes focused primitives that support reconciliation workflows:
- convert — pipeable XLSX / CSV / TSV / JSON conversion (stdin/stdout)
- calc — evaluate spreadsheet formulas headlessly
- replay — record structural spreadsheet edits as Lua, replay and verify with deterministic fingerprints
Everything runs locally. No accounts. No network.
Why it’s different
Deterministic by design — same inputs, same outputs, every time
Machine-checkable contract — stable schema and explicit exit semantics
Built for automation — CI, cron jobs, and reconciliation checks
If a reconciliation passes today, it will pass tomorrow for the same inputs.
The GUI
VisiGrid started as a native spreadsheet GUI (built with GPUI/Zed). Over time, it became clear the GUI shouldn’t do reconciliation — it should explain it.
When the CLI flags drift, the GUI acts as a debugger: visualize dependencies, trace formulas, and see exactly where a number came from.
CLI finds the problem. GUI explains it.
I’m pre-v1.0 and would love feedback from people dealing with:
- financial reconciliation
- audit trails
- data pipelines where correctness matters more than convenience
GitHub: https://github.com/VisiGrid/VisiGrid https://github.com/VisiGrid/VisiGrid
Docs & downloads: https://visigrid.app https://visigrid.app
Happy to answer questions about diff semantics, tolerance handling, or the Rust internals.
- rdoneill 8mo agoHi all — I’m the author. A quick clarification on intent, since “Git diff for reconciliation” can sound broader than it is: VisiGrid CLI is deliberately narrow. It’s not a BI tool, not a data warehouse, and not trying to replace Excel or pandas. It’s a deterministic comparison primitive: given two datasets, it answers what matches, what differs, and what’s missing, with explicit numeric tolerance and machine-checkable output. The main design constraints were: same inputs → same outputs (no ambient recalculation) explicit exit codes so it can run in CI stable JSON output for downstream automation runs fully local (no accounts, no network) I’m pre-v1.0 and very interested in feedback on diff semantics, tolerance handling, or edge cases you’ve hit in reconciliation workflows. Happy to answer questions or go deep on implementation details.