Data tables
Field types overview
12+ types: text, number, date, select, attachment, AI, doc-link, and more.
Primitive types
Primitive types map to what Notion or Airtable users already know. No formulas or prompts required — they are just storage slots with the right UI affordance.
text— single line (titles, IDs)rich_text— multi-line Markdown with bold, links, codenumber— with optional unit (USD, kg, %) and precisionselect/multi_select— colored tag enumsdate— date + optional time, optional timezonecheckbox— boolean, rendered as a squareurl/email/phone— text with semantic validation and click behaviorattachment— files stored under<vault>/.kition/attachments/
Relational types
These three types turn isolated tables into a real database. relation stores a pointer to a row in another table; rollup follows that pointer and aggregates a field from the far side; doc_link pins a row to a .md file so navigation is bidirectional.
relation— link to one or many rows in another table; row cards render inlinerollup— aggregate a field across a relation (sum,count,avg,min,max,concat)doc_link— point to a.mdin the vault; backlinks appear automatically on the doc side
Computed types
Computed fields do not store data — they evaluate per row on read. formula is deterministic; ai_field is not. The key trade-off is debuggability and cost: a broken formula is obvious; a broken AI field requires reading the prompt to understand why.
formula— Excel-style expressions, syntax belowai_field— agent-computed via prompt (see "Setting up an AI field")created_at/updated_at— system-maintained, read-onlycreated_by/updated_by— populated in team vaults
// Days since a date column was set
days_since({last_contact})
// Conditional priority based on number + checkbox
if({score} > 8 && {is_blocker}, "P0", if({score} > 5, "P1", "P2"))
// Concat across rollup
concat(rollup({Tasks}, "title", "list"), ", ")How to pick a type
- Prefer
selectovertextwhenever the values are bounded — filtering and reports get more reliable - Use
rich_textsparingly — tables should feel database-like, not document-like; link out to a doc withdoc_linkfor long content - For tables over 1000 rows, avoid
ai_fieldon the hot path — switch to manual mode and only refresh recent batches relationbeats stuffing foreign IDs into atextcolumn — you get a real reference, not a string