Section slots require container rendering and editor authoring support in your environment. Adding a file to your local theme does not install or publish it in a company’s theme.
Understand the building blocks
Your templates remain Liquid. The JSON inside
{% schema %} stores declarations or configuration; it is not a JSON template migration. Do not create Shopify-style JSON section-group files for this feature.
Navbar and footer templates remain separate from page containers, including country-specific variants. They are not eligible slot children.
Create your first container
Createsections/editorial_grid/index.liquid in your theme:
slots array declares the available drop targets. Each {% section_slot 'main' %} tag renders the corresponding slot and its assigned children at that position in your markup.
Create assets/section-editorial-grid.css:
Follow the slot contract
- Give each slot a unique, stable ID and a readable name.
- Use 1–64 ASCII letters, numbers, underscores, or hyphens for slot and section instance IDs. Avoid the reserved identifiers
__proto__,constructor, andprototype. - Pass a quoted literal to the tag. Dynamic slot names are not supported.
- Declare every rendered slot in the section schema, and render each slot once.
- Keep slot IDs stable after publishing. Renaming a slot requires updating its saved assignments too.
Add sections in the editor
After installing the container and its stylesheet in your target theme:- Open a compatible page in the Page Editor.
- Add the container from Sections.
- Drag a new section into a slot in the preview, or move an existing page section into it.
- Use Layers to inspect nested sections, reorder them, or move them between slots and back to the page.
- Edit each child’s settings and blocks as you would for a root section.
- Save, reload, and inspect the result before publishing.
Slot placement does not remove a section’s page-type requirements. A section that needs product context still needs a product page. Also test its CSS at the slot’s width: a full-width hero does not automatically become a compact card.
See the saved Liquid template
The editor keeps all section instances in the page schema’s flatsections map. A container instance’s slots object points to child IDs; it does not embed child objects.
Here is a complete minimal page body. It assumes you have installed the editorial grid above and the text section below. Preserve any existing layout declaration or surrounding page markup when adapting it.
sections/editorial_text/index.liquid:
"disabled": true on its section instance. Use the editor’s hide/show controls when moving between root and nested placements, so the saved visibility representation stays consistent.
Do not confuse the two slots shapes
Design a five-slot showcase
You control slot placement through ordinary HTML and CSS. This example gives you one large feature panel and four supporting panels. It uses container width, rather than viewport width, so the layout can also adapt when nested. Createsections/panel_showcase/index.liquid:
assets/section-panel-showcase.css:
Style the generated wrapper
The slot tag generates this wrapper; you do not write it yourself:Reuse and nesting
You can place the same container definition more than once. Each placement has independent settings and child assignments. This is reusable layout code, not globally synchronized content. Publishing an updated shared definition changes the layout used by its placements. Changing one placement’s child settings does not update another placement. When adding a slot to an already-used definition, initialize its assignment array in every existing placement too—for example,"new_slot": []. Publishing the definition alone does not add that assignment to saved instances. Before removing a slot, move or deliberately remove its assigned children; do not leave them stranded in the page configuration.
A slot can contain another container. Keep these limits in mind:
Ordinary child sections can sit inside the fourth container level; a fifth container level is not supported. Use separate child instances if you need similar content in multiple slots.
The renderer skips missing, disabled, invalid, or already-claimed child references. Do not rely on that behavior to repair a malformed template: validate ownership, IDs, and limits before saving generated content.
Install and publish safely
- Confirm that the environment supports both container rendering and editor authoring.
- Install the container definition, its stylesheet, and any new child definitions in the intended company’s theme. Use your existing theme development workflow.
- Verify that the editor is using that theme and that the required definitions are published for rendering.
- Add a container to a draft page. Test empty and populated slots, nested placements, and narrow widths.
- Save and reload. Confirm that child order, settings, and blocks persist.
- Preview and publish through your normal Page Editor workflow.
Troubleshoot a container
Implementation checklist for coding agents
Treat this page as the section-slot contract. Read the target theme before editing it, and preserve its existing conventions and content.- Confirm feature availability; do not infer it from the presence of this guide.
- Keep templates in Liquid. Do not introduce JSON template or section-group files.
- Create an ordinary section definition with a schema slot array and matching literal slot tags.
- Design responsive geometry in scoped CSS; use the target theme’s tokens where available.
- Keep instances in the flat sections map. Store only ordered child IDs in instance slot assignments.
- Emit root section tags only for root placements. Preserve child settings, blocks, and ordering when moving instances.
- Generate unique instance IDs. Validate one-parent ownership, no cycles, and the documented limits.
- Do not nest navbar or footer templates, or bypass page-type compatibility.
- Do not rename existing slot IDs without migrating their assignments.
- Test drag-and-drop, move-to-root, hide/show, duplicate/delete, undo/redo, save/reload, and published rendering.
- Check an unchanged flat page and country-specific navbar/footer output for regressions.
- Report which files changed and which checks ran. Installing files, publishing a theme, and publishing a page are separate actions; confirm the target and authorization before each remote change.