Skip to content

App: pages

Record pages: how one record is laid out, section by section. Every key here is stable (status). All parts.

import { fields, page, related } from 'tablewalk/app';
pages: {
opportunity: page('opportunity', [
fields(['name', 'stage', 'amount'], { presentation: 'summary' }),
related('Tasks', 'task', 'opportunity_id', { show: ['subject', 'status', 'due_on'] }),
]),
},

A page takes its resource and its sections, and optionally path, listTabs, aside: false (no default aside of the remaining fields), layout and realm. layout is the page’s archetype, how its regions are arranged: 'conversation' (one timeline, last in the main column, the record beside it), 'showcase' (a gallery first with a panel of 1 to 3 aside sections beside it, then the rest at full width) or 'article' (one column at a reading measure, no aside), or 'record', the record’s own main column and aside. Left out, the page is drawn in the one its sections make: a gallery first is a showcase, a timeline ending the main column with no list there a conversation, the record’s long text with its facts alone an article, anything else the record’s own (tablewalk check --defaults says which and why). A page’s layout names a shape from that fixed set, where a dashboard’s areas draws its own grid (dashboard areas). It is called by its resource’s noun, so page('issue', [...]) carries no label of its own. A page may also be a file under pages/. See Record pages.

Helper Says
header({ status?, facts?, primary?, destructive? }) The record’s title row; its buttons are the resource’s actions, primary filled and destructive last.
fields(show, { presentation? }) summary, facts, table or properties; a summary over a machine draws its stepper.
card(title, 'dealer_id', show), headline(figure, { was?, subfigure?, note?, links? }) The record a reference names, and a figure with its facts: sections of their own.
related(title, from, whose, opts) Rows pointing at the record: show, query, sort, limit, create (with its prefill), empty, totals (columns, or the rows’ rollups: ['total_amount', 'refunded']), rowActions: true (each row’s own verbs in a ⋯, so an order’s payment is voided from the order); actions: ['addBuyer'] (the record’s own verbs drawn in the list’s head instead of the record’s); create: false (no Add: where the reader may add a row, a list offers the child’s New form bound to the record); group: { by, show?, sort?, limit? } (a header for each record the rows share, one level deep, with limit then the rows to a group); presentation: 'gallery' or cards(…) with the list view’s keys.
current(title, from, whose, { query, sort, show }) The one current related row as a card: the active lease, the latest visit.
similar(title, from, { same, near? }) Rows like this one; near: { price: 0.25 } is ±25%.
metric, chart, breakdown with { whose } The dashboard helpers, narrowed to this record’s rows.
timeline(title, [stream(from, whose, at, show)]) Dated rows from up to four tables, merged.
history() The record’s own changes.
note(text, opts), embed(view, { whose }), custom(title, component, opts) Guidance, a list narrowed to this record, a custom component.

A fields section once took more forms. They are refused, and the refusal prints this table:

Was Is now
fields(…, { presentation: 'card' }) card(title, 'dealer_id', ['rating', 'city'])
fields(…, { presentation: 'headline' }) headline('price', { was, subfigure, note, links })
fields(…, { presentation: 'accordion' }) gone: a group of fields is always open
fields(…, { collapsed }) gone with the accordion
fields(…, { actions }) headline(figure, { links })
fields(…, { subfigure, was, note }) headline(figure, { subfigure, was, note })

Every section takes title, region ('aside' for the side panel), tab, width, hidden and when ('status = converted').

