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= AVG(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= AVG(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"

Eight ideas to remember. Five hundred 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.

Eight type tags

currency, percentage, bps, fx_rate, date, duration, email, url. The runtime knows what your numbers mean.

built-in
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. Cells that fire on edges, schedules, and moments in time.

Pipelines

>>reads left-to-right the way you'd describe a workflow.

Lambdas
Conditionals
Pattern guards
496 built-ins

Math, statistical, financial, lookup, text, date, domain, logical, database, engineering, information, async — across twelve categories.

12 categories
NextHow a .grid file becomes a model