Resources and references
Resources are the durable primitives an app provisions. References connect them without embedding account-specific IDs.
Resource collections
The manifest supports these collections:
dataWorkspaces,dataWorkspaceBases, anddataWorkspaceTablesdocumentFoldersanddocumentsformsfrontendPagesworkflowDefinitionsandworkflowInstancestriggers
Use ref() for dependencies
const table = resources.table({
base: ref('dataWorkspaceBases', 'main'),
title: 'Sources',
columns: {
title: {type: 'single_line_text', required: true},
url: {type: 'url', unique: true},
},
});
ref('dataWorkspaceBases', 'main') compiles to:
{"$ref":"dataWorkspaceBases.main"}
The app installer resolves that value to the installed base ID. References can also connect surfaces to resources, workflow nodes to tables, nested Spaces to parents, and Frontend Page binding aliases to platform resources.
Stable keys, editable labels
Object keys are your stable app contract. Titles and labels are the user-facing copy. Prefer a durable key such as inspiration even if the visible label may later change from “Inspiration” to “Swipe file.”
:::tip Think in bindings
A custom page should ask for inspirationTable or writePost, not for a database ID. The manifest owns the mapping, and the host exposes the resolved binding at runtime.
:::