Site building
Component catalog
The host defines the json-render catalog that page specs are checked against and AI reads.
The engine stores specs but does not know your components. The host passes them through createCMS({ site }):
specValidator: checks page and layout specs (and spec fields) on save. Wrap your catalog's validation.specGuide: text describing the components and their props, served to AI as thecms://catalogMCP resource.themeSchema: a zod schema for the theme tokens.
createCMS({
db,
bucket: storage,
site: { specValidator: validateSiteSpec, specGuide, themeSchema },
})The reference app defines its catalog with defineCatalog from @json-render/core in src/site/catalog.ts (Section, Container, Stack, Grid, Heading, Text, RichText, DateText, Link, Button, Image, Card, Badge, Divider, CodeBlock, Icon, Hero, FeatureGrid, Steps, GroupedLinks, SiteHeader, SiteFooter, Outlet, ContactForm). The React implementations live in src/site/registry.tsx. Adding a component is a code change; using it is data.