Grids
Capabilities

A spreadsheet that knows what it's saying.

Cells carry meaning, not just numbers. A formula is a function. An array spills. A pipeline is a pipeline. The result is a model that reads cleanly to humans and runs cleanly on machines.

Hiring · Q2Rubric
Live
F2fx= AVERAGE(B2:E2) as percentage
CandidateResumeCodeArch.Comm.Score2Maya Chen0.820.940.880.8688%3Wei Park0.780.810.840.7981%4Aisha Ali0.710.690.740.8675%5Theo Martin0.620.740.660.7168%
Rubric
DimWeightTypeResume0.20scoreCode0.35scoreArchitecture0.30scoreComm.0.15score
Pipeline
RankCandidateReco1Maya Chenadvance2Wei Parkadvance3Aisha Alihold
01 · The cell

A type tag is a contract.

F2 as percentage is more than a format. It promises every downstream consumer — a chart, a function, an external API — that this value is a percentage. No string parsing, no convention drift, no glue code.

Tag a cell once; the entire dependency graph honors it. Mismatches surface at compile time as type_error, with the call site, not a stack trace from production.

Hiring · Q2
Live
F2fx= AVERAGE(B2:E2) as percentage
CandidateResumeCodeArch.Comm.Score2Maya Chen0.820.940.880.8688%
Hiring · Q2
Live
H1fx= BYROW(rubric, score_one)
HIJK188%81%75%68%292%79%84%71%
02 · The array

One formula. A rectangle of values.

When a formula returns an array, the runtime spills it into a region anchored at the cell. H1# refers to the whole spill — one node in the dependency graph, not a thousand cells with copy-pasted formulas.

Operate on a spilled region directly: SUM(H1#) totals the rectangle. H1# * 1.1 broadcasts a multiplier across every cell.

03 · The pipeline

Read it the way you'd describe it.

The >> operator chains transformations. Score becomes ranking becomes recommendation, in the order a person would explain it.

hiring.gridgrid
# 04 / candidates → ranked list
ranked = candidates
  >> MAP(_, score_one)
  >> SORT(_, -1)
  >> TAKE(10)

# 05 / ranking → recommendation
recommend =
  score >= 0.85 THEN "advance" ELSE
  score >= 0.70 THEN "hold" ELSE "archive"

Core ideas to remember. 2,816 functions to choose from.

The whole language fits in a single page of concepts. The catalog of built-ins is auto-generated from the runtime, so the docs always match the binary.

Semantic type tags

currency, percentage, bps, score, fx_rate, date, duration, url, unit:USD. The runtime knows what your values mean.

kind-checked
Higher-order functions

MAP, REDUCE, SCAN, BYROW, BYCOL. Lambdas first-class. No loops.

5 helpers
Spilling arrays

One formula → many cells. D1# is one node.

Pattern matching

MATCH with guards, defaults, and exhaustive checking at compile time.

Reactive rules

WHEN, EVERY, AT — with DEBOUNCE, THROTTLE, serial queues, and missed-run policy.

Native SQL

SELECT as source syntax — joins, CTEs, window functions — with pushdown to BigQuery, Snowflake, Redshift, and Databricks.

Predicates & WHY

predicate releasable means … — derived truth over the model, and WHY(cell) explains any answer.

Symbolic math

Declare symbol x and do exact algebra — simplify, factor, differentiate, solve — with a certificate on every result.

SOLVE& optimize

Goal seeking, MINIMIZE / MAXIMIZE, linear and mixed-integer programs — as statements, not add-ins.

2,816 built-ins

Math, statistical, financial, engineering, science, logistics, geospatial, computer science, game theory, computational biology, async — and dozens more.

51 categories
NextHow a .grid file becomes a model