Skip to content

App: resources

What each table is called, which fields it shows, and the actions, forms, access and rules that belong to it. Preview keys work and may change in any release (status); the rest are stable. All parts.

resources: {
opportunity: {
access: 'write',
display: { amount: { format: 'money' }, stage: { tone: { closed_won: 'good', closed_lost: 'bad' } } },
form: { show: ['name', 'account_id', 'amount', 'close_date'], defaults: { stage: 'prospecting' } },
actions: { markWon: action('Mark won', { set: { stage: 'closed_won' }, when: 'stage = negotiation' }) },
computed: { is_stale: computed.boolean('close_date < today and stage != closed_won') },
},
account: {},
},

Every table a view, dashboard or page reads needs a block, and {} is enough: an App serves only its declared resources, and every declared resource reads. Only access: 'write' writes, and the connection’s "writable": true still applies (Resources and fields). A resource’s name is bare for the default source and source.name for another. Every yes/no key takes true or false, and false means what leaving it out means.

account: {
rollups: {
open_deals: count('opportunity', { query: 'stage != closed_won and stage != closed_lost' }),
open_pipeline: sum('opportunity', 'amount', { query: 'stage != closed_won and stage != closed_lost' }),
},
},

count, sum, min and max read the rows that point at the record, and latest reads a column of the newest of them: an order’s financial_status: latest('payment', 'status') is its payment’s own word, read where the payment writes it, so no command keeps a copy on the order in step (newest by key, or by by, a date). A rollup reads like a column in show, sorts, tabs, conditions, a command’s when, cards and measures, and through a reference (account_id.open_deals). It reaches two hops (whose: 'task_id.project_id'), latest included: a customer’s last_service: latest('work_order', 'status', { whose: 'bike_id.customer_id' }) is the newest of all their bikes’ orders. It is computed in the same statement under the grants and row policy of every table it walks, and is never written. Not on API sources. Its query may follow the rows’ references, so a product’s units sold leave out cancelled orders without a status copied onto each line: sum('order_line', 'quantity', { whose: 'variant_id.product_id', query: 'sales_order_id.status != cancelled' }).

work_order: {
segments: {
open: 'status is open',
overdue: { query: 'open and due_on < today', label: 'Late' },
},
},

A segment names a query once. Its name is a word of the query language (overdue and mine), a tab names it (tabs: ['open', { segment: 'overdue', sort: 'due_on' }]), a section takes it as its source (metric('Late', 'work_order.overdue'), related(..., { segment: 'open' })), and a rollup counts it (count('work_order', { segment: 'open' })). A tab’s label and its address (?tab=overdue) are the segment’s. A segment may name another, never in a loop, and a name a column, rollup or state already holds is refused. It only ever narrows: a reader who may not read a column it names is served no tab, section or word for it. The App API and MCP list it read-only as ?segment=overdue. check --design lists each segment with its cost, and warns where one query is written in several places (repeated-query).

work_order_part: {
consumes: { column: 'part_id.on_hand', by: 'quantity', refuse: 'Only {part_id.on_hand} of {part_id.name} left' },
},

A line that uses stock moves the balance on every write, through every door: a new line takes by (one, without it), a removed line gives it back, an edit moves the difference, and a line moved to another part gives back to one and takes from the other. A take past zero refuses the whole write as consumes_refused, with refuse filled from the part as it stands and only with what the reader may read; floor: false allows a backorder. Writing the line is the whole grant: no role needs to write on_hand. A stored balance that must refuse an oversell is consumes; a figure that is only read is a rollup. check warns when a command also writes the balance (consumes-written).

product: { defined: { specs: { from: 'attribute', per: 'category_id' } } },
attribute: { access: 'write', delete: true },

A JSON column whose keys are rows people keep: each row of from has key, label and type (text, textarea, number, money, date, datetime, bool, choice, choices), and may have options (one per line), required, help and position. With per, a record gets the rows whose per equals its own and those whose per is empty. The fields are drawn on record pages and forms as the record’s own, judged at the server in the write’s transaction (a refusal names specs.capacity), read in the tenant’s scope, asked by a list as specs.capacity, and offered one facet each where a view’s filters names the column. PostgreSQL and SQLite.

task: {
computed: {
is_overdue: computed.boolean('due_on < today and not completed'),
days_open: computed.number('today - opened_on'),
renews_on: computed.date('ends_on + term months'),
},
},

An expression in the query language’s words: columns and paths, rollups, numbers, quoted text, today, now, me, comparisons, and, or, not, is empty, + - * / (a division by zero has no value), date spans, and five functions: coalesce(a, b, …) (the first with a value), round(x) or round(x, 2) (a half away from zero), abs(x), and min(a, b, …) and max(a, b, …) of numbers or dates, which have no value where one of theirs has none (computed.number('max(owed - paid, 0)')). It is written into the statement, so it shows, sorts, filters and tones like a column, and a rollup sums it (sum('task', 'overrun')) or a dashboard window reads a computed date (over: 'renews_on') when it reads only its row’s own columns; it is never written, and fields.write, form.show and an action’s set refuse it. A role is served it only where every column it reads is readable to that role. A fixed action’s set takes the same kind of expression for a stamp (computed.date('today + 14 days')); anything heavier is a command or a database view.

import { union } from 'tablewalk/app';
unions: [
union('my_requests', [
{ from: 'incident', as: { title: 'short_description', opened: 'opened_at' } },
{ from: 'requested_item', as: { title: 'name', opened: 'created_at' } },
]),
],

One read-only list over tables that share a shape. A list view and useRows name it as they name a table, in one order and one page; each row also says from and key, and opens its own record. Each branch is read under the reader’s own grants and row policy, so a branch they cannot read is none of their rows. A union lists; it has no record page, breakdown or summary.

purchase_order: { recordLabel: 'PO-{id}' },
po_line: { recordLabel: '{product_id.name} × {qty}' },

recordLabel is a column, a label path or a template in braces, computed in SQL so lists, pickers and breadcrumbs sort and search the same name.

