Skip to content

Liquid tags

Sellerlane themes use liquidjs with a set of Shopify-parity theme tags layered on top. Standard control flow works as expected, plus the tags below for sections, snippets, blocks, and section-scoped assets.

Standard Liquid tags

All standard liquidjs control-flow and variable tags are available, so you have the full Liquid surface:

if · unless · case / when · for · tablerow · assign · capture · increment · decrement · cycle · liquid · echo · raw · comment / #.

The legacy {% include %} tag is not allowed inside snippets rendered with {% render %} — use render instead.

Sellerlane theme tags

TagDescription
formBuilds localized, CSRF-protected storefront forms for cart, product, contact, passwordless customer, address, language, comment, quote, and stock workflows.
sectionRenders a single section file from sections/.
sectionsRenders a section group (e.g. the header or footer group).
renderRenders a snippet with an isolated scope.
paginateSplits a large list into pages and exposes the paginate object.
schemaDefines a section’s settings, blocks, and presets as JSON.
javascriptSection-scoped JavaScript, loaded once per section type.
stylesheetSection-scoped CSS, loaded once per section type.
styleInline <style> block that supports Liquid — ideal for settings-driven CSS.
content_forRenders a section’s theme blocks. See the two forms below.
docInline documentation block — stripped from output.

content_for has two forms

The content_for tag renders theme blocks inside a section (or a theme block file). It takes a required first argument that must be the string literal 'blocks' or 'block':

  • {% content_for 'blocks' %} renders all of the section’s theme blocks in their saved order — the merchant adds, removes, and reorders them in the visual editor.
  • {% content_for 'block', type: 'name', id: 'unique-id' %} renders a single static block of a given type at a fixed position. Both type and id must be plain string literals (no embedded {{ }}), and the id must be unique within the same parent.

{% content_for 'block' %} is only valid inside section files and theme block files, and the requested type must be targeted by the current schema’s blocks definition (or @theme). 'blocks' only renders theme blocks — sections that define local blocks must iterate over section.blocks instead.

Apps are not supported

This storefront runtime does not run app blocks or app sections. Block or section types of @app (or any type containing ://) raise an “Apps are not supported” error, and {% sections %} of an app section group is unavailable. Build with native theme sections and blocks only.

render scope semantics

{% render %} runs a snippet in an isolated scope: it cannot see the variables of the calling template. Pass everything it needs explicitly.

  • {% render 'card' %} — renders snippets/card.liquid with no inherited locals.
  • {% render 'card', title: product.title, badge: 'New' %} — passes named arguments as locals.
  • {% render 'card' with product as item %} — passes a single value under an alias (defaults to the snippet name if as is omitted).
  • {% render 'card' for products as item %} — renders the snippet once per item, exposing a forloop object.

For Shopify parity, the snippet name must be a quoted string literal — dynamic {% render variable %} names are disabled.

Next steps