Your formulas. Your rules.

Write Lua functions, call them like built-ins.

Sandboxed. Deterministic. Verifiable.

Custom logic that's part of the proof — not an escape hatch from it.

If it runs, it runs the same way every time.

The problem with custom code in spreadsheets

Most spreadsheet "custom code" is stateful, side-effectful, and impossible to verify.

VBA macros read the clock. Python add-ins call APIs. Excel lambdas compose, but can't enforce purity.

Once you allow time, randomness, or I/O, reproducibility is dead. The output depends on when you ran it, not what you ran.

Custom code in spreadsheets is where auditability goes to die.

VisiGrid takes a different approach: your code runs inside the same deterministic sandbox as everything else.

Write Lua, call in formulas

=ACCRUED_INTEREST(B6, C6, D6) works like any built-in. No macros. No add-ins. No special mode.

Define a function in Lua. VisiGrid registers it alongside the 96+ built-in functions. It appears in autocomplete, works in formulas, and evaluates during recalculation.

One file. One language. Functions available in every sheet.

Sandboxed by default

No global mutation. No randomness. No I/O. Hard instruction limits.

Custom functions run in a Lua sandbox with the same constraints as built-in functions: pure input, pure output, no side effects.

If it runs, it runs the same way every time. That's not a limitation — it's the entire point.

Verification includes your code

Fingerprinting covers custom function definitions. Your computation is part of the proof.

Change a custom function and the fingerprint changes. The verifier knows. The CI pipeline knows. The auditor knows.

Custom logic doesn't escape the verification boundary. It lives inside it.

When it matters

Finance

Accrual calculations, day-count conventions, custom pricing models — all verifiable.

Compliance

Domain-specific rules encoded as functions, included in the audit trail.

Domain-specific calculations

Engineering formulas, scientific models, industry-standard computations.

Reproducible models

Hand off a model and the custom logic comes with it. No setup, no dependencies.

Try it in 60 seconds

Three steps. No setup beyond the app itself.

1

Create the functions file

Terminal
$ mkdir -p ~/.config/visigrid
$ $EDITOR ~/.config/visigrid/functions.lua
2

Paste a function

~/.config/visigrid/functions.lua
-- Accrued interest (actual/365)
function ACCRUED_INTEREST(principal, rate, days)
  return principal * rate * days / 365
end
3

Use it in a formula, then verify

Open VisiGrid. Type =ACCRUED_INTEREST(1000000, 0.0425, 92) in any cell. It evaluates like a built-in.

Terminal
$ vgrid sheet fingerprint my-model.sheet
v1:6:a4c8e2f19b3d7056
# includes: ACCRUED_INTEREST (functions.lua:2)
$ vgrid sheet verify my-model.sheet --fingerprint v1:6:a4c8e2f19b3d7056
Verified ✓

Build your own formulas

Custom functions are included in VisiGrid Free. Write Lua, call it in formulas, verify the result.