FleekSiteFLEEKSITE
On this section
Getting started

Render modes.

Every site renders in one of two modes. It is a single field on the site, and it decides a handful of behaviours you will meet all through this reference. New sites use standard; older sites stay on compat until they are deliberately reworked.

FleekSite renders every page with one Liquid engine. That engine can behave in two ways:

  • Standard is standard, Shopify-compatible Liquid, as close to the reference as the platform gets. Filters behave the way every Liquid guide says, a mistyped tag shows up instead of vanishing, and native {% include %} and {% render %} compose your own templates.
  • Compat reproduces the older engine the platform migrated from, byte for byte. Sites that were built and tuned against that engine keep rendering exactly as before, quirks and all.

If you are building something new, you are on standard. Sites created through sign-up are set to standard from the first render. The rest of this page is mostly a reference for what changes when you meet a compat site, and why.

The flag

The mode is the render_mode field on the site record: the string compat or standard. Anything that is not exactly standard, an empty value, a missing field, an unknown word, resolves to compat, so a site can never render in an undefined state.

ValueApplies toBehaviour
standardNew sites, by defaultStandard Liquid. The recommended mode for anything built today.
compatSites that predate the changeThe migration baseline. Output does not move.

There is no template-facing switch for this. A site is moved to standard by a staff or rework flow, once its templates have been checked against standard behaviour. Reading the mode from a template is not something you normally need to do; the mode changes how your Liquid runs, not what your Liquid can see.

What standard changes

Standard mode fixes each of the following. Compat keeps the older behaviour on purpose.

AreaCompatStandard
truncateOff-by-a-few boundary; truncates a string that already fitsThe LiquidJS built-in
truncatewordsSplits on single spaces; ellipsis hardcodedThe LiquidJS built-in
upcaseCoerces any input through String()The LiquidJS built-in
Unknown {% tag %}Silently stripped from the outputSurfaced: left in place and logged, so you see it
{% bit name %}Renders nothingRenders the bit value
{% include %} / {% render %}Render nothing (deny-all filesystem)Resolve against your site templates
{% layout %}Renders nothingReserved Coming (see below)
og:image on a cover-less postEmits an invalid URLFalls back to the site logo
twitter:description on a postUses the site about textUses the post teaser
Post meta title / descriptionIgnoredHonoured
Organisation JSON-LD phoneA hardcoded numberThe site mobile number
Article JSON-LDSwapped dates, wrong keys, null authorCorrect dates, keys and author
PWA manifest linkEmitted twiceEmitted once

Unknown tags and typos

This is the difference you will feel most while writing. In compat, a tag the engine does not recognise is deleted from the output before the page renders. A typo like {% collektion posts %} produces nothing, with no clue why. In standard, the same typo is left in place in the output and written to the logs, so the empty space on the page points straight at the mistake.

Either way the page still renders. A single broken tag never takes down the whole page in either mode; the rest of the template around it renders normally.

Includes and the filesystem

Standard mode wires the native {% include %} and {% render %} tags to your site's own templates: the name resolves to the template with that title. Compat leaves those tags inert, so older sites compose pages with the {% partial %} tag instead. {% partial %} works in both modes. See Partials and includes for the full picture, including the cycle budget and why {% render %} is isolated.

One security rule holds in both modes: neither engine can read the server disk. {% include '.env' %} looks for a template named .env on your site, finds none, and renders empty. It never touches a real file.

What is the same in both modes

A few behaviours are not tied to the mode, because they are correct or safe regardless:

  • UTC dates. Datetimes format as UTC wall-clock time, so a date does not shift by the server's zone.
  • The deny-all disk. The filesystem security above.
  • Object output as JSON. Printing an object, like {{ site }}, emits JSON rather than [object Object].
  • The || and && shim. JavaScript-style operators in an expression are rewritten to Liquid ones before parsing, and string literals are left alone.

The Liquid overview covers these engine behaviours in detail.

A note on the layout tag

The standard {% layout %} tag and its content_for_layout slot are Coming, not shipped. Today, in standard mode, the tag resolves against your templates but drops the wrapped body, so do not build on it yet. Compose your page chrome with partials or type-based layouts for now. The layout tag reference describes the planned model.