Mastering Shopify’s Liquid Templating Language: A Comprehensive Guide

Liquid Template feature within Cloudmattr

As a marketer, you’re likely familiar with Shopify, one of the most popular e-commerce platforms that powers millions of online stores. And if you’re looking to customize your Shopify store, you’ll need to become proficient in Liquid, Shopify’s templating language. In this comprehensive guide, we’ll cover every part of Liquid, providing code examples to help you leverage its power to create stunning and dynamic online experiences for your customers.

What is Liquid? Liquid is a lightweight templating language that Shopify uses to render dynamic content on web pages. It’s a flexible and easy-to-use language that allows you to create dynamic templates for your Shopify store, from simple snippets to complex pages. Liquid is designed to be safe, meaning that it doesn’t allow arbitrary code execution or access to potentially sensitive information, making it a secure option for customizing your online store.

Syntax Basics

Let’s start with the basics of Liquid syntax. Liquid uses double curly braces {{ }} to output variables, and curly braces with percentage signs {% %} to denote control flow statements. Here are some common Liquid syntax elements:


Variables allow you to display dynamic content on your Shopify store. You can output variables using double curly braces {{ }}. For example:

<h1>{{ product.title }}</h1>
<p>{{ product.description }}</p>


Filters allow you to modify variables before displaying them. Filters are separated by a pipe | character. For example:

<p>{{ product.price | money }}</p>

Control Flow Statements

Liquid supports common control flow statements like if, for, and case. For example:

{% if product.available %}
  <p>This product is available.</p>
{% else %}
  <p>This product is out of stock.</p>
{% endif %}


Loops allow you to iterate over collections of data, such as products or collections. For example:

{% for product in products %}
  <h3>{{ product.title }}</h3>
{% endfor %}


Comments allow you to add notes in your Liquid code that won’t be rendered on the web page. Comments start with {% comment %} and end with {% endcomment %}. For example:

{% comment %}
This is a comment.
{% endcomment %}

Advanced Liquid Features In addition to the basic syntax, Liquid also offers advanced features that allow you to create more complex and dynamic templates.


Objects in Liquid represent data that you can access and manipulate. There are several built-in objects in Liquid, such as product, collection, and cart. For example:

<p>{{ product.title }}</p>
<p>{{ collection.products_count }}</p>
<p>{{ cart.total_price }}</p>


Liquid operators are a set of built-in functions and filters in the Liquid template language that are used to perform various operations on data within a template. They are commonly used in web development, particularly in content management systems (CMS) that utilize the Liquid template engine. Here is a list of some commonly used Liquid operators along with their definitions and examples of when to use each one:

Arithmetic Operators

  • +: Adds two values together. Example: {{ 5 + 3 }} outputs 8.
  • -: Subtracts one value from another. Example: {{ 10 - 5 }} outputs 5.
  • *: Multiplies two values. Example: {{ 2 * 3 }} outputs 6.
  • /: Divides one value by another. Example: {{ 10 / 2 }} outputs 5.
  • %: Returns the remainder of a division operation. Example: {{ 10 % 3 }} outputs 1.

Comparison Operators

  • ==: Checks if two values are equal. Example: {{ 5 == 5 }} outputs true.
  • !=: Checks if two values are not equal. Example: {{ 5 != 3 }} outputs true.
  • <: Checks if the first value is less than the second value. Example: {{ 3 < 5 }} outputs true.
  • >: Checks if the first value is greater than the second value. Example: {{ 5 > 3 }} outputs true.
  • <=: Checks if the first value is less than or equal to the second value. Example: {{ 3 <= 3 }} outputs true.
  • >=: Checks if the first value is greater than or equal to the second value. Example: {{ 5 >= 3 }} outputs true.

Logical Operators

  • and: Returns true if both operands are true. Example: {{ true and false }} outputs false.
  • or: Returns true if either operand is true. Example: {{ true or false }} outputs true.
  • not: Returns the logical negation of a value. Example: {{ not true }} outputs false.

