Content relationships
Reuse one story across pages
How it works
What happens between an editor's change in Storyblok and the page you are reading.
Blocks are defined in one JSON file and pushed to the Storyblok space. TypeScript types are generated from the same file.
The Visual Editor opens the preview route, which checks the secret and the draft before it turns on Next.js draft mode.
Storyblok calls the revalidate route with the story slug. The route validates the payload and expires that story's cache tag.
The next request loads the published story from the Storyblok CDN and renders it as a React Server Component.
Published stories are cached per story. A publish expires one story in every language, so the rest of the site stays cached. Drafts are never cached, so the editor always sees the latest change.
The full request path is in docs/architecture.md.
The server registers the component map before rendering a story. Each block name in the CMS resolves to its implementation.
export function registerStoryblokComponents(): void {
setComponents(storyblokComponents);
}The block library renders every component once, labelled with its Storyblok name.