--- title: "Ui: renderTargets" description: "smabar plugin reference: Ui: renderTargets" canonical: "https://smabar.com/docs/plugin-ref-ui-render-targets/" lang: en --- # Ui: renderTargets > smabar plugin reference: Ui: renderTargets Canonical HTML version: https://smabar.com/docs/plugin-ref-ui-render-targets/ · Language: en · Publisher: smabar (https://smabar.com) --- [Build my plugin](https://smabar.com/build-my-plugin.md) · [All references](https://smabar.com/docs/plugin-ref-index.md) · [Install the ZIP](https://smabar.com/docs/install-plugin-zip.md) Source: smabar 1.5.0, revision `a019f2563965edc37a5e8d84742ea1ff2fa6f824`. [Export metadata and checksums](https://smabar.com/plugin-reference/export.json). This is an offline reference. MCP calls quoted below describe the connected workflow; use the linked documents and create local files instead. Live state, installed plugins, available providers and the user's active theme are unknown. Never claim a live check. Read with [styling](https://smabar.com/docs/plugin-ref-styling.md) and [examples](https://smabar.com/docs/plugin-ref-examples.md). ## tile ```json "Persistent compact bar content. Uses the configured tile chrome unless the tile manifest overrides it." ``` ## flyout ```json "Persistent detail content opened by click (and shown as the hover preview while no hover content exists). Optional width requests: conventions.flyoutWidth. Split layouts: sb-split and snippets.splitFlyout." ``` ## hover ```json "Optional persistent hover-preview content. Once pushed, hovering the tile shows THIS content after the user's hoverPeek delay instead of the click flyout — even when the user disabled the generic hover preview (the tile's hover content overrides that setting for this tile). A click pins the normal flyout target. Identical preview and flyout HTML is promoted in place with its DOM and scroll preserved; different compact previews are replaced. Remote iframe players still load only when pinned. Cached and replayed like tile/flyout." ``` ## popup ```json "Transient toast content. Send ui.render with target=\"popup\". ttlMs omitted or null makes the popup STICKY — it stays until the user clicks its X button; an unsigned 32-bit integer ttlMs auto-dismisses after that many ms, clamped to 1000–120000. Any other ttlMs falls back to 5000 ms and is logged once instead of becoming sticky. Popups stack at a user-configured screen position (popups.position, up to 5 visible and 45 queued) — the plugin cannot choose the position. When the bounded queue is full, the oldest waiting popup is discarded and reported in the plugin log. Auto-dismiss pauses while the user hovers a popup or keeps keyboard focus inside it. Popups may be disabled globally (do-not-disturb). Buttons with data-action are interactive and reach the normal plugin handler. For stable IDs, updates, explicit closing, delivery events and an optional local sound use app.popups.show(tile_id,popup_id,html,...) and app.popups.dismiss(...); see plugin_guide sdk.popups. Keep the task state in plugin storage and dismiss only after a successful write." ```