Tables
Repeated rows of the same shape can be written with pipe-table syntax under a field name. Each | … | row becomes one record.
Authoring
The field's row type carries a @table("kind") decorator. The field declaration uses name: (colon, not =) and lists rows directly underneath.
@table("user")
type User {
name: utf8
age: u32
enabled: bool
}
@document
type Config {
users: list<User>
}
users:
| "alice" | 30 | true |
| "bob" | 25 | false |
| "cara" | 42 | true |
Why a table
A table is just a list<T> underneath — the pipe-row syntax is shorthand for writing many records compactly. The same data could be authored as block instances, but the table is denser and reads like a spreadsheet.
Cells are expressions
Each cell is an expression in the row type's field position. Strings, numbers, booleans, symbols — even computed values via let bindings — all work.