The keys at the top of an App that name it, say where its data comes from and where it opens. Every key here is stable (status). All parts.
Only name and home are required. id is the App’s address and account
store, a slug of name by default (Help Desk → help-desk); set it before
accounts are created. connection names one configured connection, never a
URL; sources bind several instead.
A view id, or rules read in order on every request, first match wins:
signedOut: true (needs auth, names a public view), roles, and a last
rule with neither. A rule whose view the visitor cannot open gives way to the
next.
Optional; without it there is no menu. An entry is a view id, { to, label },
a navGroup(id, label, children, { icon?, placement?, inline? }) (nesting up to
eight deep) or a feature placement { feature: 'id' }. A top-level group with
inline: true draws its items straight in the top bar as links, and stays a
section in the folded menu and the sidebar. Each list, dashboard, signed-in form or
room appears at most once; landings and public forms are refused. A list the
menu does not name is still served at its address and offered by ⌘K. Icons are
Phosphor names from a curated set, and a wrong one is refused with the nearest.
See Navigation and shell.
Every record, list, dashboard and form has one canonical address;
mistri check --app <dir> --routes prints them all. For a server serving
one App, at the root:
A record is addressed through the first list showing its table among the
views the person reading is served: the resource’s view where they are
served it, else the first plain list over it in menu order. A resident’s
repair is /my-requests/12 and the office’s the same record at /repairs/12;
a mailed link is the recipient’s own, and a signed-in person opening the
other’s address is sent on to theirs. Several Apps on one
server each keep their id (/lintel/leases/12), and --base-path /tools
puts the whole server under a proxy’s path. new, api, assets,
sign-in, welcome and form are reserved segments. A query-language
address still opens and is rewritten to the canonical one.
Off unless the App asks. With live: true an open list, record or dashboard
reads again what another person’s change touched, as it commits. Without it a
page refreshes on focus and after its own saves, and a dashboard reads every
section again each minute while its tab is shown, so one left on a wall still
moves. A resource’s live: false keeps a hot or log-like table out: its writes
are not announced and its pages refresh as without live sync. The operator’s
--no-live turns live sync off for every App whatever they say.
The one connection this App is for, by id or name. Absent means every connection. Not with sources. A name that is an identifier is also the App’s one source’s: commands name it in defineSource. Used in examples/apps/tick/app.ts.
Where a visitor starts, required: a view id for everyone, or rules read in order that end with a rule with no condition. Used in examples/apps/tick/app.ts.
Whether the App’s open pages follow other people’s changes (live sync): a list, a record and a dashboard read again what a change touched, as it commits. Off unless true; then pages refresh on focus and after their own saves, and a dashboard reads every section again each minute while shown. The operator’s –no-live wins. A resource leaves it with live: false. Default false. Used in examples/apps/lintel/app.ts.
In the sidebar, the section starts folded to its heading for someone who has never opened or closed it. Their own fold is remembered over it; it still opens while it holds the current room, while filtering, and in the rail. One of true.
In the top bar, a top-level group’s entries stand in the bar as links of their own, not under its menu. The sidebar still draws the group. One of true. Used in examples/apps/tick/app.ts.
Named connection bindings. At most one says default: true; several may share a connection, each with its own schema. Not with root connection. Used in examples/apps/lintel/app.ts.
Server-configured connection ID or name, never a connection URL. Used in examples/apps/tick/app.ts.
sources.*.default
boolean
Stable
The source whose resources stay bare. At most one says true when there are several, and none has to; a source standing alone is the default unless it says false.
sources.*.realm
Stable
A platform-only source: read by a tenant App’s platform realm alone, never the default, never written. Its resources are owner platform, access read. One of platform.
sources.*.resources
array
Stable
The tables this source brings in without a block each: ‘all’, or their names. Each is an implicit {} block, granting nothing. One of all. Used in examples/apps/tick/app.ts.
sources.*.schema
string
Stable
The one schema of its connection this source sees (a PostgreSQL schema). Several sources may share a connection, each with a schema of its own. Not on SQLite.