Source on the left. A running model on the right.
A .grid file parses into an AST, builds into a dependency graph of typed cells, and runs on the Grid platform — same language, same outputs, same error model.
# allocation weights = positions / SUM(positions) as percentage cov = COVARIANCE_MATRIX(returns) port_ret = PORTFOLIO_RETURN(weights, asset_returns) port_vol = PORTFOLIO_VOLATILITY(weights, cov, 252) sharpe = (port_ret − rf) / port_vol
Source becomes a running cell, in four stages.
The pipeline is rigid; the placement is managed. Parse, build, plan, evaluate. Same path in production, in dev, in tests — only the execution target at the end changes.
The boundary between "your spreadsheet" and "a deployed program"doesn't exist. The.grid file is the program.
01 Source
portfolio.gridgrid weights = positions / SUM(positions) cov = COVARIANCE_MATRIX(returns) port_vol = PORTFOLIO_VOLATILITY(weights, cov, 252)
A .grid file: cells, formulas, ranges, optional rules.
02 AST
astjson assign("weights", binop("/", ref("positions"), call("SUM", [ref(...)])))
A strict tree. Every literal typed. Every operator looked up. Every identifier resolved.
03 Model
A typed dependency graph. Each cell knows its inputs, its outputs, and its execution class.
04 Runtime
portfolioCellValueweights[0]0.240port_vol0.094sharpe1.84The platform picks the right execution path for production, preview, or local validation.
Recompute is local.
When positions changes, weights recomputes — and only the cells downstream of weights follow. In dependency order. Atomically. Everywhere it runs.
Cycles fire #CIRCULAR_REF! at build time, with the cycle path in the error. Errors travel through the same channels as values, so every consumer sees them in context.
The model never moves. The platform chooses where it runs.
Same parser, same type system, same 2,816 functions, same error model. Consistent output across production, preview, and validation — selected per tenant, per deployment, even per file.
Hosted execution
Each model deploys as a self-contained program. A Rust runtime host owns model state, jobs, connectors, and scheduling; every cell write triggers a local recompute inside the tenant runtime.
rust hostfastrule-awareShared execution
A shared execution layer can host many models while preserving the same scheduler, outputs, and isolation boundaries.
multi-tenantsharedcompiled IRLocal validation
The same engine embeds in-process for development, tests, and agent verification. Behavior matches the hosted runtime for portable models.
localtestsoffline