| Type | Coords | Special | Meta |
|---|---|---|---|
| grid | A1, keys r,c |
None | Free nest; no column formula map |
| table | Row 0 header; data 1…n; keys (r-1),c |
fieldAxis col (default) or row (fields as row labels, records as columns after transpose) |
colFormula / rowFormula, colStruct* / rowStruct*, validation, filter/sort |
| list | Value column; indexes 1…n | Numbered value list (indexKind unnamed) |
valueValid, filter/sort; convert ↔ table |
| dictionary | Col 0 Name, col 1 Value | Named fields — one record (indexKind named; same storage as list) |
Field menus on Name cells; convert ↔ table |
| pivot | Like table: row 0 headers; data 1…n | Computed from a source table | sourceId, rowFields / colFields / filterFields, values (agg), dateGroups (date row grouping: year / month), title; Pivot ribbon |
| form | Fill / Design view (not a grid) | Appends a record on Submit. when shows or hides a field from another field’s answer |
destId (table), ownsTable, fields (name, label, kind, options, required, when), draft, title |
| chart | SVG view (not a grid) | Computed from a table, list, pivot, or formula-result cell | sourceId or sourcePath (parent + r,c for FILTER/GROUPBY cells), kind bar/line/pie, labelField, values, title |
Headers, dictionary names, and list indexes are first-class reference names. Renaming them rewrites formulas — see Rename & references.
Insert from a grid selection
On a grid, select more than one cell (or whole rows from the gutter, or columns from the letter headers) and use Insert → Table, Dictionary, or Field. The selected values move into the new structure, which replaces the top-left cell of the selection. The other selected cells are cleared. A single cell, or a selection with no values, still inserts an empty structure on the active cell. Insert → Grid does not absorb the selection.
- Table — one record per selected row, one field per selected column. Headers are generated (
Column 1…, orField 1… when new tables default to fields-as-rows). Cell formats move with the values. - Field — values in reading order, including blanks inside the rectangle, numbered from 1. Stored as type
list. - Dictionary — two columns are Name and Value, one entry per row (duplicate names get a suffix). A two-row range that is wider or narrower than two columns uses the top row as names and the bottom row as values. Any other rectangle stores each cell as a value named
Field 1,Field 2, ….
Structure chrome vs data
Same rule on classic and transposed tables:
- Data cells (any range, including a full row or column of values) — Delete clears values. Copy/paste overwrites as a matrix. Never removes or inserts fields/records.
- Header row (field names or record numbers 1…n) — Delete removes that column. Header-only copy/paste inserts columns.
- Row gutter (row numbers, or field labels when transposed) — Delete removes that row/field. Gutter copy/paste inserts rows/fields (field names preserved when transposed).
When a table field holds nested tables, lists, or dictionaries, every record shares the same field schema: add or rename a field in one nested structure and siblings update. Field formulas stay per-subtable unless you lock formulas on that field.
Excel workbooks import as a dictionary of sheets (sheet name → grid, or table when the sheet qualifies). See Import.