Key Type Status What it does
pages object Stable Record pages keyed by id, or one file per page under pages/ (its basename the key). Used in examples/apps/tick/app.ts.
Key Type Status What it does
pages.*.$schema string Stable
Key Type Status What it does
pages.*.aside Stable A page that declares no aside section gets one: the record’s remaining readable fields, as a property rail titled by the resource’s noun. false leaves it out. One of false.
Key Type Status What it does
pages.*.base string Stable The table a root record is chosen from. Every whose starts here.
Key Type Status What it does
pages.*.document object Stable The record on paper (document()): an invoice, a packing slip, a payslip, addressed under its record (/orders/12/invoice) and offered as a verb on it. Its sections are fields, related lists and notes; it has no path.
pages.*.document.description string Stable The sender’s lines under the letterhead’s logo and name: an address, a registration. Used in examples/apps/lintel/app.ts.
pages.*.document.label string Stable What it is, “Invoice”: the verb on the record and the sheet’s heading.
pages.*.document.number string Stable A field of the record whose value is the document’s number. Absent: the record’s own name. Used in examples/apps/lintel/resources.ts.
pages.*.document.size "a4" · "letter" Stable The sheet. Absent: the paper of the App’s locale, Letter in North America. One of a4, letter. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
pages.*.empty "hide" · "collapse" Stable What a related list that says nothing of its own does while it has no rows: hide leaves it out, collapse says it in one line with the other empty lists beside it. A list’s own empty wins. One of collapse, hide. Used in examples/apps/lintel/pages/maintenance_request.ts.
Key Type Status What it does
pages.*.layout "record" · "conversation" · "showcase" · "article" Stable The page’s archetype, the arrangement of its regions. Absent is the one its sections make, chosen when the App is read (tablewalk check –defaults says which and why): a gallery first is a showcase, a timeline ending the main column with no list there a conversation, the record’s long text with at most 12 facts and nothing else an article, anything else the record’s own. record: the record’s own written out (a main column, an aside a third of it beside), for a page that would be chosen as another. conversation: one timeline, last in the main column so its composer ends the thread, with the record’s cards beside it and any related list in the aside. showcase: the photos (a gallery, first) at two thirds with a panel of 1 to 3 aside sections beside them, then the rest at full width; on a phone the price follows the photos. article: one column at a reading measure, with no aside and no third-width sections. Not on a document or a tablewalk.json page. A page’s layout names a shape from this fixed set, where a dashboard’s areas draws its own grid (views.*[kind=dashboard].areas). One of article, conversation, record, showcase. Used in examples/apps/tick/app.ts.
Key Type Status What it does
pages.*.listTabs boolean Stable Draw each run of adjacent list sections (none with a width) as one tab strip. An App’s page is off unless true; a Workbench page is on unless false. Used in examples/apps/lintel/pages/lease.ts.
Key Type Status What it does
pages.*.path string Stable Its address after the App’s, when not its key: for a base no list view shows, or a second page over one.
Key Type Status What it does
pages.*.realm "tenant" · "platform" Stable Whose context the page serves: a tenant’s (the default) or the platform realm’s, which needs auth.tenancy.platform. Required when its base is platform-owned. One of platform, tenant.
Key Type Status What it does
pages.*.roles array Stable The roles that may open the page: a reader holding none is not served it, so a record of its base opens on another page and its own address answers as one that does not exist. Each must be declared in auth.roles.
Key Type Status What it does
pages.*.sections array Stable Absent means the record’s fields, full width — the least a page can be. One screen draws at most 24: per region, the sections in no tab and its largest tab’s.
Key Type Status What it does
pages.*.sections[][kind=*].hidden boolean Stable
pages.*.sections[][kind=*].offsetLeft "quarter" · "third" · "half" · "two-thirds" Stable One of <offset>.
pages.*.sections[][kind=*].offsetRight "quarter" · "third" · "half" · "two-thirds" Stable One of <offset>.
pages.*.sections[][kind=*].region "main" · "aside" Stable Record layout region. Absent means main; aside is the optional side panel. One of <region>. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=*].tab Stable One of <presentationCopy>.
pages.*.sections[][kind=*].title string | object Stable One of <presentationCopy>.
pages.*.sections[][kind=*].when string Stable Shown only when the root record matches this condition, in the query language: “status = converted”. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=*].width "full" · "half" · "third" · "two-thirds" Stable One of <width>. Used in examples/apps/tick/app.ts.
Key Type Status What it does
pages.*.sections[][kind=breakdown].about string Stable Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=breakdown].by string Stable What to group by: a column of from, or a dotted path ending in one. Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=breakdown].format "percent" · "number" · "money" · "duration" Stable How the figure is said, as a dashboard metric’s: percent (the figure is 0–100, said with %: “avg won_flag * 100” reads “53.8%”), number, money in the App’s currency, or duration (the figure is seconds, said as “10h 2m”). Absent, a measure of one column takes that column’s display rule. One of duration, money, number, percent. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=breakdown].from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=breakdown].kind Stable One of breakdown. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=breakdown].limit integer Stable Groups shown, biggest first.
pages.*.sections[][kind=breakdown].measure string Stable What each bar measures, the dashboard’s words: “count” (the default), “sum open_value”. Everything but a count names a column of from, or one of its rollups. Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=breakdown].query string Stable Extra narrowing, in the query language.
pages.*.sections[][kind=breakdown].segment string Stable One of the table’s segments (resources.<table>.segments), its conditions ANDed with query. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=breakdown].unit string Stable A word said after the figure (“of 5”, “days”). Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=breakdown].whose string Stable Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
pages.*.sections[][kind=card].kind Stable One of card. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=card].show array Stable The reference column first, then label paths through it (dealer_id, dealer_id.rating).
Key Type Status What it does
pages.*.sections[][kind=chart].about string Stable The record this section is about, when it is not the root: a reference column of the base, like “site_id”. whose then ends at that table. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=chart].by string Stable What to group by: a bucketed date (“month issued_on”) for a line, categories for a donut, two keys (“month issued_on, status”) for stacked bars. Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=chart].format "percent" · "number" · "money" · "duration" Stable How the figure is said, as a dashboard metric’s: percent (the figure is 0–100, said with %: “avg won_flag * 100” reads “53.8%”), number, money in the App’s currency, or duration (the figure is seconds, said as “10h 2m”). Absent, a measure of one column takes that column’s display rule. One of duration, money, number, percent. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=chart].from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=chart].height number Stable The drawing’s height in CSS pixels.
pages.*.sections[][kind=chart].kind Stable One of chart. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=chart].limit integer Stable A donut’s slices or a stacked chart’s bars, largest kept.
pages.*.sections[][kind=chart].measure string Stable The dashboard’s words: “count” (the default), “sum amount”, “avg total as mean”. Everything but a count names a column. Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=chart].query string Stable Extra narrowing, in the query language.
pages.*.sections[][kind=chart].segment string Stable One of the table’s segments (resources.<table>.segments), its conditions ANDed with query. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=chart].shape "line" · "bar" · "donut" · "stacked" Stable “line” (default), “bar” (one series, the current bar marked), “donut”, or “stacked” over a two-key by. One of bar, donut, line, stacked. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=chart].target number Stable A goal ruled across a line or stacked bars; not on a donut. Used in examples/apps/lintel/commands/leasing.ts.
pages.*.sections[][kind=chart].unit string Stable A word said after the figure (“of 5”, “days”). Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=chart].whose string Stable The from rows whose named column is this record: “customer_id”, or “invoice_id.customer_id” two references away. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
pages.*.sections[][kind=current].empty object Stable Guidance shown when no row is current. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=current].empty.action object Stable Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=current].empty.action.label string | object Stable One of &lt;presentationCopy>.
pages.*.sections[][kind=current].empty.action.to string Stable Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=current].empty.description string | object Stable A sentence under the title. One of &lt;presentationCopy>. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=current].empty.title string | object Stable One of &lt;presentationCopy>.
pages.*.sections[][kind=current].from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=current].kind Stable One of current. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=current].query string Stable Extra narrowing, in the query language.
pages.*.sections[][kind=current].show array Stable Columns of from to show — a path, or { column, label } to say it in the app’s words. Absent means a sensible default.
pages.*.sections[][kind=current].show[].column string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=current].show[].label string Stable
pages.*.sections[][kind=current].sort string Stable Written like the query bar: “due_on desc, name”.
pages.*.sections[][kind=current].whose string Stable Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
pages.*.sections[][kind=custom].component object Stable An author’s own React module, referenced by path — component(‘id’, { module }) — and placed through a declared kind: a custom section, a value renderer where a display rule stands, an input where a form draws a field, a list view’s rows (customList) or a free-form page (definePage, in pages/<path>.page.tsx). One of &lt;component>.
pages.*.sections[][kind=custom].figures object Stable Named aggregate reads, at most eight; the component receives each as figures.<name>: exact over every row the reader may see, a number with no by, a group for each value with one.
pages.*.sections[][kind=custom].figures.*.by string Stable Group the figure: a column, a path or a period and a date column (status, month opened_on). Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=custom].figures.*.from string Stable The resource it measures. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=custom].figures.*.limit integer Stable With a by, the most groups returned. Default 100.
pages.*.sections[][kind=custom].figures.*.measure string Stable count, or an aggregate and a column: sum amount, avg amount, min due_on, max due_on. Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=custom].figures.*.query string Stable The query language, without the leading table name.
pages.*.sections[][kind=custom].figures.*.whose string Stable The from rows whose named column is this record. Absent, the figure is over the resource’s own rows, narrowed by query. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=custom].kind Stable One of custom. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=custom].props object Stable The component’s declared props; each checked against its declaration, defaults filled.
pages.*.sections[][kind=custom].record array Stable The record’s own fields the component reads, label paths welcome.
pages.*.sections[][kind=custom].rows object Stable Named reads of rows, at most eight; the component receives each as rows.<name>. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=custom].rows.*.from string Stable The resource its rows come from. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=custom].rows.*.limit integer Stable
pages.*.sections[][kind=custom].rows.*.query string Stable The query language, without the leading table name.
pages.*.sections[][kind=custom].rows.*.show array Stable The columns the component reads, label paths welcome; each row carries exactly these.
pages.*.sections[][kind=custom].rows.*.sort string Stable Written like the query bar.
pages.*.sections[][kind=custom].rows.*.whose string Stable The from rows whose named column is this record. Absent, the rows are not tied to it. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
pages.*.sections[][kind=diagram].kind Stable One of diagram. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
pages.*.sections[][kind=fields].columns 1 · 2 · 3 Stable How many columns the group lays out in. Absent fits the width. One of 1, 2, 3. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=fields].editable Stable true edits the properties in place: a choice is a picker, the rest an input, written through the resource’s write grant or, where the reader has none for a column, through an action that sets just that column. The server judges every write as it always does; a reader who may do neither sees the values. For a summary, an accordion or a property rail. One of true. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=fields].kind Stable One of fields. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=fields].names Stable false keeps a reference’s bare id. Absent, an App shows the record it names; the Workbench always keeps ids. One of false. Used in examples/apps/lintel/policy.ts.
pages.*.sections[][kind=fields].presentation "summary" · "facts" · "table" · "properties" Stable Default: properties in the aside, summary in the main region (a call that says the default is told so by tablewalk check). summary: compact properties. facts: the values alone in one line, a dot between. table: a sheet of caption and value rows in columns columns, empty values left out. properties: a property rail, caption beside value with a hairline between rows, every field kept and editable in place where the record may change. A box for another record is kind card, a figure with buttons kind headline; the record’s head is kind header. One of facts, properties, summary, table. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=fields].show array Stable The fields to show, in order — a column, or a dotted path like “account_id.name”. Absent means all of them.
Key Type Status What it does
pages.*.sections[][kind=flows].kind Stable One of flows. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
pages.*.sections[][kind=header].actions array Stable The verbs the head draws, by id and in this order: [‘resolve’, ‘reassign’]. The record’s other verbs go into More; they stay granted and reachable from the palette and useCommand. Absent, the head draws up to three and folds the rest. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=header].destructive array Stable Action ids drawn last and quiet: [‘withdraw’]. Update actions that confirm, or set a value the display tones call bad, are destructive without being named. Used in examples/apps/lintel/pages/lease.ts.
pages.*.sections[][kind=header].facts array Stable The facts line: columns or one-hop label paths, each value dressed by its display rule; { column, after } says a word after the value (“3 beds”), agreeing with a count, and { column, before } a word before it (“Born Apr 24, 2017”). Used in examples/apps/lintel/pages/lease.ts.
pages.*.sections[][kind=header].facts[].after string | object Stable
pages.*.sections[][kind=header].facts[].after.many string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=header].facts[].after.one string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=header].facts[].before string Stable
pages.*.sections[][kind=header].facts[].column string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=header].kind Stable One of header. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=header].primary string Stable The filled action, by its id in the resource’s actions (‘renew’). Otherwise the first action that is not destructive is filled; a record whose only verbs are destructive gets none. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=header].status string Stable One of the record’s own columns, its display tone drawn as a chip beside the name.
Key Type Status What it does
pages.*.sections[][kind=headline].kind Stable One of headline. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=headline].links array Stable One or two calls to action, each opening one of the App’s views by key. Used in examples/apps/lintel/pages/unit.ts.
pages.*.sections[][kind=headline].links[].defaults object Stable A public form’s inputs filled with your words: form input → text of at most 500 characters. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=headline].links[].intent "primary" · "secondary" Stable One of primary, secondary.
pages.*.sections[][kind=headline].links[].label string Stable
pages.*.sections[][kind=headline].links[].open Stable Draw the public form over this record instead of opening its page. The address still opens the form on its own. One of modal. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=headline].links[].prefill object Stable A public form’s inputs filled from this record: form input → field path. Where the form starts, never what it sends. Used in examples/apps/lintel/pages/unit.ts.
pages.*.sections[][kind=headline].links[].to object Stable One of &lt;appTarget>. Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=headline].note string Stable Small print under the links: what the figures assume. Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=headline].show array Stable The figure first, then the facts.
pages.*.sections[][kind=headline].subfigure string Stable A headline’s second figure, under the first and smaller: an estimate, a unit price. Used in examples/apps/lintel/pages/unit.ts.
pages.*.sections[][kind=headline].was string Stable A headline’s earlier value of its figure, a number or money column: struck through beside the figure when it has one above it (a was-price)..
Key Type Status What it does
pages.*.sections[][kind=history].kind Stable One of history. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=history].limit integer Stable Writes shown before “Show earlier changes”. Default 20.
Key Type Status What it does
pages.*.sections[][kind=list].actions array Stable The record’s own verbs that add to this list, by id, drawn in the list’s head and not the record’s: [‘addBuyer’]. Each is offered as the record’s head offers it: granted, and while its condition holds. With actions and no create, the list draws no Add of its own. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=list].create string | object Stable One of false. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].create.defaults object Stable The values the new row starts with, over the child resource’s form defaults: a literal, or the constant today, now or me ({ “auto”: “today” } in JSON). Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=list].create.defaults.*.auto "today" · "now" · "me" Stable One of me, now, today.
pages.*.sections[][kind=list].create.label string Stable
pages.*.sections[][kind=list].create.prefill object Stable Columns filled from the page’s record: the new row’s column to the record’s column ({ patient_id: ‘patient_id’ }), as a headline action’s prefill maps a form’s input to the record’s field. Used in examples/apps/lintel/pages/unit.ts.
pages.*.sections[][kind=list].create.show array Stable
pages.*.sections[][kind=list].empty object Stable Guidance for an empty related list, or hide (leave it out while it has no rows) or collapse (say so in one line with the other empty lists). A list that offers an Add collapses rather than hides, and a tab keeps at least one list. One of collapse, hide. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=list].empty.action object Stable Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].empty.action.label string | object Stable One of &lt;presentationCopy>.
pages.*.sections[][kind=list].empty.action.to string Stable Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=list].empty.description string | object Stable A sentence under the title. One of &lt;presentationCopy>. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].empty.title string | object Stable One of &lt;presentationCopy>.
pages.*.sections[][kind=list].from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].group object Stable The rows under a header for each record they share, one level deep. limit then counts the rows to a group (at most 50) and group.limit the groups to a page. Tables only: not with a presentation, same or rowActions. Used in examples/apps/lintel/pages/resident.ts.
pages.*.sections[][kind=list].group.by string Stable The column, or the path up references to one, the rows are grouped under. A reference makes each group that record: its name, linked to its page. A plain column makes each group its value. It cannot end at the record the page is on. Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=list].group.limit integer Stable Groups to a page. Default 5.
pages.*.sections[][kind=list].group.show array Stable Columns of the grouped record, said after its name in the header. Only where by ends at a reference.
pages.*.sections[][kind=list].group.sort string Stable The groups’ order, on one column of the grouped record: “created_on desc”. Absent, the largest group first.
pages.*.sections[][kind=list].kind Stable One of list. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=list].limit integer Stable Rows to a page; with group, the rows to a group (at most 50).
pages.*.sections[][kind=list].near object Stable Number columns kept within ± this fraction of the record’s value (0.25 is ±25%); the first is also the order, closest first.
pages.*.sections[][kind=list].presentation object Stable “gallery”: a related list over a resource whose rows are image files, drawn as a lead photo, thumbnails and a lightbox. A cards object: the rows as cards, in the list view’s cards grammar. The one current row as a card is a section of its own, kind current. One of gallery. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].badge string Stable Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].presentation[kind=cards].description string Stable A text column said under the title at the card’s full width, without a caption, clamped to three lines. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].facts array Stable Used in examples/apps/lintel/pages/lease.ts.
pages.*.sections[][kind=list].presentation[kind=cards].facts[].column string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].facts[].label string | object Stable
pages.*.sections[][kind=list].presentation[kind=cards].facts[].label.many string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].facts[].label.one string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].facts[].position "before" · "after" Stable Where the word stands: after the value (the default) or before it. One of after, before. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].footer array Stable Up to four values along the card’s foot under a hairline, written as facts are: a catalog item’s price and how long it takes. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].footer[].column string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].footer[].label string | object Stable
pages.*.sections[][kind=list].presentation[kind=cards].footer[].label.many string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].footer[].label.one string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].footer[].position "before" · "after" Stable Where the word stands: after the value (the default) or before it. One of after, before. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].icon string Stable A column whose display rule maps its values to icons: the card wears its value’s icon before the title. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].image string | object Stable Used in examples/apps/lintel/landing.ts.
pages.*.sections[][kind=list].presentation[kind=cards].image.about string Stable A reference column of the card’s row: the files are the record it names. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].presentation[kind=cards].image.from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].presentation[kind=cards].image.sort string Stable
pages.*.sections[][kind=list].presentation[kind=cards].image.whose string Stable Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=list].presentation[kind=cards].kind Stable One of cards. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=list].presentation[kind=cards].media "cover" · "avatar" · "icon" Stable How the image is framed. Omit or use cover for the existing picture; avatar makes it a circular portrait and falls back to initials from primary. One of avatar, cover, icon.
pages.*.sections[][kind=list].presentation[kind=cards].primary string Stable Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].presentation[kind=cards].properties array Stable Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].presentation[kind=cards].value string Stable Used in examples/apps/lintel/commands/ledger.ts.
pages.*.sections[][kind=list].query string Stable Extra narrowing, in the query language.
pages.*.sections[][kind=list].rowActions boolean Stable true puts a ⋯ menu at the end of each row with that row’s own actions and machine verbs, as its page offers them. Not with a presentation. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].same array Stable Instead of whose, rows that share a key with the record: columns a listed row shares with the page’s own record, each a column of both tables; over the page’s own table the record itself is left out. A record with no value there lists nothing. Used in examples/apps/lintel/pages/unit.ts.
pages.*.sections[][kind=list].segment string Stable One of the table’s segments (resources.<table>.segments), its conditions ANDed with query. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=list].show array Stable Columns of from to show — a path, or { column, label } to say it in the app’s words. Absent means a sensible default.
pages.*.sections[][kind=list].show[].column string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=list].show[].label string Stable
pages.*.sections[][kind=list].sizing "fit" · "scroll" Stable Fit available width (default), or preserve content widths with horizontal scrolling. One of fit, scroll.
pages.*.sections[][kind=list].sort string Stable Written like the query bar: “due_on desc, name”.
pages.*.sections[][kind=list].totals array Stable Numeric columns, rollups or computed numbers summed in one ruled footer row, over every row that points at the record through its path. No query or same, no presentation. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=list].whose string Stable Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
pages.*.sections[][kind=metric].about string Stable The record this section is about, when it is not the root: a reference column of the base, like “site_id”. whose then ends at that table. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=metric].format "percent" · "number" · "money" · "duration" Stable How the figure is said, as a dashboard metric’s: percent (the figure is 0–100, said with %: “avg won_flag * 100” reads “53.8%”), number, money in the App’s currency, or duration (the figure is seconds, said as “10h 2m”). Absent, a measure of one column takes that column’s display rule. One of duration, money, number, percent. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=metric].from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=metric].kind Stable One of metric. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=metric].measure string Stable The dashboard’s words: “count” (the default), “sum amount”, “avg total as mean”. Everything but a count names a column. Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=metric].query string Stable Extra narrowing, in the query language.
pages.*.sections[][kind=metric].segment string Stable One of the table’s segments (resources.<table>.segments), its conditions ANDed with query. Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=metric].unit string Stable A word said after the figure (“of 5”, “days”). Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=metric].whose string Stable The from rows whose named column is this record: “customer_id”, or “invoice_id.customer_id” two references away. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
pages.*.sections[][kind=note].action object Stable A local room or checked cross-App destination. An App page only. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=note].action.label string Stable
pages.*.sections[][kind=note].action.to string Stable One of &lt;appTarget>. Used in examples/apps/lintel/dashboards.ts.
pages.*.sections[][kind=note].icon "house" · "tray" · "list" · "list-checks" · "kanban" · "table" · "calendar" · "calendar-check" · "clock" · "chart-bar" · "chart-line" · "chart-pie" · "gauge" · "target" · "flag" · "user" · "users" · "user-circle" · "address-book" · "handshake" · "buildings" · "storefront" · "briefcase" · "package" · "truck" · "car" · "shopping-cart" · "receipt" · "currency-dollar" · "credit-card" · "wallet" · "bank" · "file" · "file-text" · "folder" · "clipboard-text" · "note" · "archive" · "tag" · "ticket" · "star" · "bookmark-simple" · "bell" · "envelope" · "chat-circle" · "phone" · "headset" · "megaphone" · "globe" · "map-pin" · "magnifying-glass" · "gear" · "sliders" · "wrench" · "bug" · "shield-check" · "lock" · "key" · "database" · "stack" · "lightning" · "check-circle" · "warning" · "info" · "cell-signal-low" · "cell-signal-medium" · "cell-signal-high" · "cell-signal-full" · "fire" · "hourglass" · "circle-dashed" · "x-circle" · "plus-circle" · "pencil-simple" · "paper-plane-tilt" · "arrows-left-right" · "arrow-circle-down" · "arrow-circle-up" · "laptop" · "monitor" · "device-mobile" · "printer" · "stethoscope" · "heartbeat" · "heart" · "pill" · "syringe" · "first-aid-kit" · "thermometer" · "flask" · "test-tube" · "microscope" · "bed" · "hospital" · "ambulance" · "tooth" · "eyeglasses" · "wheelchair" · "baby" · "dna" · "brain" · "bandaids" · "hand-heart" · "graduation-cap" · "book-open" · "student" · "chalkboard-teacher" · "factory" · "warehouse" · "house-line" · "plant" · "leaf" · "sun" · "cloud" · "drop" · "airplane" · "bicycle" · "bus" · "train" · "boat" · "hammer" · "toolbox" · "plug" · "lightbulb" · "cube" · "camera" · "image" · "trophy" · "gift" · "coffee" · "fork-knife" · "shopping-bag" · "basket" · "barcode" · "qr-code" · "scales" · "gavel" · "certificate" · "identification-card" · "fingerprint" · "eye" · "link" · "paperclip" · "scissors" · "palette" · "code" · "terminal" · "users-three" · "user-plus" Stable A curated mark above the words. One of &lt;appIcon>. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=note].kind Stable One of note. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=note].text string Stable The words. Plain text; blank lines separate paragraphs.
pages.*.sections[][kind=note].variant "quiet" · "callout" Stable quiet: small print, no mark. callout: a ground of its own, for what must be seen. Absent: the plain note. One of callout, quiet.
Key Type Status What it does
pages.*.sections[][kind=timeline].compact object Stable Rows drawn as one line by one of their columns’ value: { kind: [‘system’] }.
pages.*.sections[][kind=timeline].composer object Stable A conversation’s pinned composer under the rows: a Reply / Internal note toggle running these commands, the text typed becoming the command’s first text input. Not with create. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=timeline].composer.note string Stable The command an Internal note runs; absent, the composer is a reply box alone. Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=timeline].composer.reply string Stable The command a Reply runs on this record, offered to the reader by an action of the page’s resource. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=timeline].composer.templates object Stable Canned replies: a Templates menu beside Send; picking one fills the box and sends nothing.
pages.*.sections[][kind=timeline].composer.templates.from string Stable The resource whose rows are the canned replies. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=timeline].composer.templates.label string Stable The column a reader picks a reply by.
pages.*.sections[][kind=timeline].composer.templates.query string Stable Which rows are offered, in the query language: ‘active = true’ (me is the reader). Absent, every row the reader may read.
pages.*.sections[][kind=timeline].composer.templates.text string Stable The column whose words fill the box.
pages.*.sections[][kind=timeline].create string | object Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=timeline].create.defaults object Stable The values the new row starts with, over the child resource’s form defaults: a literal, or the constant today, now or me ({ “auto”: “today” } in JSON). Used in examples/apps/tick/app.ts.
pages.*.sections[][kind=timeline].create.defaults.*.auto "today" · "now" · "me" Stable One of me, now, today.
pages.*.sections[][kind=timeline].create.label string Stable
pages.*.sections[][kind=timeline].create.show array Stable
pages.*.sections[][kind=timeline].kind Stable One of timeline. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=timeline].limit integer Stable Per stream, before the merge.
pages.*.sections[][kind=timeline].newest "first" · "last" Stable Where the newest row sits. ‘last’ reads the section as a conversation: oldest first, the newest at the foot, scrolled to on arrival. Absent or ‘first’, newest first. One of first, last. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=timeline].side string Stable The other party’s rows, drawn against the far edge on a soft surface: a condition over each stream’s rows in the query language, where record.<column> is the page’s record (‘author_id = record.caller_id’). A stream whose table lacks a column it names is never on the far side; a stream’s own side replaces it.
pages.*.sections[][kind=timeline].streams array Stable Dated child rows from several tables, merged newest-first into one stream.
pages.*.sections[][kind=timeline].streams[].about string Stable A reference column of the page’s table: the stream is about the row it names, and whose leads there. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=timeline].streams[].at string Stable The date column the stream is ordered and merged by. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=timeline].streams[].author string Stable Who wrote each row: a column, or a dotted path, said beside its date. Used in examples/apps/lintel/commands/maintenance.ts.
pages.*.sections[][kind=timeline].streams[].compact Stable Every row of this stream drawn as one line, in place of the timeline’s compact rules. One of true.
pages.*.sections[][kind=timeline].streams[].detail string Stable A quieter second word — a kind, an author. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=timeline].streams[].from string Stable Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=timeline].streams[].query string Stable Extra narrowing, in the query language.
pages.*.sections[][kind=timeline].streams[].show string Stable The line each row becomes: a column, or a dotted path.
pages.*.sections[][kind=timeline].streams[].side string Stable This stream’s own far side, in place of the timeline’s: a condition over its rows (‘person_id = record.caller_id’).
pages.*.sections[][kind=timeline].streams[].tone "good" · "warn" · "bad" · "info" · "neutral" Stable Every row of this stream on a quiet ground in this tone, in place of the timeline’s tone rules. One of bad, good, info, neutral, warn. Used in examples/apps/lintel/pages/maintenance_request.ts.
pages.*.sections[][kind=timeline].streams[].whose string Stable The path from from back to this record. Used in examples/apps/lintel/resources.ts.
pages.*.sections[][kind=timeline].tone object Stable A row’s quiet ground by one of its columns’ value: { kind: { internal: ‘warn’ } }. Read on each stream whose table has the column and that says no tone of its own. Used in examples/apps/lintel/pages/maintenance_request.ts.
Key Type Status What it does
pages.*.sections[][kind=view].about string Stable The record this section is about, when it is not the root: a reference column of the base, like “site_id”. whose then ends at that table. Used in examples/apps/lintel/views.ts.
pages.*.sections[][kind=view].kind Stable One of view. Used in examples/apps/lintel/blueprint.ts.
pages.*.sections[][kind=view].limit integer Stable Rows per page.
pages.*.sections[][kind=view].view string Stable A list view’s key. Used in examples/apps/lintel/app.ts.
pages.*.sections[][kind=view].whose string Stable The view’s rows whose named column is this record. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
&lt;appTarget>.app string Stable
Key Type Status What it does
&lt;appTarget>.key object Stable Used in examples/apps/lintel/jobs.ts.
&lt;appTarget>.key.*.column string Stable Used in examples/apps/lintel/app.ts.
Key Type Status What it does
&lt;appTarget>.kind "home" · "view" · "record" Stable One of home, record, view. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
&lt;appTarget>.resource string Stable
Key Type Status What it does
&lt;appTarget>.tenant object Stable
&lt;appTarget>.tenant.kind "choose" · "platform" Stable One of choose, platform. Used in examples/apps/lintel/blueprint.ts.

page file: <appTarget>.tenant[kind=tenant]

Section titled “page file: <appTarget>.tenant[kind=tenant]”
Key Type Status What it does
&lt;appTarget>.tenant[kind=tenant].id string | integer | object Stable
&lt;appTarget>.tenant[kind=tenant].id.column string Stable Used in examples/apps/lintel/app.ts.
&lt;appTarget>.tenant[kind=tenant].kind Stable One of tenant. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
&lt;appTarget>.view string Stable Used in examples/apps/lintel/app.ts.
Key Type Status What it does
&lt;appTarget>[kind=home].key Stable Used in examples/apps/lintel/jobs.ts.
Key Type Status What it does
&lt;appTarget>[kind=home].kind Stable One of home. Used in examples/apps/lintel/blueprint.ts.

page file: <appTarget>[kind=home].resource

Section titled “page file: <appTarget>[kind=home].resource”
Key Type Status What it does
&lt;appTarget>[kind=home].resource Stable
Key Type Status What it does
&lt;appTarget>[kind=home].view Stable Used in examples/apps/lintel/app.ts.
Key Type Status What it does
&lt;appTarget>[kind=record].kind Stable One of record. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
&lt;appTarget>[kind=record].view Stable Used in examples/apps/lintel/app.ts.
Key Type Status What it does
&lt;appTarget>[kind=view].key Stable Used in examples/apps/lintel/jobs.ts.
Key Type Status What it does
&lt;appTarget>[kind=view].kind Stable One of view. Used in examples/apps/lintel/blueprint.ts.

