packages/shared/src/blocks/ (schemas + field metadata) and rendered by packages/blocks/src/blocks/ (React components + CSS).
When to use built-ins vs. your own components
On a site that already exists, your own components are the blocks. The built-ins are a starting catalogue for sites built from scratch — they are not the thing you are expected to rebuild your site out of. See Custom blocks.
- Bring your own when you have an existing component library or design tokens to preserve — which is the usual case. Register the components you already ship and declare which of their props are content.
- Use the built-ins when you are scaffolding a new site and want a content model without designing one. They cover the common marketing and landing patterns and are fully wired into the AI planner, asset manager, and preview overlay.
- Mix them. Built-ins and your own blocks coexist in one manifest.
Catalogue
Content
Conversion
Media
Layout
Navigation (chrome)
These blocks are structurally pinned — they cannot be added, moved, or removed by the AI. Every page has exactly one of each, and they render as global chrome.Field types you’ll see
Each block declares per-field metadata (kind) that drives editor UI, AI behavior, and inline editability:
reference is deliberately read-only. A CMS reference is a pointer — Storyblok’s { linktype, id, cached_url }, a Contentful entry link, a Sanity reference — not an href. Flattening one to a string breaks renames and makes the publish diff report the field as changed forever, so the panel shows the target and refuses the edit rather than corrupting it.inlineEditable: false says a string is not edited in place; panelOnly says nothing on the page draws it, which takes it out of the coverage denominator; and internal: true marks a prop the storage system owns (a Storyblok _uid, a Contentful sys) so no surface shows it to a person and no planner is told it exists.
See Block System Architecture for the full vocabulary and the lifecycle from definition to render, and Coverage checks for how the flags affect the numbers.
Extending the set
Register your own blocks
Author blocks in your own repo from components you already have, and expose them through your manifest. This is the normal path.
Declare a CMS-backed model
One field table derives the schema, the panel metadata, the projection out of your CMS and the merge back into it.