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
Docs & downloads: https://visigrid.app
Happy to answer questions about diff semantics, tolerance handling, or the Rust internals.
rdoneill•1h ago
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.