Freeform Templates
A Freeform template is a template in Studio that isn't connected to any content type. Use it for one-off templates: landing templates, campaign templates, "About us", "Contact us".
You can still drop sections and components, and pull data via Pinned Entries and Pinned Queries. What you can't do is bind to a single entry, because there isn't one.
What Freeform Gives You
- Speed. Create a template without modeling a content type first.
- Independence. Useful for templates that don't fit your content model, or where the marketing team needs to move ahead of schema work.
- Same canvas, same components, same sections. The authoring experience is identical to a Connected template.
- Pinned data. Pull specific entries or query results onto the template without owning a "the entry for this template" relationship.
When to Choose Freeform vs. Connected
| Use Freeform when… | Use Connected when… |
|---|---|
| The template is one-off and won't repeat | The template is one of many entries of the same shape |
| You don't have a content type modelled yet | You already have a CT for this content |
| Content is pulled from several places | Content is driven by exactly one entry per URL |
| Authors want layout control more than data structure | Authors want consistent rendering of structured data |
What the Canvas Looks Like
A Freeform template's top bar is subtly different from a Connected template's:
- A FREEFORM MODE badge replaces the content type chip
- PREVIEW COMPOSITION: label instead of PREVIEW ENTRY:, because the preview drives off the composition itself, not an entry
Otherwise the canvas behaves the same: same palette, same right-panel tabs. When nothing is selected on the canvas, the Data tab shows three template-level sections: Additional Entry Data, Queries, and External Data. (These sections aren't a separate tab; they live inside the Data tab.) See The Data tab.
Terminology note: Studio's "New Template" modal labels the Freeform option as "Static Template" in the create flow. Once created, the same template's canvas header shows the "FREEFORM MODE" badge. Both labels refer to the same thing; this doc set calls it Freeform throughout, matching the canvas badge that's the more visible surface for authors.
URL Generation
Studio auto-generates a default URL for every Freeform template:
/<project-composition-ct-uid>/<composition-uid>
Studio substitutes the actual project composition content-type UID and composition UID at creation time; these are concrete values in the stored URL, not {{...}} template variables. The only Freeform-specific template variable available for hand-editing is {{composition_uid}}. This URL identifies the composition itself, not an entry. You can edit it from the canvas navbar's pencil icon.
Notice the modal offers only one insert chip: {{composition_uid}}. Studio deliberately does not show {{entry.title}}, {{entry.url}}, or any other entry-related variable here because a Freeform template is not bound to any entry. The URL pattern can include {{environment}}, {{branch}}, {{content_type_uid}} typed by hand, but anything that tries to read an entry field fails to resolve at render time. ({{locale}} is accepted by the pattern engine but avoid using it: carry locale via your routing layer and the SDK's locale query option, see Multi-locale at scale.)
URL Variables Available in Freeform
| Variable | Available? |
|---|---|
| {{entry.<field>}} | ❌: there's no entry |
| {{entry.<reference>.<field>}} | ❌ |
| {{taxonomy:<uid>}} | ❌ |
| {{environment}} | ✅ |
| {{locale}} | ⚠ accepted by pattern engine, but avoid; use routing-layer + SDK locale query option instead for consistency at scale |
| {{branch}} | ✅ |
| {{content_type_uid}} | ✅ |
| {{composition_uid}} | ✅: the only entry-style variable Freeform supports |
The Insert chip row in the Edit URL modal shows only {{composition_uid}} for Freeform. Other context variables can be typed manually.
Where Freeform Templates Render
Same as Connected templates: at the URL the composition's pattern resolves to, on a route in your site that mounts <StudioComponent />.
If the template doesn't load, check that the route exists, that it mounts <StudioComponent />, and that the composition's URL pattern matches the route's path shape.
Getting Data onto a Freeform Template
Three sources, all available:
| Source | When to use |
|---|---|
| Pinned Entries | Pin specific entries, e.g. a hero entry, a featured product, a testimonial. Bindings reference them by their pinned slot. |
| Pinned Queries | Pin a query result for a Repeater to iterate. |
| Component default data | Your custom components ship with sensible defaults. Useful for purely presentational content. |