Liquid is an open-source templating language that Optimove uses to personalize cross-channel campaign content. Originally developed by Shopify, it allows you to build one reusable content layout and automatically fill it with the right data for each person based on rules.
Starting in 2026, Liquid replaces the legacy template language within Optimove as the new standard for writing conditional logic and personalization tags.
Where can I use it?
You can use Liquid to personalize messages across all supported channels:
- Email (BETA)
- SMS (Coming Soon)
- Mobile and Web Push (Coming Soon)
- In-App and Pop-Up Messages (Coming Soon)
Why are we switching to Liquid?
Moving to Liquid provides three major benefits over our legacy system:
- Unified Syntax: It replaces fragmented rules with a single language, meaning every campaign on every channel follows the same logic.
- Industry Standard: Because Liquid is used widely across the CRM ecosystem, it reduces the learning curve for new users and aligns Optimove with the rest of the market.
- Advanced Capabilities: Unlike our legacy syntax, Liquid supports nested conditions, AND/OR logic, and complex data formatting.
Core Concepts
Liquid works by using tags to distinguish dynamic code from static text. There are three main components you will use:
1. Output Tags {{ }}
Output tags display data directly inside your message. They are surrounded by double curly braces.
-
Example:
{{ user.first_name }}displays the customer's first name.
2. Logic Tags {% %}
Logic tags control the flow of the message, such as hiding or showing content based on rules. They are surrounded by curly braces and percent signs.
-
Example:
{% if user.tier == "GOLD" %}starts a condition.
3. Filters |
Filters transform data, such as capitalizing text or formatting a date.
They
are used inside an Output tag, separated by a pipe character
|.
-
Example:
{{ user.first_name | default: 'there' }}uses "there" if the name is missing.
Example: Liquid in Action
(Below is an example of the code shown in the editor)
Hi {{ user.first_name | default: 'there' }}!
We noticed your birthday is coming up on {{ user.DOB | date_format: "MMMM d" }}.
Result: "Hi Alex! We noticed your birthday is coming up on January 15."
Migration: Liquid vs. Legacy Syntax
Liquid offers significantly more power than the legacy system you may be used to.
| Feature | Legacy Syntax | Liquid |
|---|---|---|
| Logic Depth | Single condition only | Nested conditions supported |
| Combinations | No AND/OR support | Full AND/OR support |
| Data Formatting | Limited | Extensive Filters (Date, Case, Math) |
| Comparison | Raw attribute values only | Can compare transformed values |