← All guided builds

Guided build · 01

Build your first reactive model

Turn typed source cells into a live profitability model, then prove the dependency graph by changing one value.

You will finish with: A complete profitability model with an override, status, semantic signal, and readable summary.

15 minBeginnerSource checked for Grid 0.61.0Reviewed 2026-08-24
Related canonical example01-foundations.grid
Get Grid
Starter modelprofitability-starter.gridTyped inputs and named output seams before the reactive formulas are filled in.

Watch it in Grid

See the workflow before you build it.

Follow the finished interaction, then use the written steps below to build and inspect it yourself.

Companion film

From blank to living model

Turn a plain-text model into a live grid, then change one input and watch every dependent value—and the judgment—recompute.

28 secGrid 0.61.0
Open film page
On this page

What you will build

A small profitability model that recalculates from typed source cells, supports an optional override, classifies the result, and produces a readable summary. Nothing here needs a connector or a special runtime capability.

By the end, you will know how Grid turns ordinary cells and semantic values into one dependency graph—and how to prove that graph is live by changing one source value.

If you do not yet have an authoring surface open, complete Get to a running model first. It shows the exact Cloud, Desktop, and API paths, where to put source, and the output that proves evaluation succeeded.

1. Start with a complete model

Open Grid and create a model in the source editor. Paste the canonical Foundations source from the linked example.

The model header gives the file a durable identity:

MODEL "Canonical Foundations"
DESCRIPTION "Small portable model that demonstrates the canonical authoring profile."
VERSION "1.0.0"
AUTHOR "Grid Team"
TAGS "canonical", "portable", "foundational"

The body ends at END MODEL. Shared models should carry this metadata even though Grid can evaluate smaller fragments while you work.

2. Read the source cells as values with meaning

A1 IS currency = 125000
A2 IS currency = 86000
A3 IS percentage = 21pct
A4 IS percentage = 5pct
A5 = BLANK

IS currency and IS percentage preserve semantic meaning for formatting and validation. 21pct is the numeric value 0.21, not the number 21. A5 is intentionally blank because it will become an optional override.

Checkpoint: the model should show five starting values with no formula errors.

3. Add the reactive calculations

B1 IS currency = A1 - A2
B2 IS currency = A1 * (1 - A4)
B3 IS currency = DO
  margin = B1
  deduction = 2500
  MAX(margin - deduction, 0)
END
B4 IS currency = B3 * A3

B1 and B2 are direct formulas. B3 uses a DO … END expression so intermediate ideas have names without becoming unrelated workbook cells.

Binding Expected value Meaning
B1 39,000 Revenue minus cost
B2 118,750 Revenue after the 5% reduction
B3 36,500 Margin after the deduction
B4 7,665 Tax calculated from adjusted margin

4. Add an optional override

B5 IS currency = A5 DEFAULT B4

DEFAULT uses the value on its left unless that value is blank or unavailable. While A5 is BLANK, B5 is 7,665. Set A5 to 9000 and B5 becomes 9,000; restore BLANK and the calculated value returns.

The formula never changes. Only the upstream source assignment changes. These canonical cells are authored values; Grid reserves the input decorator for bindings that accept external writes.

5. Classify and summarize the result

C1 = B1 > 50000 THEN "strong" ELSE "watch"
C2 = MATCH(C1, "strong" -> :green, "watch" -> :amber, _ -> :red)
C3 = `status={C1} tax_due={B5}`

Checkpoint: C1 = "watch", C2 = :amber, and C3 reads status=watch tax_due=7665.

The string in C3 is derived just like a number. When an upstream source value moves, the status, semantic signal, and summary all move with it.

6. Prove that it is reactive

Change the authored value of A1 from 125000 to 150000. Do not touch a derived cell.

Binding New value
B1 64,000
B2 142,500
B3 61,500
B4 / B5 12,915
C1 "strong"
C2 :green

That is the central Grid loop: author relationships once, then let changes propagate through the dependency graph.

Try it yourself

Add an editable threshold and use it in the status formula:

input StrongMargin IS currency = 50000
C1 = B1 > StrongMargin THEN "strong" ELSE "watch"

Raise StrongMargin to 65000. With revenue still at 150000, the status should return to "watch" without changing the classification formula.

You are done when

  • Your baseline values match the first checkpoint.
  • A manual override can replace and then reveal the calculated tax.
  • Changing one input updates every downstream result.
  • You can explain which bindings are authored source values, external inputs, derivations, and presentation.
Build statusReached the expected checkpoint?