import Link from "next/link"; import { Button } from "@/components/ui/button"; import { Demo } from "@/components/demo"; import { Code } from "@/components/code"; import { CopyButton } from "@/components/copy-button"; export default function Home() { return ( <> {/* Hero */}

The framework for User-Generated Interfaces

AI → json-render → UI

Dynamic, personalized UIs per user without sacrificing reliability. Predefined components and actions for safe, predictable output.

npm install @json-render/core @json-render/react
{/* How it works */}
01

Define Your Catalog

Set the guardrails. Define which components, actions, and data bindings AI can use.

02

Users Generate

End users describe what they want. AI generates JSON constrained to your catalog. Every interface is unique to the user.

03

Render Instantly

Stream the response. Your components render progressively as JSON arrives.

{/* Code example */}

Define your catalog

Components, actions, and validation functions.

{`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.

{`{ "root": "dashboard", "elements": { "dashboard": { "type": "Card", "props": { "title": "Revenue Dashboard" }, "children": ["revenue"] }, "revenue": { "type": "Metric", "props": { "label": "Total Revenue", "valuePath": "/metrics/revenue", "format": "currency" } } } }`}
{/* Code Export */}

Export as Code

Export generated UI as standalone React components. No runtime dependencies required.

Generated UI Tree

AI generates a JSON structure from the user's prompt.

{`{ "root": "card", "elements": { "card": { "type": "Card", "props": { "title": "Revenue" }, "children": ["metric", "chart"] }, "metric": { "type": "Metric", "props": { "label": "Total Revenue", "valuePath": "analytics/revenue", "format": "currency" } }, "chart": { "type": "Chart", "props": { "statePath": "analytics/salesByRegion" } } } }`}

Exported React Code

Export as a standalone Next.js project with all components.

{`"use client"; import { Card, Metric, Chart } from "@/components/ui"; const data = { analytics: { revenue: 125000, salesByRegion: [ { label: "US", value: 45000 }, { label: "EU", value: 35000 }, ], }, }; export default function Page() { return ( ); }`}

The export includes{" "} package.json, component files, styles, and everything needed to run independently.

{/* Features */}

Features

{[ { title: "User-Generated Interfaces", desc: "Dynamic, personalized UIs per user powered by Generative UI", }, { title: "Guardrails", desc: "AI can only use components you define in the catalog", }, { title: "Streaming", desc: "Progressive rendering as JSON streams from the model", }, { title: "React & React Native", desc: "Render on web and mobile from the same catalog and spec format", }, { title: "Data Binding", desc: "Two-way state binding with dynamic prop expressions", }, { title: "Code Export", desc: "Export as standalone React code with no runtime dependencies", }, ].map((feature) => (

{feature.title}

{feature.desc}

))}
{/* CTA */}

Get started

npm install @json-render/core @json-render/react
); }