This reference describes the AUP tree contract that an author can intentionally write against. It does not make every internal session message a long-term authoring API.
Node fields
An AUP node has a required id and type. The current public node shape also has these optional fields:
| Field | Authoring role | Boundary |
|---|---|---|
props | Static presentation/input properties | Its valid keys depend on type |
src | A read-oriented data source | It does not itself grant write access |
bind | A normal read/write binding for a supported input flow | The receiving node and target still decide what they support |
propBind | Server-managed binding for a dotted property path to an AFS path | Use only where the owning component declares it |
state | Application state supplied with the node | Do not treat renderer-local transient UI as universally persistent state |
events | Named interactions and their actions | The event name is defined by the node/renderer contract |
children | Nested semantic nodes | A type may constrain its child shape |
testId | Stable test-oriented identifier | It is not reader-facing copy or routing identity |
type names a semantic capability, not a particular HTML tag or native widget. See Primitive taxonomy and evidence before documenting a capability as cross-device.
Events and navigation
For current DSL authoring, -> is the click shorthand for button and action. Other nodes use an explicit on <event> -> form. A page change uses the canonical root-state update:
button open "Open" primary -> page detailswhich compiles to a target of "_root" with set.page. The earlier top-level page: shape is a compatibility form, not the preferred contract for new source.
Messages: use the right level of abstraction
Interactive delivery begins with a rendered tree and may subsequently use tree-versioned patches. Those messages let a session keep a target surface synchronized; authors normally express them through nodes, state, and events rather than constructing patch transport by hand. A static Web Device page can render a supported tree without opening that interactive session.
Read Events, state, and bindings for task-oriented examples and Patches, scenes, and capabilities for the update boundary.