Preview Frame

An iframe whose `src` is driven by a wire, so picking a value elsewhere on the page re-navigates it CLIENT-SIDE — no server round trip, no paint_result, nothing else on the page repainted. A DATA atom, same spirit as sortable_list: it renders whatever src it is given and reacts to whatever is wired into it; it has no opinion on what the iframe shows. Meant to sit next to a picker (menu/select) and a StringTemplate primitive that turns the picked value into a URL — e.g. a "preview this before you commit it" panel, where committing is a SEPARATE, ordinary action. Same-origin only in practice: nothing here relaxes sandboxing. A cross-origin src is subject to the embedded page's own frame-ancestors / X-Frame-Options exactly as any other iframe.

Surfaces
mcp-apps
Degraded on
SurfaceNote
google-apps-script-webRenders and re-navigates the same as MCP Apps, but is subject to the GAS iframe sandbox's restrictions on nested frames the same way embed_google_slides/embed_youtube already are — a cross-origin src may not load there even though a same-origin one does.
webRenders a static iframe at the initial `src`; the Python reference renderer has no wire engine, so it never re-navigates.
Fields
FieldType
srcstring. Initial iframe URL. Empty renders the placeholder instead of an iframe. Normally left empty and driven entirely by `wire.src`.optional
labelstring. A small heading above the frame.optional
heightnumber. Frame height in px. Default 320.optional
emptyMessagestring. Shown in the placeholder before a src exists. Default "Nothing selected yet."optional
Example payload
{
  "type": "preview_frame"
}
ARD catalog entry
{
  "identifier": "urn:air:a2uicatalog.ai:atom:preview_frame",
  "displayName": "Preview Frame",
  "type": "application/vnd.a2ui.atom+json",
  "url": "https://a2uicatalog.ai/atoms/preview_frame",
  "capabilities": [
    "mcp-apps"
  ],
  "description": "An iframe whose `src` is driven by a wire, so picking a value elsewhere on the page re-navigates it CLIENT-SIDE \u2014 no server round trip, no paint_result, nothing else on the page repainted.\nA DATA atom, same spirit as sortable_list: it renders whatever src it is given and reacts to whatever is wired into it; it has no opinion on what the iframe shows. Meant to sit next to a picker (menu/select) and a StringTemplate primitive that turns the picked value into a URL \u2014 e.g. a \"preview this before you commit it\" panel, where committing is a SEPARATE, ordinary action.\nSame-origin only in practice: nothing here relaxes sandboxing. A cross-origin src is subject to the embedded page's own frame-ancestors / X-Frame-Options exactly as any other iframe.",
  "representativeQueries": [
    "show a iframe whose src is wired to another node's value, so picking updates it with no repaint",
    "an iframe whose `src` is driven by a wire, so picking a value elsewhere on the page re-navigates it",
    "render a preview frame"
  ]
}
← Full ARD catalog
Deploy your own Google Apps Script renderer

The renderer is an open-source Google Apps Script web app. Deploy your own instance in 4 commands — you own the URL, no dependency on the demo endpoint.

git clone https://github.com/a2uicatalog/a2ui
cd a2ui/apps-script-surface/gas-wired-renderer
clasp push && clasp deploy
Full deploy guide →