Spreadsheets
Typed tables and free-form sheets — what actually differs, the ten column types, AI columns and cells, and the entity grid's smaller set of powers.
All documentation — Modelling the world
Boards and the canvas
The node builder
Modelling the world
Variables, logic and commands
Voice and audio
AI
Working together
Project settings
On this page
A spreadsheet is a document with a grid instead of a page. There are two kinds, and a third surface that looks like one and is not.
The formula language they run is its own reference.

Which kind to make
The Documents tree’s context menu offers both:
| Menu entry | What you get |
|---|---|
| New Table | A typed sheet: every column has a field type, and values are coerced into it |
| New Free-form Sheet | An untyped sheet: every column is general, and each cell decides its own kind |
A new table starts with three columns — Name, Value, Notes — and six blank rows. A new free-form sheet starts with six blank untyped columns and six rows.
What actually differs
The mode flag is not the mechanism — a per-column general flag is, which is why you can convert between them.
| Typed column | Free-form column | |
|---|---|---|
| Header shows | The column’s label | Its letter, when unlabelled |
| Field type | One of ten, with configuration | None |
| Column sort and filter | Yes | No |
| A committed value | Coerced to the column’s type | Auto-detected, conservatively |
| Can host a formula | Only certain types | Always |
| AI configuration | On the column | On the cell |
| Range Sort ↑ / ↓ in the toolbar | No | Yes, with more than one row selected |
Auto-detection is deliberately not Excel-aggressive. It recognises blank, TRUE/FALSE
case-insensitively, plain numbers, and unambiguous ISO dates. Everything else is text — so 1-2 stays
1-2 rather than becoming a date.
Converting
Free-form and Convert to table are in the toolbar, and each is one undo step. Converting to a table infers each column’s type from its cells; a column with mixed kinds becomes text, and unnamed columns become Column A, Column B, and so on.
Columns
Ten of the twenty field types are available on a spreadsheet column:
| Type | Menu label |
|---|---|
text | Text |
richText | Rich text |
number | Number |
boolean | Checkbox |
date | Date |
asset | Asset |
entity | Entity |
select | Select |
color | Color |
vector3 | Vector3 |
Excluded: code, condition, and every reference type except asset and entity.
A new column is text, 160 pixels wide, named Column N — and N is a count, not a position, so
inserting between two columns does not renumber anything.
A select column can point at a project enum or bitmask; the options resolve when the sheet
is read and the resolved list is never stored, so renaming an option updates every cell at once.
The column menu
Column name · Sort ascending · Sort descending · Filter (No filter · Contains · Equals · Is empty · Is not empty) · Freeze column — the first column only · Conditional formatting… · Type · AI settings… · Insert column left · Insert column right · Delete column.
A filter matches the displayed text, not the stored value.
Cells
A cell holds its raw value, optionally a formula, optionally AI metadata, optionally a manual format, and — in a free-form sheet — its detected kind. Cells are sparse: an empty one is not stored.
Rich cells are stored separately, because rich text cannot live in a plain-value map — with a flattened plain-text copy alongside it, so the grid can draw a preview and the cell stays searchable.
The last row is a phantom. It is always there, always blank, and typing in it materialises a real row and your value in a single step. Editing or clearing a cell preserves its formatting, and a commit that changes nothing writes nothing and adds no undo step.
Right-clicking a cell
Copy · Cut · Paste · Clear · Format (a submenu) · Insert row above · Insert row below · Delete row.
Format offers Bold, Italic, Underline, Strikethrough, three alignments, Fill colour, Text colour and Clear formatting.
Keys
Enter edits · arrows move, Shift extends · Tab and Shift+Tab move a column · Ctrl+A selects
all · Delete clears · Ctrl+F finds · any printable character starts typing.
AI columns and AI cells
Two shapes, and which you get depends on the sheet.
An AI column (typed sheets) has a prompt, and every cell in it is generated and coerced into the column’s own type. Its output type can be text, number, boolean, date, select, color or entity.
A per-cell AI (free-form) is set on the cell itself, from AI prompt…. Its output type is narrower: Text, Number, Checkbox or Date.
From a column’s panel you can run four scopes: Empty cells, Outdated, Errors, or Whole column — and whole column skips anything you have hand-edited. Selecting more than twenty cells in a free-form sheet asks first, with the credit estimate.
Two markers you will see on a cell:
| Marker | Meaning |
|---|---|
| Outdated — a referenced value changed. | Something the cell’s prompt mentioned has changed since it was generated |
| Hand-edited — won’t be auto-overwritten. | You typed over it, and bulk runs now skip it |
A generated cell records the model it used and the credits it spent, so you can see where an expensive column went.
In an AI column, typing a value that starts with = is a plain human override, not a formula.
The entity grid is not a spreadsheet document
Opening an entity definition as a table — Open as spreadsheet in the entities tree — gives you a grid over that definition’s items. It looks the same and it can do less, deliberately: its columns are a schema and its rows are your items.
| A spreadsheet | The entity grid | |
|---|---|---|
| Edit cells | Yes | Yes |
| Add, insert or delete rows | Yes | No — rows are items |
| Add or retype columns | Yes | No — columns are the definition |
| Formatting, conditional formatting, comments | Yes | No |
| Author a formula in a cell | Yes | No — formulas belong to the field |
| Convert to free-form, range sort | Yes | No |
| Row heights | Yes | No |
| Column widths | Saved in the document | Per browser |
| Undo | The document’s own stack | The project-wide stack |
Its first three columns are always Name, Picture and Description, then every effective field of the definition — own, inherited and trait.
Read-only in the grid: AI fields, computed (formula) fields, and any field type with no inline
editor — boolean and color (interactive at rest instead), vector3 (edited in the row detail),
code, condition, commandCall and nodeRef.
Formulas here are per field, not per cell: one formula on the field applies to every item, and it is authored in the field’s Value Source setting.
Limits
| Limit | Value |
|---|---|
| Rows, columns, cell length | Nothing enforces one |
| Minimum column width | 80 px |
| Maximum auto-fit width | 600 px |
| Default column width | 160 px |
| Row heights | Short 28 · Medium 34 · Tall 56 |
| AI cells per request | 50 |
| AI prompt length | 4,000 characters |
| A saved document snapshot | ~25 MiB compressed |
| Creating or opening a spreadsheet | Pro plan and above |
The plan gate is Spreadsheet views are available on the Pro plan and above. Enforced in the browser; there is no server endpoint behind it.
What breaks
| Situation | What happens |
|---|---|
| A formula names a function that does not exist | #NAME? — see formulas |
| A formula’s target row or column is deleted | The stored text is rewritten to #REF! |
| A formula refers past the end of the grid | Blank, not an error — until a structural change writes #REF! into it |
| A cycle | #CYCLE! on the cells in the cycle only; the rest of the sheet still computes |
| A conditional-formatting or AI-model change | It is written to document metadata, which the undo manager does not track — Ctrl+Z will not reverse it |
| Every cell in an AI batch fails | Nothing is charged |