A block can ship a widget: a small, structured projection of its data that the platform renders natively, separately from the React/HTML iframe. One block, two surfaces: the canvas iframe for the full render, and the widget for tiny / glanceable displays. The widget is a sub-doc on the manifest:Documentation Index
Fetch the complete documentation index at: https://docs.chatblocks.ai/llms.txt
Use this file to discover all available pages before exploring further.
Widget native rendering is iOS-only in v1 — the iOS app renders widgets on the home screen, lock screen, and in the daily morning brief. iOS support is rolling out gradually; once it lands, widgets you’ve already configured will start rendering with no changes.
Templates
Six render templates. Each declares its owndata shape; the validator rejects data that doesn’t match the chosen template’s Zod schema.
metric
metric
Big number + label, with optional trend.
value and label are strings (formatting is your call — currency, percent, plain). trendDirection is one of "up", "down", "flat".sparkline
sparkline
A tiny line of numeric points with a label.At least 2 points required.
status
status
A single colored dot with a label. Use for up/down/degraded-style signals.
color is one of "green", "yellow", "red", "gray".list
list
A label plus up to a handful of items (At least 1 item required.
primary + optional secondary).progress
progress
A progress bar with current / target.
target must be positive.text
text
A short string. Use for a quote, headline, or a note.
chart template in the manifest schema (line / bar / area with multiple series), but the iOS native renderer for it is deferred. You can declare chart widgets today; iOS will skip them until support ships.
Themes
Five themes select typography, palette, corner radius, and background style. Theme identity in v1 comes from these passive choices — no animation policy yet.| Theme | Vibe |
|---|---|
modern | Default. Clean sans, generous whitespace, neutral palette. |
splitflap | Split-flap board look — slab serif numerals on a deep background. |
terminal | Monospace, green-on-black phosphor energy. |
newspaper | High-contrast serif with thin rules. |
pastel | Soft pastel palette, rounded corners. |
modern.
Configuring from the in-app editor
Open a block in/blocks/[blockId]/edit, click the Widget button on the toolbar. The Widget panel has:
- A toggle to enable / disable.
- A template picker (six options).
- A theme picker (five options).
- A sample-data JSON field, validated client-side against the chosen template’s schema.
manifest.widget via the blocks.updateBlockWidget mutation. You can also set it from an agent over MCP — see blocks.update and blocks.setWidgetData in the tool reference.
Refreshing widget data
Widget data updates by one of three paths:Connector binding
Add a
binding to the manifest pointing at a configured data source. The aggregator refreshes on a cadence and writes through to widget.data via the projection.Scheduled run
A BYOK agent runs on cron, computes the value, and calls
blocks.setWidgetData. Useful when the data needs LLM reasoning to assemble.MCP setWidgetData
Direct write from any MCP caller — your local dev script, a CI job, your agent on demand.
In-app edit
Hand-edit
widget.data in the Widget panel. Useful for prototyping.widget.data triggers an iOS silent push so the widget refreshes within seconds of the update.
What’s next
BYOK keys
Bring your own LLM key — required for scheduled runs that drive widget refreshes.
Scheduled runs
Cron-driven agent loops that keep widget data fresh.