JSON becomes UI
Define a catalog. AI generates JSON. Your components render natively.
Try: "Create a login form" or "Build a feedback form with rating"
render
waiting...
01
Define Catalog
Specify which components AI can use with Zod schemas. Full type safety and validation.
02
Register Components
Map catalog types to your React components. Use your own design system.
03
Let AI Generate
AI outputs JSON matching your schema. Stream it. Render progressively.
Define your catalog
Components, actions, and validation functions. All type-safe with Zod.
import { createCatalog } from '@json-render/core';
import { z } from 'zod';
export const catalog = createCatalog({
components: {
Card: {
props: z.object({
title: z.string(),
description: z.string().nullable(),
}),
hasChildren: true,
},
Metric: {
props: z.object({
label: z.string(),
valuePath: z.string(),
format: z.enum(['currency', 'percent']),
}),
},
},
actions: {
export: { params: z.object({ format: z.string() }) },
},
});AI generates JSON
Constrained output that your components render natively.
{
"key": "dashboard",
"type": "Card",
"props": {
"title": "Revenue Dashboard",
"description": null
},
"children": [
{
"key": "revenue",
"type": "Metric",
"props": {
"label": "Total Revenue",
"valuePath": "/metrics/revenue",
"format": "currency"
}
}
]
}Features
Guardrails
AI can only use components you define in the catalog
Streaming
Progressive rendering as JSON streams from the model
Data Binding
Two-way binding with JSON Pointer paths
Actions
Named actions handled by your application
Visibility
Conditional show/hide based on data or auth
Validation
Built-in and custom validation functions