page file: <appTarget>[kind=view].resource

Section titled “page file: <appTarget>[kind=view].resource”
Key Type Status What it does
&lt;appTarget>[kind=view].resource Stable
Key Type Status What it does
&lt;component>.id string Stable
Key Type Status What it does
&lt;component>.kind "section" · "value" · "input" · "list" · "page" Stable section (default): a custom section. value: a value renderer. input: a form field’s control. list: a list view’s rows. A free-form page is a file of its own (pages/<path>.page.tsx, definePage), not a component. One of input, list, page, section, value. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
&lt;component>.module string Stable A path inside the App directory, written from it: ‘./widgets/Thing.tsx’.
Key Type Status What it does
&lt;component>.props object Stable
&lt;component>.props.*[type=boolean].default boolean Stable
&lt;component>.props.*[type=boolean].type Stable One of boolean. Used in examples/apps/lintel/blueprint.ts.
&lt;component>.props.*[type=choice].default string Stable
&lt;component>.props.*[type=choice].options array Stable
&lt;component>.props.*[type=choice].type Stable One of choice. Used in examples/apps/lintel/blueprint.ts.
&lt;component>.props.*[type=number].default number Stable
&lt;component>.props.*[type=number].max number Stable Used in examples/apps/lintel/commands/ledger.ts.
&lt;component>.props.*[type=number].min number Stable Used in examples/apps/lintel/commands/ledger.ts.
&lt;component>.props.*[type=number].type Stable One of number. Used in examples/apps/lintel/blueprint.ts.
&lt;component>.props.*[type=text].default string Stable
&lt;component>.props.*[type=text].max integer Stable Used in examples/apps/lintel/commands/ledger.ts.
&lt;component>.props.*[type=text].type Stable One of text. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
&lt;presentationCopy>.args object Stable Each ICU argument’s column path: { “title”: “thread_id.title” }.
Key Type Status What it does
&lt;presentationCopy>.message string Stable Used in examples/apps/lintel/commands/leasing.ts.
Key Type Status What it does
page Stable The same keys as pages.*.