
Devtools
Add a floating json-render inspector to debug generative UI specs, runtime state, streams, and actions while building.
Install
npx skills add https://github.com/vercel-labs/json-render --skill devtoolsWhat is this skill?
- Drop-in JsonRenderDevtools inside JSONUIProvider for React, Vue, Svelte, and Solid adapters
- Inspect spec tree, runtime state edits, dispatched actions, and live stream patches
- DOM pick-to-spec-key, catalog browse, and action log capture for `@json-render/devtools`
- Renders null in production when NODE_ENV is production for safe shipping
Adoption & trust: 306 installs on skills.sh; 15k GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Frontend Designanthropics/skills
Vercel React Best Practicesvercel-labs/agent-skills
Remotion Best Practicesremotion-dev/skills
Vercel Composition Patternsvercel-labs/agent-skills
Develop Userscriptsxixu-me/skills
Next Best Practicesvercel-labs/next-skills
Journey fit
Primary fit
Generative UI debugging happens while you are building and iterating on json-render frontends, before you ship opaque broken trees to users. The skill is explicitly for `@json-render` apps—spec trees, renderers, and framework adapters—core frontend agent-UI work.
Common Questions / FAQ
Is Devtools safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Devtools
# @json-render/devtools A floating inspector panel for json-render apps. Framework-agnostic core + per-framework adapters (React, Vue, Svelte, Solid). Production-safe: the component renders `null` when `NODE_ENV === "production"`. ## Install Install the core package plus the adapter that matches the host app's renderer. ```bash # React npm install @json-render/devtools @json-render/devtools-react # Vue npm install @json-render/devtools @json-render/devtools-vue # Svelte npm install @json-render/devtools @json-render/devtools-svelte # Solid npm install @json-render/devtools @json-render/devtools-solid ``` ## Drop-in usage Place `<JsonRenderDevtools />` anywhere inside the existing `<JSONUIProvider>` (or framework equivalent). No other wiring required. ### React ```tsx import { JsonRenderDevtools } from "@json-render/devtools-react"; <JSONUIProvider registry={registry} handlers={handlers}> <Renderer spec={spec} registry={registry} /> <JsonRenderDevtools spec={spec} catalog={catalog} messages={messages} /> </JSONUIProvider>; ``` ### Vue ```vue <script setup> import { JsonRenderDevtools } from "@json-render/devtools-vue"; </script> <template> <JSONUIProvider :registry="registry"> <Renderer :spec="spec" :registry="registry" /> <JsonRenderDevtools :spec="spec" :catalog="catalog" :messages="messages" /> </JSONUIProvider> </template> ``` ### Svelte ```svelte <script> import { JsonRenderDevtools } from "@json-render/devtools-svelte"; </script> <JSONUIProvider {registry}> <Renderer {spec} {registry} /> <JsonRenderDevtools {spec} {catalog} {messages} /> </JSONUIProvider> ``` ### Solid ```tsx import { JsonRenderDevtools } from "@json-render/devtools-solid"; <JSONUIProvider registry={registry}> <Renderer spec={spec()} registry={registry} /> <JsonRenderDevtools spec={spec()} catalog={catalog} messages={messages()} /> </JSONUIProvider>; ``` ## Controls - Floating toggle appears bottom-right. - Hotkey: `Ctrl`/`Cmd` + `Shift` + `J` (configurable via `hotkey` prop). - Drawer is resizable; height persists to localStorage. ## Props - `spec` (`Spec | null`) — current spec. - `catalog` (`Catalog | null`) — catalog definition; required for the Catalog panel. - `messages` (`UIMessage[]`) — AI SDK `useChat` messages; scanned for spec data parts. - `initialOpen` (`boolean`) — start open. - `position` (`"bottom-right" | "bottom-left" | "right"`) — dock + toggle corner. `"bottom-*"` docks at the bottom; `"right"` docks at the right edge full-height (recommended for app-shells that already use `100vh` or fixed bottom bars). - `hotkey` (`string | false`) — `"mod+shift+j"` by default. - `bufferSize` (`number`) — event ring-buffer cap, default 500. - `reserveSpace` (`boolean`, default `true`) — when true the panel pushes the host app by applying `padding-bottom` / `padding-right` on `body`. Set to `false` to keep the panel as a pure overlay. - `allowDockToggle` (`boolean`, default `true`) — show a toolbar button so the user can flip the panel between bottom-dock and right-dock. User choice persists to `localStorage` and overrides `position` on subsequent mounts. Pass `false` to lock the dock to `position`. - `onEvent` (`(DevtoolsEvent) => void`) — optional tap. ## Panels - **Spec** — element tree rooted at `spec.root`; props/visibility/events/watchers detail; integrated `validateSpec` warnings. - **State** — every JSON Pointer path with inline edit via `store.set`. - **Actions** — dispa