@json-render/vue
Vue 3 renderer that converts JSON specs into Vue component trees with data binding, visibility, and actions.
Installation
Peer dependencies: vue ^3.5.0 and zod ^4.0.0.
Quick Start
Create a Catalog
Define Registry with h() Render Functions
Named Slots
Use children for the "default" slot. Use the element's top-level slots object for other slot names declared by the catalog:
Registry components receive Vue-native slot functions. Render them with slots.header?.(), slots.footer?.(), and so on. slots.default?.() renders the spec's children; the children context field is a convenience alias for that rendered result. In the JSON spec, keep default content in children rather than adding a default entry to slots.
Render Specs
Providers
Composables
Note: useStateStore().state returns a ShallowRef<StateModel> — use state.value to access.
External Store (StateStore)
Nested lists can set repeat.statePath to { "$item": "field" } inside an enclosing repeat.
Pass a StateStore to StateProvider to wire json-render to Pinia, VueUse, or any state management:
Dynamic Prop Expressions
Props support $state, $bindState, $cond, $template, $computed. Use { "$bindState": "/path" } on the natural value prop for two-way binding.
Visibility Conditions
Built-in Actions
setState, pushState, removeState, and validateForm are built into the Vue schema and handled by ActionProvider:
Event System
Components use emit(event) to fire events, or on(event) for metadata (shouldPreventDefault, bound).
Streaming
useUIStream and useChatUI return Vue Refs for streaming specs from an API.
BaseComponentProps
For catalog-agnostic reusable components:

