| Tab | What it shows |
|---|---|
| Spec | Element tree rooted at spec.root. Expand to walk children. Selecting an element fills a detail pane with its full props, visibility condition, event bindings, watchers, and any issues reported by validateSpec. |
| State | Every leaf path in the state model listed via flattenToPointers. Click a value to edit inline — writes go through store.set, so conditional elements and computed props re-evaluate immediately. |
| Actions | Timeline of dispatched actions: name, params, result or error, duration. Newest first. Expand a row for the full JSON payload. |
| Stream | Patches, text chunks, token usage, and lifecycle markers from the AI generation stream. Grouped by generation. |
| Catalog | Components and actions declared in your catalog with prop chips and type hints. |
| Pick | Click any element in the page to surface its entry in the Spec tab. Works because the renderer transparently tags each element with data-jr-key while devtools is mounted. |
| Prop | Type | Default | Description |
|---|---|---|---|
spec |
Spec | null |
null |
The spec currently being rendered. |
catalog |
Catalog | null |
null |
Catalog definition — required for the Catalog panel. |
messages |
UIMessage[] |
undefined |
AI SDK useChat messages. Scanned for spec data parts and streamed into the Stream panel. |
initialOpen |
boolean |
false |
Start the drawer open. |
position |
"bottom-right" | "bottom-left" | "right" |
"bottom-right" |
Floating toggle button position. |
hotkey |
string | false |
"mod+shift+j" |
Keyboard shortcut. Use mod for Cmd on macOS / Ctrl elsewhere. Pass false to disable. |
bufferSize |
number |
500 |
Max events retained in the ring buffer. |
onEvent |
(evt: DevtoolsEvent) => void |
undefined |
Optional tap — fires for every event as it is recorded. Useful for forwarding to analytics. |