Hacker News new | ask | show | jobs
Show HN: VisiGrid CLI – Git-diff for financial reconciliation (visigrid.app)
1 points by rdoneill 134 days ago
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

Docs & downloads: https://visigrid.app

Happy to answer questions about diff semantics, tolerance handling, or the Rust internals.

1 comments

Hi 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.