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.
Create the functions file
Paste a function
-- Accrued interest (actual/365)
function ACCRUED_INTEREST(principal, rate, days)
return principal * rate * days / 365
end 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.
Build your own formulas
Custom functions are included in VisiGrid Free. Write Lua, call it in formulas, verify the result.