import { Code } from "@/components/code"; export const metadata = { title: "Changelog | json-render", }; export default function ChangelogPage() { return (

Changelog

Notable changes and updates to json-render.

v0.3.0

February 2026

New: Custom Schema System

Create custom output formats with defineSchema. Each renderer now defines its own schema, enabling completely different spec formats for different use cases.

{`import { defineSchema } from "@json-render/core"; const mySchema = defineSchema((s) => ({ spec: s.object({ pages: s.array(s.object({ title: s.string(), blocks: s.array(s.ref("catalog.blocks")), })), }), catalog: s.object({ blocks: s.map({ props: s.zod(), description: s.string() }), }), }), { promptTemplate: myPromptTemplate, });`}

New: AI Prompt Generation

Catalogs now generate AI system prompts automatically with{" "} catalog.prompt(). The prompt includes all component definitions, props schemas, and action descriptions - ensuring the AI only generates valid specs.

{`import { defineCatalog } from "@json-render/core"; import { schema } from "@json-render/react/schema"; const catalog = defineCatalog(schema, { components: { /* ... */ }, actions: { /* ... */ }, }); // Generate system prompt for AI const systemPrompt = catalog.prompt(); // Use with any AI SDK const result = await streamText({ model: "claude-haiku-4.5", system: systemPrompt, prompt: userMessage, });`}

New: SpecStream

SpecStream is json-render's streaming format for progressively building specs from JSONL patches. The new compiler API makes it easy to process streaming AI responses.

{`import { createSpecStreamCompiler } from "@json-render/core"; const compiler = createSpecStreamCompiler(); // Process streaming chunks const { result, newPatches } = compiler.push(chunk); setSpec(result); // Update UI with partial result`}

New: @json-render/codegen

Export specs as React code. Traverse specs and serialize them to JSX for code export features.

{`import { traverseSpec, serializeToJSX } from "@json-render/codegen"; const jsx = serializeToJSX(spec, catalog); // Returns:
); }