Every condition (a list’s query, a tab, a section’s query, a when, a validation’s must) is the query language. me is the signed-in person: their email beside a text column, or their row beside a reference once auth.me says where people live. me.<table>.<column> is their memberships: team_id in (me.team_member.team_id) is the rows of the teams they are in, read on each request through their own rows (the one column of team_member that points at people says whose; at most 1,000). Where nobody is signed in to be it (the database browser, MCP, the App API, a rollup), me is refused rather than read as the word; quote it ("me") to mean the text. A path walks references (product_id.unit_cost > 50). Another column is compared by naming it on the right: a path always, a bare word beside a number, date or flag (shipped_on > promised_on); beside text a bare word is a value.

validation: [
{ must: 'close_date >= created_on', message: 'A deal cannot close before it was created.' },
{ must: 'probability = 100', when: 'stage = closed_won', message: 'A won deal is at 100% probability.' },
],

A rule is a condition the record must meet on every write, optionally under when, which compares the record’s own columns. At most 128 rules per resource.

Key Type Status What it does
resources object Stable One block per logical resource, keyed bare for the default source or source.name for a secondary one. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.access "write" Stable The App’s ceiling for this resource. An App serves only its declared resources, and a declared one reads; say ‘write’ for one the App writes. With auth.roles, roles grant within the ceilings. One of write. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.actions object Stable What may be done to one record, keyed by its id and drawn in the order written: defined once and offered wherever the records appear — on record pages, in a queue (the bulk ones, for a selection), on a board (updates that set exactly its by). A header’s primary and destructive, a queue’s actions and a role’s actions name one by its id. Used in examples/apps/tick/app.ts.
resources.*.actions.*.bulk boolean Stable May run on a selection, App-wide: a queue offers it for its selection. A fixed update is one ordinary write per selected record, with results per record; a command must declare targets: many and runs the whole selection as one atomic request.
resources.*.actions.*.command string Stable A command, by its name in the App’s commands module (defineCommands). The server fills in its input, target and version from the registration; tablewalk-commands.d.ts types the names. Used in examples/apps/lintel/app.ts.
resources.*.actions.*.confirm boolean Stable Ask before writing. A command that asks nothing runs on one click unless it confirms; a command with inputs asks them in its form, which is its confirmation, and is refused one. Used in examples/apps/lintel/resources.ts.
resources.*.actions.*.header boolean Stable false keeps the button out of the record’s action bar and its menu, for a verb the App runs from its own place: a custom component through useCommand, a queue’s selection, a board’s lane. Still granted, judged and run as before; a record header that names it is refused. Default true. Used in examples/apps/lintel/blueprint.ts.
resources.*.actions.*.inputs object Stable A command action’s input drawn by the App’s own input component (kind ‘input’), in its form. An input in a group is named by its path (trade.vin), and in a repeating group stands in every row.
resources.*.actions.*.inputs.*.kind Stable One of input. Used in examples/apps/lintel/blueprint.ts.
resources.*.actions.*.label string Stable
resources.*.actions.*.reason string Stable A column this action asks a reason for and writes with its set. Required when the action runs; not with bulk or a command. Used in examples/apps/lintel/resources.ts.
resources.*.actions.*.set object Stable Column → value the action writes: a literal, or a value the server works out in the write — { “auto”: “now” } (the constant now: a DATE gets the day in ui.timezone, else UTC; a TIMESTAMP or DATETIME with no zone the wall clock in ui.timezone (UTC without one), one with a zone (timestamptz) the UTC instant), { “auto”: “today” } (the App’s day, into a DATE), { “auto”: “me” } (the constant me: the signed-in account’s email, into a text column of an App with auth), or a constant expression in the computed-column grammar, { “type”: “date”, “value”: “today + 14 days” } (computed.date(‘today + 14 days’)), which reads no column and fits its column’s type. The text “now”, “today” or “me”, and text starting with “=”, is refused, since it would read as one of those. Used in examples/apps/tick/app.ts.
resources.*.actions.*.set.*.auto "today" · "now" · "me" Stable One of me, now, today.
resources.*.actions.*.set.*.type "boolean" · "number" · "date" Stable One of boolean, date, number. Used in examples/apps/lintel/blueprint.ts.
resources.*.actions.*.set.*.value string Stable A constant expression: numbers, true, false, today, now, me, comparisons, and, or, not, + - * /, and date spans (today + 14 days, now + 1 week). No column. Used in examples/apps/lintel/commands/ledger.ts.
resources.*.actions.*.when string Stable Shown only when the record matches, in the query language. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.address string Stable A natural key: the column whose value is the record’s address instead of its primary key. tablewalk check refuses one the catalog does not prove NOT NULL and unique; in a tenant App, unique within the tenant (UNIQUE (tenant_id, number)) is enough.
Key Type Status What it does
resources.*.at object Stable Timers at an instant the record keeps: a date or timestamp column, and the command run through the jobs once its time has passed and the record matches when, once for each instant the column holds; a new time arms it again. Used in examples/apps/lintel/resources.ts.
resources.*.at.*.command string Stable A command, by its name in the App’s commands module (defineCommands). The server fills in its input, target and version from the registration; tablewalk-commands.d.ts types the names. Used in examples/apps/lintel/app.ts.
resources.*.at.*.when string Stable Query-language conditions over the record’s own columns the record must meet then: “status = ‘open’”. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.audit object Stable What the durable support write trail keeps of these rows.
resources.*.audit.redact array Stable Columns the support write trail records as a keyed hash instead of their value, or ‘values’ for every column. One of values.
Key Type Status What it does
resources.*.clone "config" · "sample" Stable What a tenant clone copies of this tenant-owned resource into a sandbox tenant: ‘config’ rows always, ‘sample’ rows only when the clone asks for samples. Unmarked resources are never copied. Startup refuses a marked resource whose key or references a clone cannot remap. One of config, sample.
Key Type Status What it does
resources.*.computed object Stable Virtual columns, each a typed expression over the record’s own columns in the query language’s words, with today, now and me: { is_overdue: { type: ‘boolean’, value: ‘due_on < today and not completed’ } }; hours and minutes move an instant (now - 30 minutes, due_at - 2 hours). Written into the statement, read like a column everywhere a column is; never written, never in a form, and served to a role only where every column it reads is. Used in examples/apps/tick/app.ts.
resources.*.computed.*.type "boolean" · "number" · "date" Stable One of boolean, date, number. Used in examples/apps/lintel/blueprint.ts.
resources.*.computed.*.value string Stable The expression: columns and paths through references, numbers, quoted text, true, false, today, now, me, comparisons, and, or, not, in (…), is empty, + - * /, date spans (+ 3 months), and coalesce(a, b, …), round(x) or round(x, places), abs(x), min(a, b, …) and max(a, b, …). Used in examples/apps/lintel/commands/ledger.ts.
Key Type Status What it does
resources.*.consumes object | array Stable This row uses up a number on the record it points at, kept true on every write: an insert takes by from the balance (refused below zero), a delete gives it back, an edit moves the difference. One, or a list. Used in examples/apps/lintel/resources.ts.
resources.*.consumes.by string Stable This row’s number column holding how much it uses; one each when absent. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.consumes.column string Stable The balance: a reference of this resource, then a number column of the record it names (“part_id.on_hand”). Used in examples/apps/lintel/app.ts.
resources.*.consumes.floor Stable false lets the balance go below zero. One of false. Used in examples/apps/lintel/resources.ts.
resources.*.consumes.refuse string | object Stable What a refusal says, {path} read from the record the balance is on: “Only {part_id.on_hand} of {part_id.name} left”. One of &lt;presentationCopy>. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.consumes[].by string Stable This row’s number column holding how much it uses; one each when absent. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.consumes[].column string Stable The balance: a reference of this resource, then a number column of the record it names (“part_id.on_hand”). Used in examples/apps/lintel/app.ts.
resources.*.consumes[].floor Stable false lets the balance go below zero. One of false. Used in examples/apps/lintel/resources.ts.
resources.*.consumes[].refuse string | object Stable What a refusal says, {path} read from the record the balance is on: “Only {part_id.on_hand} of {part_id.name} left”. One of &lt;presentationCopy>. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.defined object Stable Row-defined fields, keyed by the record’s JSON column: { from, per? }. from is the declared resource whose rows (key, label, type, options, required, help, position) define the column’s keys; per, a column both tables have, picks the definitions whose value equals the record’s, and those whose value is empty. Drawn as the record’s own fields, judged at the server, asked by a list as column.key.
resources.*.defined.*.from string Stable The resource whose rows define the fields. Used in examples/apps/lintel/app.ts.
resources.*.defined.*.per string Stable A column the record and the definitions both have.
Key Type Status What it does
resources.*.delete boolean Stable Opt-in: records of this resource can be deleted (Delete, last in the record’s More menu). Absent, the server refuses deletes. It needs access ‘write’. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.display object Stable How each column’s values dress, keyed by column. Used in examples/apps/lintel/resources.ts.
resources.*.display.*.avatar boolean | object Stable An initials disc before the value: a person’s or a company’s name. Given a file resource ({ from, whose, sort? }), the disc is the record’s photo, drawn through the file route under the reader’s grants, and the initials where there is none. Used in examples/apps/lintel/resources.ts.
resources.*.display.*.avatar.from string Stable A resource whose rows are files. Used in examples/apps/lintel/app.ts.
resources.*.display.*.avatar.sort string Stable Which file leads: “position”, “added_at desc”.
resources.*.display.*.avatar.whose string Stable Its column that points at the record the avatar is of. Used in examples/apps/lintel/resources.ts.
resources.*.display.*.bar number Stable Draw the value as a small bar: true on format “percent”, which fills against 100; for any other number, the value that fills it (bar: 5 for a rating out of five). A tone rule colors the bar. One of true. Used in examples/apps/lintel/blueprint.ts.
resources.*.display.*.colors object Stable Value → one of the theme’s eight chart colors (1–8): the stripe and chip of a board card’s category. Used in examples/apps/lintel/blueprint.ts.
resources.*.display.*.component object Stable A value renderer (kind ‘value’): the App draws the value with it; sort, filter, totals and export keep the raw value. One of &lt;component>.
resources.*.display.*.currency string | object Stable ISO 4217, for “money”; defaults to the App’s currency, then USD. { column: ‘currency_code’ }: each row’s own code, read from that text column of the resource. Used in examples/apps/lintel/app.ts.
resources.*.display.*.currency.column string Stable Used in examples/apps/lintel/app.ts.
resources.*.display.*.face "data" · "ui" · "code" Stable The face this column’s values are set in, over the look’s own: data (the look’s data face, usually monospace), ui (the interface’s reading face) or code (always monospace, for a VIN or a hash). Left out, an App sets a key, a reference, a code or a QR value in the data face and any other text in the reading face. A rule with a component takes no face, the component sets its own; masked: true takes none either. One of code, data, ui. Used in examples/apps/lintel/blueprint.ts.
resources.*.display.*.format "money" · "percent" · "number" · "relative" · "items" · "duration" · "email" · "phone" · "url" · "richText" · "avatars" · "rating" · "color" · "time" · "month" · "year" · "json" · "qr" Stable money: currency formatting (metrics compact to “$27.9M”). percent: the value is 0–100, shown with %. number: separators forced on. relative: a date said from today (“in 3 days”, “64 days ago”), the date itself in the tooltip. items: a text of one item per line, drawn as a list (a line of them where there is no room). duration: a number of seconds said as its two largest units (“2h 15m”), the seconds in the tooltip. email, phone, url: a value of that shape is a link to write to, call or open; an App links a column named like one without a rule. richText: sanitized HTML, drawn formatted on a record and as an excerpt in a list, edited in the rich text editor; the server sanitizes every write and reads Markdown into it. avatars: the people on a thing (an array, a JSON array, or one name per line or comma) as up to three overlapping initials discs and a “+N”; takes nothing else. rating: a whole number of stars out of outOf (5). color: a hex color as its swatch and code. time, month, year: a time of day, a month, a year in the reader’s words, each edited in its native picker. json: a JSON document as a tree, edited as text whose problem is said while it is typed; the server refuses a write that is not JSON. qr: the value as a QR code to scan. These draw the value their own way. One of avatars, color, duration, email, items, json, money, month, number, percent, phone, qr, rating, relative, richText, time, url, year. Used in examples/apps/lintel/resources.ts.
resources.*.display.*.icon string | object Stable A small tinted square before the value in a list’s cell: an App icon, or { mark, toneOf } where toneOf names another column of the record whose tone rule tints each row’s square. Used in examples/apps/lintel/app.ts.
resources.*.display.*.icon.mark string Stable
resources.*.display.*.icon.toneOf string Stable
resources.*.display.*.icons object Stable Value → an App icon drawn before the word (priority as signal bars, a status’s mark), where a tone’s dot would stand and in its color; the word stays. Used in examples/apps/lintel/resources.ts.
resources.*.display.*.images string Stable With format richText: the file resource a pasted or dropped picture is kept in, as an attachment of the record.
resources.*.display.*.masked object Stable true: a short placeholder is drawn instead of every value, everywhere, the record’s name included, and the rule takes nothing else. { prefix: ‘ENC:’ }: only the values that start with it, said as the prefix and a placeholder; any other value is drawn by the rest of the rule. Presentation, not protection: the value still reaches the browser; use hidden to keep a column out of it. One of true.
resources.*.display.*.masked.prefix string Stable
resources.*.display.*.mentions object Stable With format richText: who an @ names — the resource of people, the column stored as the handle, the column shown or a template of their columns (‘{first_name} {last_name}’) — and the teams an @ may name as well.
resources.*.display.*.mentions.by string Stable Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.display.*.mentions.from string Stable Used in examples/apps/lintel/app.ts.
resources.*.display.*.mentions.groups object Stable The teams an @ names as well, each told as its members: their resource, handle and shown column, and the resource of link rows that puts a person in a team (absent: the people resource references the team). Used in examples/apps/tick/app.ts.
resources.*.display.*.mentions.groups.by string Stable Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.display.*.mentions.groups.from string Stable Used in examples/apps/lintel/app.ts.
resources.*.display.*.mentions.groups.labelColumn string Stable Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.display.*.mentions.groups.through string Stable
resources.*.display.*.mentions.labelColumn string Stable The column a person is shown by, or a template of the people’s own columns (‘{first_name} {last_name}’). Typing after the @ matches the start of any word of it, and of the handle where that is text; the handle (by) is what is stored. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.display.*.minor Stable With “money”: the integer column holds minor units (cents), said and edited in the currency’s own decimals — 1999 is $19.99, ¥1,999, 1.999 KWD. One of true. Used in examples/apps/lintel/resources.ts.
resources.*.display.*.outOf integer Stable With format rating: the stars of its scale (5 when unsaid).
resources.*.display.*.ring Stable With format percent: the value as a small ring filled against 100. One of true.
resources.*.display.*.scan Stable A code typed or read by the camera where the browser can read codes; takes no format. One of true.
resources.*.display.*.signature Stable On a column that points at a file resource: a signature drawn or typed, kept as a PNG row of it and drawn as the picture; takes no format. One of true. Used in examples/apps/lintel/jobs.ts.
resources.*.display.*.slider object Stable A number edited by dragging along its range, the figure beside it: { min: 0, max: 10 }.
resources.*.display.*.slider.max number Stable Used in examples/apps/lintel/commands/ledger.ts.
resources.*.display.*.slider.min number Stable Used in examples/apps/lintel/commands/ledger.ts.
resources.*.display.*.slider.step number Stable Used in examples/apps/lintel/commands/ledger.ts.
resources.*.display.*.subtitle string Stable Another column of the same record, said as a muted second line under the value in lists.
resources.*.display.*.tone object Stable Value → tone pills. Keys may be exact values, or numeric thresholds like “>= 90” — for numbers, the first satisfied threshold (in written order) wins. The key “*” is the fallback; values it does not name wear neutral. Used in examples/apps/lintel/pages/maintenance_request.ts.
resources.*.display.*.unit string Stable With “number”, “money” or no format on a numeric column: the unit said after the figure — “mi”, “kg”, “/mo” (a leading slash joins without a space: “$242/mo”). Used in examples/apps/lintel/app.ts.
resources.*.display.*.values object Stable The words a vocabulary’s values are said as: a map of stored value to word ({ “PUB”: “Published” }); any value it does not name is still said as words, as are the values of a column with a tone (IN_REVIEW reads “In review”). The stored value still sorts, filters and keys tone and icons. Used in examples/apps/lintel/policy.ts.
Key Type Status What it does
resources.*.favorite boolean Stable Opt-in: a star on the records, so a reader can keep them in Favorites.
Key Type Status What it does
resources.*.fields object Stable Column ceiling for signed-in roles: needs auth with auth.roles; write needs access ‘write’. To keep a column from every reader, use hidden. Used in examples/apps/tick/app.ts.
resources.*.fields.read array Stable Used in examples/apps/lintel/app.ts.
resources.*.fields.write array Stable Needs the resource’s access ‘write’. Used in examples/apps/lintel/app.ts.
Key Type Status What it does
resources.*.file object Stable The rows are files: content names the binary column holding the bytes (BLOB, bytea), name the file name; type and size, when named, are filled from the upload; thumbnail names a smaller copy for cards. A related list over the resource draws as attachments, uploading where the reader may add a row (its create names the label). maxBytes caps an upload (10 MB when unsaid, at most 25 MB). In a row-policy App an upload is an insert the policy judges, and removing a file a delete. A tenant App reads and uploads its files on the tenant’s lease, each at most 10 MB, and only its own tenant’s. storage ‘bucket’ keeps new files’ bytes in an S3-compatible bucket (AWS S3, R2, MinIO, B2, Tigris), the row naming the object in its object column; the server’s TABLEWALK_S3_ACCESS_KEY_ID and TABLEWALK_S3_SECRET_ACCESS_KEY sign every request, and the server does not start without them. object and hash need no grant: a reader of content reads the file, and they are the server’s alone, sent to no browser and named by no request, App API or MCP tool. An upload is one request, so maxBytes stays at most 25 MB with a bucket; multipart upload is not supported. tablewalk migrate files moves files to where storage says and sweeps objects no row names; an App served with jobs is swept daily by the server, a tenant App tenant by tenant. Used in examples/apps/lintel/resources.ts.
resources.*.file.bucket object Stable An S3-compatible bucket the files’ bytes are kept in: its address only, the credentials being the server’s environment.
resources.*.file.bucket.endpoint string Stable The service’s address, for any but AWS: https://<account>.r2.cloudflarestorage.com, or a local one such as http://localhost:9000.
resources.*.file.bucket.name string Stable The bucket’s name. Used in examples/apps/tick/app.ts.
resources.*.file.bucket.pathStyle boolean Stable true addresses the bucket as a path (<endpoint>/<name>/<key>), as MinIO wants; otherwise as a host.
resources.*.file.bucket.prefix string Stable A folder every key goes under, so Apps can share one bucket.
resources.*.file.bucket.presign boolean Stable true sends a download straight from the bucket, by a redirect to a URL signed for a minute; otherwise it passes through the server.
resources.*.file.bucket.region string Stable Its region: us-east-1 when unsaid; auto for R2. Used in examples/apps/lintel/pages/maintenance_request.ts.
resources.*.file.content string Stable Used in examples/apps/lintel/resources.ts.
resources.*.file.hash string Stable A text column the upload fills with the file’s SHA-256 (hex), which tags it for caches. The server’s alone: granted with content, named by no request.
resources.*.file.maxBytes integer Stable Used in examples/apps/lintel/resources.ts.
resources.*.file.name string Stable Used in examples/apps/tick/app.ts.
resources.*.file.object string Stable A text column naming each file’s object in the bucket; null for a file kept in content. The server’s alone: granted with content, named by no request.
resources.*.file.size string Stable Used in examples/apps/lintel/blueprint.ts.
resources.*.file.storage "database" · "bucket" Stable Where new files’ bytes go: database (when unsaid) or bucket. A file is read from wherever its row says. One of bucket, database.
resources.*.file.thumbnail string Stable A binary column holding a smaller copy of each file’s picture, which cards and gallery strips draw instead of the whole file. Whoever writes the row fills it (a seed, an import); a row without one is drawn from the file itself. Used in examples/apps/lintel/resources.ts.
resources.*.file.type string Stable Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
resources.*.flows object Stable Flows whose steps are rows: { from, steps, set?, events?, kinds? }. from and steps are declared resources whose rows are the flows (id, name, start: created | updated | manual, and condition?, changes?, active?) and their steps (flow_id, position, kind, and the columns a kind reads: title, duration, field, value, condition, goto, event, audience, message, and on a kind that waits mode, remind). A notify step tells the audience a notify rule names with on: { flow }. Steps sharing a position start together and join; a run keeps the rows it started with. A jobs module’s flowRunner runs them on this resource’s records, durably; a step of an App kind runs one of the App’s commands on the record.
resources.*.flows.events object Stable Each event a run may wait for, with the payload field that names the record: { “po.decided”: “order” }. Used in examples/apps/lintel/commands/ledger.ts.
resources.*.flows.from string Stable The resource whose rows are the flows. Used in examples/apps/lintel/app.ts.
resources.*.flows.kinds object Stable The step kinds the App adds, each running one of its commands on the record.
resources.*.flows.kinds.*.command string Stable The command the step runs on the record. Used in examples/apps/lintel/app.ts.
resources.*.flows.kinds.*.input array Stable Step columns passed to the command under their own names; ‘note?’ for one a step may leave empty. Used in examples/apps/lintel/commands/leasing.ts.
resources.*.flows.kinds.*.remind string Stable A command run on the record, with the step’s input, each time a step’s remind passes without the event; needs waitFor.
resources.*.flows.kinds.*.waitFor string Stable One of events, waited for once the command has run.
resources.*.flows.set array Stable The record’s own columns a set step may write. Used in examples/apps/tick/app.ts.
resources.*.flows.steps string Stable The resource whose rows are the flows’ steps.
Key Type Status What it does
resources.*.form object Stable The New form wherever this resource’s records are created from a list: every view’s New button and quickAdd. Used in examples/apps/tick/app.ts.
resources.*.form.defaults object Stable The values a new record starts with. Besides a literal, three constants: today on a date column, now on a date-and-time column, and me (the signed-in person’s row on a reference to the auth.me table, their email on a text column) — { “auto”: “today” } and so on in JSON. Filled in as the form opens, and by the server on a create that leaves them out; a column the form does not show is the server’s, whatever a create says. The text “today”, “now” or “me” is refused, since it would read as the value filled in. Or { “from”: “service_id.price” }: the value of the record a reference names, refreshed as it is chosen until the person edits it, and filled by the server where a create leaves it out. Used in examples/apps/tick/app.ts.
resources.*.form.defaults.*.auto "today" · "now" · "me" Stable One of me, now, today.
resources.*.form.defaults.*.from string Stable One reference of this table, then a column of the table it names: service_id.price. Used in examples/apps/lintel/app.ts.
resources.*.form.description string Stable One sentence under the form’s heading. Used in examples/apps/lintel/app.ts.
resources.*.form.fields object Stable Each shown field’s own dress on this form: caption, help, placeholder, lines and, for a reference, the choices it narrows to. Used in examples/apps/tick/app.ts.
resources.*.form.fields.*.help string Stable Static plain text. No row-value interpolation. Used in examples/apps/lintel/commands/leasing.ts.
resources.*.form.fields.*.label string Stable Static plain text. No row-value interpolation.
resources.*.form.fields.*.multiline boolean Stable A text column: true draws several lines, false one, whatever its type says.
resources.*.form.fields.*.placeholder string Stable Static plain text. No row-value interpolation.
resources.*.form.fields.*.where object Stable A reference: offer only the records whose column (the key) equals this form’s field (the value): { project_id: ‘project_id’ }. Enforced on every write.
resources.*.form.groups array Stable Semantic presentation groups. The App checker also rejects duplicate members across groups and members excluded by show or read access. Ungrouped shown fields remain shown. Groups never grant access. Used in examples/apps/tick/app.ts.
resources.*.form.groups[].description string Stable Static plain text. No row-value interpolation. Used in examples/apps/lintel/app.ts.
resources.*.form.groups[].fields Stable Used in examples/apps/tick/app.ts.
resources.*.form.groups[].label string Stable Static plain text. No row-value interpolation.
resources.*.form.lines array Stable Child rows asked with the record and inserted with it in one transaction, each collection a grid of inputs: { label: ‘Lines’, from: ‘order_line’, whose: ‘order_id’, show: [‘product_id’, ‘quantity’], order: ‘position’ }. Used in examples/apps/tick/app.ts.
resources.*.form.lines[].from string Stable The child resource; the App writes it. Used in examples/apps/lintel/app.ts.
resources.*.form.lines[].label string Stable The grid’s heading.
resources.*.form.lines[].max integer Stable Most rows; default 64. Used in examples/apps/lintel/commands/ledger.ts.
resources.*.form.lines[].min integer Stable Fewest rows the record is saved with. Used in examples/apps/lintel/commands/ledger.ts.
resources.*.form.lines[].order string Stable A numeric column the rows’ places fill, 1, 2, 3 … Used in examples/apps/tick/app.ts.
resources.*.form.lines[].show array Stable The child’s columns each row asks, as inputs; not whose or order.
resources.*.form.lines[].whose string Stable The child’s reference to the new record, filled by the server. Used in examples/apps/lintel/resources.ts.
resources.*.form.live array Stable The resource’s computed columns and rollups the form says as it is filled in, worked out by the server’s own evaluator. A preview: the saved record’s figures are the server’s.
resources.*.form.open "drawer" · "page" Stable ‘drawer’: over the list, which stays in sight. ‘page’: a centered page in the content pane. Absent: a drawer for up to 8 fields without steps, a page for more or with steps. One of drawer, page. Used in examples/apps/tick/app.ts.
resources.*.form.show array Stable
resources.*.form.steps array Stable Finite presentation steps. When show is omitted, the steps select the fields in step order. Every field is owned by exactly one step; steps never grant access or execute hooks.
resources.*.form.steps[].fields Stable Used in examples/apps/tick/app.ts.
resources.*.form.steps[].id string Stable Unique within the form. Absent, the label’s slug, as step() makes it.
resources.*.form.steps[].label string Stable Static plain text. No row-value interpolation.
resources.*.form.when object Stable Each field shown only while the draft matches its condition. Presentation only. Targets must be shown/readable; condition dependencies must be readable local columns. Hiding a field never weakens authoritative resource validation. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.hidden array Stable Columns no reader of the App is ever served, with sign-in or without. Cut from the catalog the server answers with; never the primary key, the address or a search field.
Key Type Status What it does
resources.*.import boolean | object Stable Rows from a CSV file. true imports them as new records through the ordinary insert, under the reader’s grants and the resource’s validation. An object runs ‘command’ once per row, on the record its ‘match’ columns find. Used in examples/apps/lintel/resources.ts.
resources.*.import.command string Stable A command, by its name in the App’s commands module (defineCommands). The server fills in its input, target and version from the registration; tablewalk-commands.d.ts types the names. Used in examples/apps/lintel/app.ts.
resources.*.import.match array Stable The resource’s own columns that find the record each row runs on; a reference column is found by the record’s name.
Key Type Status What it does
resources.*.inputs object Stable A column’s control in the resource’s edit and New forms, drawn by the App’s own input component (kind ‘input’).
resources.*.inputs.*.kind Stable One of input. Used in examples/apps/lintel/blueprint.ts.
Key Type Status What it does
resources.*.labels object Stable One caption per column or label path: literal text, or a message of the App’s catalogs (msg(‘lead.title’)) said in each reader’s language. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.machine object Stable The record’s states and the verbs that move it between them, in the record’s order. A verb that names one of the App’s commands runs it; any other word is a fixed move that sets the column. The column changes only along the graph, on every door. Used in examples/apps/lintel/resources.ts.
resources.*.machine.column string Stable The column its states are. Used in examples/apps/lintel/app.ts.
resources.*.machine.entry array Stable The states a command may insert a new record in besides the first, such as a converted lead’s deal opening past qualification. A form’s New record still starts in the first state. Used in examples/apps/lintel/jobs.ts.
resources.*.machine.groups object Stable Named sets of states the query language reads as it reads status is open: status is onBench means the group’s states, status is not onBench the others. A group is never named like a state, nor open, which status is open says (every state that is not final). Used in examples/apps/tick/app.ts.
resources.*.machine.since string Stable A timestamp column the server stamps when the state changes; after timers count from it. Used in examples/apps/lintel/resources.ts.
resources.*.machine.states object Stable
resources.*.machine.states.*.after object Stable How long the record may stay, and the command run through the jobs then.
resources.*.machine.states.*.by object Stable Moves only a service role makes (auth.roles.<role>.service): the states a command running as it may move the record to. Drawn as no button. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.machine.states.*.final Stable One of true. Used in examples/apps/lintel/resources.ts.
resources.*.machine.states.*.on object Stable Used in examples/apps/lintel/resources.ts.
resources.*.machine.states.*.on.*.bulk boolean Stable
resources.*.machine.states.*.on.*.confirm boolean Stable Ask before the move writes. A command verb that asks nothing asks first too; one with inputs asks them in its form, which is its confirmation, and is refused one. Used in examples/apps/lintel/resources.ts.
resources.*.machine.states.*.on.*.label string Stable The button’s words; {to} says the state it leads to. A command verb may say itself differently from different states.
resources.*.machine.states.*.on.*.reason string Stable Used in examples/apps/lintel/resources.ts.
resources.*.machine.states.*.on.*.set object Stable Used in examples/apps/tick/app.ts.
resources.*.machine.states.*.on.*.to string | array Stable Used in examples/apps/lintel/dashboards.ts.
resources.*.machine.states.*.on.*.when string Stable Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.notify array Stable Which writes tell which people, kept in each person’s inbox and written in the triggering write’s own transaction, in reserved tables provisioned once (tablewalk migrate stores up, or provisionStores from tablewalk/maintenance with only: [‘inbox’]). The person who made the write is never told. Needs sign-in; not under auth.rows ‘tenant’. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.notify[].email Stable Email each notice too, after the write commits, through the config’s email service: to accounts only, while they may read the record, unless they turned email off. One of true. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.notify[].mentions object Stable The people a text column mentions: a plain text column’s @handle words by a handle column of the table auth.me names ({ in: ‘body’, by: ‘handle’ }), a rich text column’s stored mentions (its display rule’s by, which this must agree with), a team as its members; an update tells only whom it newly mentions.
resources.*.notify[].mentions.by string Stable Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.notify[].mentions.in string Stable
resources.*.notify[].on object Stable What happens: a new record, any change, a change to one of these columns (an assignment), the action that ran, by its id, or a flow’s notify step telling this audience. One of insert, update. Used in examples/apps/lintel/resources.ts.
resources.*.notify[].on.action string Stable Used in examples/apps/lintel/views.ts.
resources.*.notify[].on.changes string | array Stable Used in examples/apps/lintel/pages/resident_request.ts.
resources.*.notify[].on.flow string Stable
resources.*.notify[].open string Stable The reference whose record the notice opens; absent, the record itself. Used in examples/apps/tick/app.ts.
resources.*.notify[].send object Stable Tell it on an integration’s channel too: the title is the message, sent to the address the record holds after the write commits, unless the recipient opted out, held through the quiet hours. With send, to may be left out. Used in examples/apps/lintel/resources.ts.
resources.*.notify[].send.channel string Stable The channel a listed integration provides, like sms. Used in examples/apps/lintel/resources.ts.
resources.*.notify[].send.consent string Stable A column that is true where the App holds the recipient’s consent; absent or false, only a recipient who opted in on the channel is told. Used in examples/apps/lintel/resources.ts.
resources.*.notify[].send.timezone string Stable A text column holding the recipient’s IANA time zone, which the quiet hours are read in. Used in examples/apps/lintel/app.ts.
resources.*.notify[].send.to string Stable The text column holding the address on that channel, or a path of at most two references to one. Used in examples/apps/lintel/dashboards.ts.
resources.*.notify[].title string | object Stable The notice, with {column} and {reference.column} filled from the record after the write; a message of the App’s catalogs (msg(‘ticket.assigned’, { title: ‘title’ })) is said in each recipient’s own language.
resources.*.notify[].title.args object Stable Each ICU argument’s column path: { “title”: “thread_id.title” }.
resources.*.notify[].title.message string Stable Used in examples/apps/lintel/commands/leasing.ts.
resources.*.notify[].to string | array Stable Who is told: a text column holding an email, a reference to the table auth.me names, or a path of at most two references to either. Used in examples/apps/lintel/dashboards.ts.
resources.*.notify[].when string Stable Only when the record, after the write, meets this condition in the query language over its own columns: status = received or status = cancelled. = , != and in, joined by and / or. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.noun string | object Stable What one record is called, as it reads mid-sentence (“issue”; its plural by rule), or { one, many } for a plural no rule makes. It names New, a split’s detail and, when they say none, a page and a list. Used in examples/apps/lintel/resources.ts.
resources.*.noun.many string Stable Used in examples/apps/lintel/resources.ts.
resources.*.noun.one string Stable Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.owner "tenant" · "global" · "platform" Stable Who owns the resource’s rows under auth.rows ‘tenant’, where it is required: one tenant’s (by its ownership column), shared global data, or the platform realm’s. One of global, platform, tenant.
Key Type Status What it does
resources.*.page string Stable The page this resource’s records open through, only when two pages share its base.
Key Type Status What it does
resources.*.physical string Stable The physical table id when it is not inferred. The only place an engine-schema-qualified id (“public.opportunity”) appears.
Key Type Status What it does
resources.*.recordLabel string | object Stable What names one record: a column or path, or a template of them in braces (‘PO-{id}’, ‘{product_id.name} x {qty}’), computed in the statement; or a message of the App’s catalogs whose arguments are those columns. A table with no name column of its own is named by its noun and key unless this says otherwise. Used in examples/apps/lintel/resources.ts.
resources.*.recordLabel.args object Stable Each ICU argument’s column path: { “title”: “thread_id.title” }.
resources.*.recordLabel.message string Stable Used in examples/apps/lintel/commands/leasing.ts.
Key Type Status What it does
resources.*.references object Stable Soft keys: column -> { to, column? }, a column naming a record of another resource without a database foreign key. The target column (default its primary key) must be proven unique. Joined within one connection; into a source on another connection, read in two steps (labels, links, related lists; no filter or sort through it). Never authority for a write.
resources.*.references.*.column string Stable Used in examples/apps/lintel/app.ts.
resources.*.references.*.to string Stable Used in examples/apps/lintel/dashboards.ts.
Key Type Status What it does
resources.*.restocks object | array Stable consumes the other way round, on a line that brings stock in (a receipt, a return to stock): an insert adds by to the balance, an edit moves the difference, and a delete takes it back out, refused where what it brought in has been used since. One, or a list. Used in examples/apps/lintel/resources.ts.
resources.*.restocks.by string Stable This row’s number column holding how much it uses; one each when absent. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.restocks.column string Stable The balance: a reference of this resource, then a number column of the record it names (“part_id.on_hand”). Used in examples/apps/lintel/app.ts.
resources.*.restocks.floor Stable false lets the balance go below zero. One of false. Used in examples/apps/lintel/resources.ts.
resources.*.restocks.refuse string | object Stable What a refusal says, {path} read from the record the balance is on: “Only {part_id.on_hand} of {part_id.name} left”. One of &lt;presentationCopy>. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.restocks[].by string Stable This row’s number column holding how much it uses; one each when absent. Used in examples/apps/lintel/commands/maintenance.ts.
resources.*.restocks[].column string Stable The balance: a reference of this resource, then a number column of the record it names (“part_id.on_hand”). Used in examples/apps/lintel/app.ts.
resources.*.restocks[].floor Stable false lets the balance go below zero. One of false. Used in examples/apps/lintel/resources.ts.
resources.*.restocks[].refuse string | object Stable What a refusal says, {path} read from the record the balance is on: “Only {part_id.on_hand} of {part_id.name} left”. One of &lt;presentationCopy>. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.rollups object Stable Numbers about the rows that point at each record, by name, read like columns wherever a column is (a list’s show, a sort, a condition, a command’s when, a page’s fields, display and labels): count(from), sum, min or max (from, column), or latest (from, column), a column of the newest row. Computed in the record’s own statement through the child’s grants and row scope; never written. Used in examples/apps/lintel/resources.ts.
resources.*.rollups.*.column string Stable The column of from a sum, min, max or latest reads; a count names none. A sum, min or max may read a computed column of from that reads only its row’s own columns, written inline; a latest reads a stored column of any type, and serves its vocabulary. Used in examples/apps/lintel/app.ts.
resources.*.rollups.*.fn "count" · "sum" · "min" · "max" · "latest" Stable One of count, latest, max, min, sum.
resources.*.rollups.*.from string Stable The resource whose rows point at this one. Used in examples/apps/lintel/app.ts.
resources.*.rollups.*.query string Stable Which of from’s rows count, in the query language over its own columns, its computed columns that read only its own row, and paths through its references to a stored column: “status = open”, “sales_order_id.status != cancelled”, “breaching = true”. A computed column’s now and today are the request’s.
resources.*.rollups.*.segment string Stable One of from’s segments: the rows it names are the ones counted, ANDed with query. Used in examples/apps/tick/app.ts.
resources.*.rollups.*.sort string Stable A latest’s order: the column of from, a date or a number, whose greatest value is the newest row (its key breaks a tie, and a row without one is never newer than a row with one). Its integer key when absent.
resources.*.rollups.*.whose string Stable The reference on from that points here, when there is more than one; or two, task_id.project_id, when from points at a record that points here. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.search object Preview Search through a search provider: fields are the columns the index holds, or one step along a reference (requester.name) whose value each document copies and follows; connection names the provider’s connection. The list’s filter box, reference pickers and the palette ask it and re-read the rows under the reader’s grants; while it is down they search the database. Needs a single-column primary key. On a tenant App each document keeps its tenant and a search asks within the member’s tenant. Search providers are packs (Typesense is @tablewalk/search-typesense), which ship after 1.0; until one is plugged in, an App that declares search is refused at startup. Used in examples/apps/tick/app.ts.
resources.*.search.connection string Preview Used in examples/apps/tick/app.ts.
resources.*.search.fields array Preview Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.segments object Stable Named conditions on this resource’s rows, each read as one word wherever its table’s rows are asked: a tab, a source (“work_order.overdue”), a rollup’s segment, a query. One may name another, and only ever narrows; its label is its name said as words unless it gives one. Used in examples/apps/tick/app.ts.
resources.*.segments.*.label string | object Stable One of &lt;presentationCopy>.
resources.*.segments.*.query string Stable
Key Type Status What it does
resources.*.settings string Stable A settings record: the resource holds one row (a company profile, payroll settings), opened from the reader’s settings (the account menu) under these words. Its page and grants are the resource’s own; the first row by key is the one opened.
Key Type Status What it does
resources.*.slug boolean Stable true follows a numeric id with the record’s name on public pages (/forecourt/vehicles/1-2021-toyota-corolla). Only the id is read back.
Key Type Status What it does
resources.*.tags object Stable The records carry tags: rows of to, linked through a table with one reference to this resource and one to to. They draw as chips under the record’s title; where through is declared writable with delete: true, a picker adds and removes them one link row at a time. toneOf names a column of to holding good, warn, bad, info or neutral.
resources.*.tags.add string Stable
resources.*.tags.remove string Stable
resources.*.tags.through string Stable
resources.*.tags.to string Stable Used in examples/apps/lintel/dashboards.ts.
resources.*.tags.toneOf string Stable
Key Type Status What it does
resources.*.text object Stable How long a text column’s value may be and what form it takes, keyed by column: min and max characters and a pattern the whole value matches, with an optional message. The New form says the rule as someone types; the server holds every write to it. On PostgreSQL a varchar(n) and a simple char_length or ~ CHECK give the database’s rule free; the App’s wins key by key.
resources.*.text.*.max integer Stable Most characters. Used in examples/apps/lintel/commands/ledger.ts.
resources.*.text.*.message string Stable What the form says when the rule is not met. Used in examples/apps/lintel/commands/leasing.ts.
resources.*.text.*.min integer Stable Fewest characters, counted after trimming. Used in examples/apps/lintel/commands/ledger.ts.
resources.*.text.*.pattern string Stable A JavaScript regular expression the whole value matches. Used in examples/apps/lintel/commands/ledger.ts.
Key Type Status What it does
resources.*.types object Stable SQLite: a TEXT column → “date” or “datetime” when it holds ISO dates, so windows, timelines, calendars, date presets and date filters take it. The database still holds text.
Key Type Status What it does
resources.*.validation array Stable Resource invariants, enforced on every write, independent of views and forms. Used in examples/apps/lintel/resources.ts.
Key Type Status What it does
resources.*.validation[].message string Stable Static plain text. No row-value interpolation. Used in examples/apps/lintel/commands/leasing.ts.
resources.*.validation[].must string Stable A condition in the query language, the one a page section’s or an action’s when speaks: “completed = false”, “stage = closed_won and probability < 100”, “pay_type in (salary, hourly)”, “due_on is empty”. Read against the record’s own values: local columns compared with =, !=, <, <=, >, >=, in and is (not) empty, joined by and, or and parentheses; no paths, no text matching, at most 16 comparisons. Unknown or uncomparable dependencies stay unresolved. Text and booleans support only = and !=; ordered comparisons require compatible numeric or temporal columns. Used in examples/apps/lintel/resources.ts.
resources.*.validation[].when string Stable A condition in the query language, the one a page section’s or an action’s when speaks: “completed = false”, “stage = closed_won and probability < 100”, “pay_type in (salary, hourly)”, “due_on is empty”. Read against the record’s own values: local columns compared with =, !=, <, <=, >, >=, in and is (not) empty, joined by and, or and parentheses; no paths, no text matching, at most 16 comparisons. Unknown or uncomparable dependencies stay unresolved. Text and booleans support only = and !=; ordered comparisons require compatible numeric or temporal columns. Used in examples/apps/tick/app.ts.
Key Type Status What it does
resources.*.view string Stable The list view its records are addressed through (/{app}/{view}/{id}), when more than one lists them: a preference for whoever is served it, passed over for a person who is not. Absent: the first list view over it, among the views that person is served, in the menu’s order with no standing query and no split. Used in examples/apps/lintel/app.ts.