Composition Concepts

View as Markdown
Last updated July 17, 2026

Everything you build in Studio is a composition, a saved layout tree of components and the data bindings that drive them.

Headless principle. A composition lives in Studio + Contentstack. It does not serve HTML on its own. Your app's framework still serves every page — Studio supplies the composition spec, components, and bindings via sdk.fetchCompositionData(...). A composition with url: "/blog/post-1" exists in the CMS, but visitors hitting /blog/post-1 only see content if your app has a route that receives the request and renders <StudioComponent specOptions={...} />.

By default, one catch-all route in your app handles every URL that Studio compositions map to. See Wire template preview routes for the setup.

Compositions come in two flavors:

FlavorWhat it isURLTied to an entry?
TemplateA full page connected to a content typeYes, derived from the content typeYes
SectionA reusable block dropped inside a templateNone, previews on the project's canvas URLOptional, via a linked schema (a Contentstack content type that the section binds its props to, see Linked schema)

You pick the flavor when you create a composition. It decides where the composition can be used, what URL it gets, and what data it can bind to.

The Composition List

Every Studio project has a Compositions list with two tabs.

Click to enlarge

  • Templates tab: pages connected to a content type.
  • Sections tab: reusable blocks.

The button at the top changes label per tab: + New Template vs + New Section.

Click to enlarge

Where Compositions Render

FlavorRendered byAt what URL
Template<StudioComponent />The catch-all route on your site, default: ONE route handles every URL (app/[[...slug]]/page.tsx for Next.js, <Route path="*"> for React Router). Note: Studio's CDA lookup (which template to render) is separate from your app's route matching — the CDA resolves the composition by URL, then your route renders it.
Section<StudioCanvas /> (Studio iframe) AND embedded inside a template when dropped on a pageSections have no URL of their own, they live wherever the template that uses them appears

What Else Is in This Chapter

The composition concept underlies the whole canvas. Five more pages cover canvas-wide topics that aren't specific to templates or sections:

PageCovers
Canvas URLThe project-level path used for section preview
CMS BindingHow component props pull data from Contentstack instead of literal values
Design PanelRight-panel styling controls, colors, spacing, typography, breakpoints
LayersThe left-panel layer tree, navigate and rename composition structure
Save vs DeployThe Save, Deploy, published cycle