UiView in the manifest:
schemaVersion is 1. Hosts render newer views’ unknown blocks as safe
placeholders rather than failing.
Common props
Every block accepts:Tokens
Colors are semantic tokens — the host owns the palette, so cards inherit
every restyle.
Layout blocks
card
stack
Display blocks
Icon refs accept
https: or data: image URLs; unresolved token names
render nothing (falling back to your integration’s icon where the host shows
one) rather than a broken image.
Input blocks
All inputs takebind (required), label?, and required?:
required inputs gate the confirm action until they hold a non-whitespace
value; the marker is a quiet permanent *.
Action blocks
actions
Give a view exactly one
confirm and one cancel. button is the
standalone single-action variant (label ✅, role?, actionId?, color?,
disabledIf?).
widget
A view may instead be a single sandboxed HTML block —
see Widget confirmations:
Rules: at most one widget per view; no
button/actions blocks anywhere
alongside it.
canvas
Reserved. { "type": "canvas", "src", "height", "maxHeight?" } — an
MCP-Apps-style embedded resource. Declared in the contract, rejected by
validation in schemaVersion: 1.
Bindings
A binding is{{name}} — whitespace-tolerant, dotted paths allowed
({{user.name}}):
- In
text, bindings interpolate into the string. - On inputs,
bind: "{{url}}"shows the argument’s current value and stages edits. On approval, staged edits are folded back into the argument object (nested paths fold into their top-level key) and replace the agent’s proposed values. - Every bound name must exist in the tool’s
inputSchemaproperties — validated at install.
validateView(view) from
@voiceos/integration-sdk.
