Migration Guide
What to expect when moving templates from another platform to Quill.
If you have worked with Liquid before, Quill will feel familiar. The tag and filter syntax is the same. This guide covers the differences so you know what to adjust.
What stays the same
The core syntax transfers directly:
- Output tags:
{{ variable }} - Logic tags:
{% if %},{% for %},{% case %} - Filters:
| upcase,| money,| date - Whitespace control:
{%- -%}and{{- -}} - Comments:
{% comment %}...{% endcomment %} - Variable assignment:
{% assign %},{% capture %} - Looping:
{% for %}withforloopvariables - Includes:
{% render %}withwith,for, and named arguments
What is different
Context objects
The main difference is the data model. Quill has its own object names and properties:
| Liquid (other platforms) | Quill | Notes |
|---|---|---|
shop | store | Same data, different name |
shop.money_format | Handled by money filter | No format string needed |
article | page | Blog articles map to pages |
linklist | linklists or menus | Both names work |
Product, collection, cart, and customer objects use the same names and the same properties.
Media filters
Image handling uses the QUANTM7 CDN instead of third-party image services:
{{ product.featured_image | img_url: '400x400' }}The syntax is the same. The output URL points to the QUANTM7 CDN. Image resizing happens on the fly.
The image_tag filter generates a full <img> element with srcset, sizes, and lazy loading built in. This is more complete than what most Liquid platforms offer.
Money filters
Money filters read your store's currency settings. Prices are stored in the smallest currency unit (pence, cents). The money filter handles the conversion and formatting.
Multi-currency support is built in. When a visitor picks a different currency, the money filter uses the converted value and the correct symbol. No extra code is needed.
Section schema
The section schema system will be familiar if you have used Liquid-based platforms. The setting types are the same. The visual editor reads the schema and builds the settings form.
One addition: Quill supports the product_list type for selecting multiple products at once:
{ "type": "product_list", "id": "products", "label": "Featured products" }Translation
The t filter works the same way. Locale files use the same JSON format with nested keys:
{{ 'product.add_to_cart' | t }}Quill supports variable interpolation in translations:
{ "cart.item_count": "{{ count }} items in your cart" }{{ 'cart.item_count' | t: count: cart.item_count }}Features not in Quill
A few features you may be used to from other platforms are not available yet:
- Metaobjects as standalone template types (metafields on products, collections, and customers work normally)
- Section rendering API for loading sections via AJAX
- Predictive search API (handled through the platform's own search system)
These may be added in future releases.
Migrating a template
To move a template from another platform to Quill:
- Copy the template code. The tag and filter syntax is the same.
- Replace
shopwithstoreif used. - Check image URLs. Replace any platform-specific image CDN helpers with
img_urlandimage_tag. - Test the
moneyfilter. Prices in Quill are in the smallest unit, so confirm the values are correct. - Update any platform-specific includes (like
content_for_index) with the Quill equivalents. - Move locale files to
locales/and confirm the keys match yourtfilter calls.
Most templates will work with minimal changes. The biggest adjustment is usually image handling and money formatting.