String Operators

  • |: Applies a filter to a value. Filters are used to modify the output of a value. Example: {{ "hello" | upcase }} outputs HELLO.
  • ~: Concatenates two strings. Example: {{ "hello" ~ "world" }} outputs helloworld.
  • contains: Checks if a string contains a substring. Example: {{ "hello" contains "ell" }} outputs true.

Array Operators

  • size: Returns the number of items in an array. Example: {{ my_array | size }} outputs the length of my_array.
  • first: Returns the first item in an array. Example: {{ my_array | first }} outputs the first item in my_array.
  • last: Returns the last item in an array. Example: {{ my_array | last }} outputs the last item in my_array.
  • join: Joins the items of an array into a string using a separator. Example: {{ my_array | join: ", " }} joins the items in my_array with a comma and a space separator.

Other Operators

  • default: Returns a default value if a variable is not defined or is empty. Example: {{ my_variable | default: "N/A" }} outputs the value of my_variable or “N/A if it is not defined.
  • empty: Checks if a value is empty or has no content. Example: {{ my_variable | empty }} returns true if my_variable is empty or false if it has content.
  • truncate: Truncates a string to a specified length. Example: {{ "Hello world" | truncate: 5 }} outputs "Hello...".
  • date: Formats a date or time string. Example: {{ my_date | date: "%Y-%m-%d" }} formats my_date as a date string in the format YYYY-MM-DD.
  • url_encode: URL encodes a string. Example: {{ "Hello world" | url_encode }} outputs "Hello%20world".

These are just some of the commonly used Liquid operators available in the Liquid template language. They can be used to manipulate data, perform calculations, compare values, format strings, and more within Liquid templates, making them powerful tools for building dynamic web content and customizing the output of a CMS or other web applications.


Tags in Liquid are used to perform actions or create logic in your templates. For example, you can use tags to create conditional logic, define variables, or include other templates. Here are some examples:

{% assign discount = 0.2 %}
{% if product.price > 100 %}
  <p>This product is on sale! Get {{ discount | times: 100 }}% off!</p>
{% endif %}

{% for product in collection.products %}
  <h3>{{ product.title }}</h3>
{% endfor %}

{% include 'product-card' with product %}


In addition to basic filters, Liquid also provides advanced filters that allow you to manipulate data in more complex ways. For example, you can use filters to format dates, convert text to uppercase, or concatenate strings. Here are some examples:

{{ product.created_at | date: '%Y-%m-%d' }}

{{ product.title | upcase }}
{{ product.title | append: ' - New Arrival' }}

Best Practices

It’s important to follow best practices when working with Liquid to ensure efficient and effective template creation. Here are some tips:

  1. Keep it DRY (Don’t Repeat Yourself): Use variables, filters, and custom objects to avoid duplicating code in your templates. This makes your code easier to maintain and update.
  2. Use Appropriate Filters: Take advantage of the built-in filters in Liquid to format data in the desired way. Avoid unnecessary custom filters unless absolutely necessary for specific requirements.
  3. Optimize Performance: Liquid templates are processed on the server, so it’s important to optimize your code for performance. Avoid complex logic or heavy computations in your templates that may slow down page loading times.
  4. Test Thoroughly: Test your Liquid templates thoroughly on different devices and browsers to ensure that they render correctly and provide a seamless experience for your customers.

Liquid is a powerful templating language that allows SaaS marketers to customize their Shopify stores and create dynamic and engaging online experiences for their customers. With its flexible syntax, advanced features, and customization options, Liquid provides endless possibilities for creating unique and visually appealing templates. By following best practices and leveraging the full potential of Liquid, you can create compelling and effective templates that drive conversions and elevate your SaaS marketing efforts to new heights.

Combining User Messaging with Marketing Automation.

In the realm of email marketing, there are various strategies to entice new customers. One powerful approach is leveraging automation, utilizing specialized software to send out emails based on predetermined triggers.

Automating your email and push notification campaigns can significantly enhance efficiency by freeing up valuable time for other essential business tasks. Moreover, it provides valuable data on customer segments, helping you identify the most effective strategies for each group.

For those seeking an easy-to-use tool for user messaging and marketing, or those looking to test the waters without committing resources upfront, we highly recommend Cloudmattr – our all-in-one customer engagement platform.