# Liquid filters reference

Source: https://support.storeconnect.com/articles/liquid-filters-reference · Last modified 21 August 2026

Liquid filters transform the output of variables and expressions using the pipe `|` syntax: `{{ value | filter_name: argument }}`. StoreConnect includes all standard Liquid filters plus an extensive set of custom extensions.

For the categorized index of available filters, see [Liquid filters](liquid-filters).

---

## Math filters

### `abs`

Returns the absolute value.


```liquid

{{ -17 | abs }}
{{- "Output: 17" -}}

{{ "-19.86" | abs }}
{{- "Output: 19.86" -}}
```


### `at_least`

Returns the larger of the input and the minimum value.


```liquid

{{ 4 | at_least: 5 }}
{{- "Output: 5" -}}
```


### `at_most`

Returns the smaller of the input and the maximum value.


```liquid

{{ 4 | at_most: 3 }}
{{- "Output: 3" -}}
```


### `ceil`

Rounds up to the nearest whole number.


```liquid

{{ 1.2 | ceil }}
{{- "Output: 2" -}}

{{ "3.5" | ceil }}
{{- "Output: 4" -}}
```


### `floor`

Rounds down to the nearest whole number.


```liquid

{{ 1.8 | floor }}
{{- "Output: 1" -}}
```


### `round`

Rounds to the nearest integer, or to the specified decimal places.


```liquid

{{ 1.2 | round }}
{{- "Output: 1" -}}

{{ 183.357 | round: 2 }}
{{- "Output: 183.36" -}}
```


### `plus`

Adds a number.


```liquid

{{ 4 | plus: 2 }}
{{- "Output: 6" -}}
```


### `minus`

Subtracts a number.


```liquid

{{ 4 | minus: 2 }}
{{- "Output: 2" -}}
```


### `times`

Multiplies by a number.


```liquid

{{ 3 | times: 2 }}
{{- "Output: 6" -}}
```


### `divided_by`

Divides by a number. Integer division with an integer divisor rounds down — use a float divisor for decimal results.


```liquid

{{ 5 | divided_by: 3 }}
{{- "Output: 1 (integer division)" -}}

{{ 20 | divided_by: 7.0 }}
{{- "Output: 2.857..." -}}
```


### `modulo`

Returns the remainder of division.


```liquid

{{ 24 | modulo: 7 }}
{{- "Output: 3" -}}
```


---

## String filters

### `append`

Appends a string.


```liquid

{{ "/my/url" | append: ".html" }}
{{- "Output: /my/url.html" -}}
```


### `prepend`

Prepends a string.


```liquid

{{ "World" | prepend: "Hello " }}
{{- "Output: Hello World" -}}
```


### `capitalize`

Makes the first character uppercase and the rest lowercase.


```liquid

{{ "my GREAT title" | capitalize }}
{{- "Output: My great title" -}}
```


### `downcase` / `upcase`

Converts to lowercase or uppercase.


```liquid

{{ "Han Solo" | downcase }}
{{- "Output: han solo" -}}

{{ "title" | upcase }}
{{- "Output: TITLE" -}}
```


### `strip` / `lstrip` / `rstrip`

Removes whitespace from both sides, the left side only, or the right side only.


```liquid

{{ "  hello  " | strip }}
{{- "Output: hello" -}}
```


### `strip_html`

Removes all HTML tags.


```liquid

{{ "The <em>fox</em> jumps" | strip_html }}
{{- "Output: The fox jumps" -}}
```


### `strip_newlines`

Removes all newline characters.

### `escape` / `escape_once`

HTML-escapes special characters. `escape_once` avoids double-escaping already-escaped entities.


```liquid

{{ "O'Brien & Co." | escape }}
{{- "Output: O&#39;Brien &amp; Co." -}}
```


### `url_encode` / `url_decode`

Encodes/decodes URL-unsafe characters.


```liquid

{{ "john@example.com" | url_encode }}
{{- "Output: john%40example.com" -}}
```


### `newline_to_br`

Inserts `<br />` before each newline.

### `replace` / `replace_first`

Replaces all occurrences, or only the first occurrence.


```liquid

{{ "do do do" | replace: "do", "re" }}
{{- "Output: re re re" -}}

{{ "do do do" | replace_first: "do", "re" }}
{{- "Output: re do do" -}}
```


### `remove` / `remove_first`

Removes all occurrences, or only the first.


```liquid

{{ "rain in Spain" | remove: "ain" }}
{{- "Output: r in Sp" -}}
```


### `split`

Splits a string into an array.


```liquid

{% assign tags = "red,green,blue" | split: "," %}
{{ tags | join: " / " }}
{{- "Output: red / green / blue" -}}
```


### `truncate`

Shortens to the specified character count (including the suffix). Default suffix is `...`.


```liquid

{{ "Mary had a little lamb." | truncate: 15 }}
{{- "Output: Mary had a l..." -}}

{{ "Mary had a little lamb." | truncate: 15, "--" }}
{{- "Output: Mary had a li--" -}}

{{ "Mary had a little lamb." | truncate: 15, "" }}
{{- "Output: Mary had a litt" -}}
```


### `truncatewords`

Shortens to the specified number of words.


```liquid

{{ "Mary had a little lamb." | truncatewords: 3 }}
{{- "Output: Mary had a..." -}}
```


### `slice`

Returns a substring (for strings) or subarray (for arrays) starting at the given index. Negative indices count from the end.


```liquid

{{ "Earthquake" | slice: 2, 5 }}
{{- "Output: rthqu" -}}
```


### `size`

Returns the character count of a string or item count of an array.


```liquid

{{ "hello" | size }}
{{- "Output: 5" -}}
```


---

## Array/list filters

### `join`

Combines array items into a string.


```liquid

{% assign tags = "red,green,blue" | split: "," %}
{{ tags | join: " | " }}
{{- "Output: red | green | blue" -}}
```


### `first` / `last`

Returns the first or last item.


```liquid

{{ "earth,water,fire" | split: "," | first }}
{{- "Output: earth" -}}
```


### `concat`

Concatenates two arrays.


```liquid

{% assign all = fruits | concat: vegetables %}
```


### `map`

Extracts a property from each item.


```liquid

{% assign names = products | map: "name" %}
{{ names | join: ", " }}
```


### `where`

Filters to items with a matching property value. Without a value argument, filters to truthy values.


```liquid

{% assign sale_items = products | where: "on_sale", true %}
{% assign published = articles | where: "published" %}
```


### `sort` / `sort_natural`

Sorts in case-sensitive or case-insensitive order. Optionally sort by a property.


```liquid

{{ tags | sort | join: ", " }}
{% assign sorted = products | sort: "name" %}
```


### `reverse`

Reverses the order of an array.


```liquid

{{ "earth,water,fire" | split: "," | reverse | join: ", " }}
{{- "Output: fire, water, earth" -}}
```


### `uniq`

Removes duplicate items.


```liquid

{{ "a,b,a,c" | split: "," | uniq | join: ", " }}
{{- "Output: a, b, c" -}}
```


### `compact`

Removes nil/null values.


```liquid

{% assign clean = items | compact %}
```


### `sum`

Sums numeric items, or sums a property across objects.


```liquid

{% assign total = cart.items | sum: "quantity" %}
```


### `push` / `unshift`

Adds an item to the end or beginning of an array.


```liquid

{{ my_list | push: "new_item" | join: ", " }}
{{ my_list | unshift: "first_item" | join: ", " }}
```


### `pop` / `shift`

Removes and returns the last or first item (modifies the array).


```liquid

Removed: {{ my_list | pop }}
```


### `insert`

Inserts an item at a specific index. Supports negative indices.


```liquid

{{ my_list | insert: "new", 2 | join: ", " }}
```


### `intersection` / `union` / `difference`

Set operations on two arrays.


```liquid

{{ list1 | intersection: list2 | join: ", " }}
{{ list1 | union: list2 | join: ", " }}
{{ list1 | difference: list2 | join: ", " }}
```


### `match`

Filters array items (or characters from a string) matching a regex pattern. Includes capture groups for string input.


```liquid

{% assign fruits = "apple,banana,cherry" | split: "," %}
{{ fruits | match: "a" | join: ", " }}
{{- "Output: apple, banana" -}}
```


### `contains` (filter)

Returns `true` if the array contains the specified item.


```liquid

{{ my_list | contains: "target" }}
```


### `only` / `except`

Filter array items by property value. `only` keeps matching items; `except` removes them. Both support multiple values and chaining.


```liquid

{{ products | only: "type", "clothing" | pluck: "name" | join: ", " }}
{{ products | except: "type", "clothing" | pluck: "name" | join: ", " }}
```


---

## Collection filters

StoreConnect-specific collection operations.

### `group_by`

Groups an array of objects by a property. Returns an array of group objects with `name`, `items`, and `size`.


```liquid

{% assign groups = products | group_by: "category_name" %}
{% for group in groups %}
  <h3>{{ group.name }} ({{ group.size }})</h3>
  {% for item in group.items %}
    <p>{{ item.name }}</p>
  {% endfor %}
{% endfor %}
```


### `pluck`

Extracts one or more properties from each item.


```liquid

{{ products | pluck: "name" | json }}
{{ products | pluck: "name", "price" | json }}
```


### `sample`

Returns a random sample of the specified size.


```liquid

{{ products | sample: 3 | pluck: "name" | join: ", " }}
```


### `try`

Safely accesses a property, returning an empty string if the property doesn't exist.


```liquid

{{ error_obj | try: "code" }}
```


### `paginate` (filter)

Returns the first page of a collection with the given page size.


```liquid

{{ items | paginate: 5 | join: "," }}
```


### `depaginate`

Removes pagination limits, fetching all items. Use carefully with large datasets.


```liquid

{% assign all_items = large_collection | depaginate %}
```


### `json` / `serialize`

Converts any object to a JSON string. Both names are identical.


```liquid

{{ product | json }}
{{ cart.items | serialize }}
```


---

## Map/object filters

### `keys`

Returns an array of a map's keys.


```liquid

{{ my_map | keys | join: ", " }}
```


### `merge`

Merges two maps. Keys from the second map override matching keys in the first.


```liquid

{{ defaults | merge: overrides | json }}
```


### `set_key`

Adds or updates a key-value pair on a map.


```liquid

{%- new Map data -%}
{%- assign data = data | set_key: "name", "Widget" | set_key: "price", 9.99 -%}
```


### `unset_key`

Removes one or more keys from a map.


```liquid

{{ config | unset_key: "debug" | json }}
{{ config | unset_key: "debug", "verbose" | json }}
```


### `collect_keys`

Extracts specific keys from each map in an array.


```liquid

{{ users | collect_keys: "name", "email" | json }}
```


### `rename_keys`

Renames keys (accepts pairs of old_key, new_key). Works on a single map or an array of maps.


```liquid

{{ record | rename_keys: "FirstName", "first_name", "LastName", "last_name" | json }}
```


---

## Date/time filters

### `datetime`

Converts a date/time string to an ISO 8601 timestamp with optional timezone conversion.


```liquid

{{ "2021-02-01 09:00" | datetime }}
{{- "Output: 2021-02-01T09:00:00Z" -}}

{{ "2021-06-01T09:00:00+10:00" | datetime, timezone: "Pacific/Auckland" }}
{{- "Output: 2021-06-01T11:00:00+12:00" -}}
```


### `now`

Returns the current date and time for the given timezone.


```liquid

{{ "Australia/Sydney" | now }}
{{- "Output: current ISO8601 timestamp in AEST" -}}
```


### `today`

Returns the current date for the given timezone.


```liquid

{{ "UTC" | today }}
{{- "Output: current date in UTC" -}}
```


### `time_ago`

Returns a human-readable relative time string.


```liquid

{{ article.publish_on | time_ago }}
{{- "Output: about 3 days ago" -}}
```


### `time_duration`

Returns a human-readable duration from a number of seconds.


```liquid

{{ 3600 | time_duration }}
{{- "Output: about 1 hour" -}}
```


### `date` (enhanced)

Formats a date using strftime syntax, with timezone support. Accepts date strings, `"now"`, `"today"`, or Unix timestamps.


```liquid

{{ "2021-07-01T09:00:00Z" | date: "%a, %b %-d, %Y" }}
{{- "Output: Thu, Jul 1, 2021" -}}

{{ "now" | date: "%Y-%m-%d", timezone: "Australia/Sydney" }}
{{- "Output: current date in Sydney" -}}
```


**Common format tokens:**

| Token | Description | Example |
|-------|-------------|---------|
| `%Y` | Year | 2024 |
| `%m` | Month (01–12) | 07 |
| `%-m` | Month without padding | 7 |
| `%d` | Day (01–31) | 01 |
| `%-d` | Day without padding | 1 |
| `%H` | Hour 24h | 14 |
| `%M` | Minute | 30 |
| `%a` | Abbreviated day | Thu |
| `%A` | Full day name | Thursday |
| `%b` | Abbreviated month | Jul |
| `%B` | Full month name | July |

### `date_add`

Adds a duration to a date. Accepts negative values for subtraction. Options: `years`, `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`, `timezone`.


```liquid

{{ "2021-03-01T09:00:00" | date_add: days: 5 }}
{{- "Output: 2021-03-06T09:00:00Z" -}}

{{ "2021-03-01T09:00:00" | date_add: days: -5 }}
{{- "Output: 2021-02-24T09:00:00Z" -}}
```


---

## Number formatting filters

### `money`

Formats a number as currency. Strips `.00` cents by default.


```liquid

{{ 12.76 | money }}
{{- "Output: $12.76" -}}

{{ 12.00 | money }}
{{- "Output: $12" -}}

{{ 12.95 | money, unit: '€' }}
{{- "Output: €12.95" -}}

{{ 12.70 | money, compact: true }}
{{- "Output: $12.7" -}}

{{ 12.70 | money, compact: false }}
{{- "Output: $12.70" -}}
```


### `points`

Formats a number as loyalty points with comma separators and a "pts" suffix.


```liquid

{{ 1200 | points }}
{{- "Output: 1,200 pts" -}}
```


### `number`

Formats a number with locale-aware options.


```liquid

{{ 12000 | number, delimiter: "," }}
{{- "Output: 12,000" -}}

{{ 12.76 | number, separator: "," }}
{{- "Output: 12,76" -}}

{{ 12 | number, precision: 3 }}
{{- "Output: 12.000" -}}

{{ 99.00 | number, compact: true }}
{{- "Output: 99" -}}
```


**Options:** `compact`, `delimiter`, `separator`, `precision`

---

## Text filters

### `j`

JavaScript-escapes a string for safe use in JS string literals.


```liquid

<script>
  var message = '{{ user_input | j }}';
</script>
```


### `unescape`

Unescapes HTML-escaped characters.


```liquid

{{ "&lt;p&gt;Hello&lt;/p&gt;" | unescape }}
{{- "Output: <p>Hello</p>" -}}
```


### `parameterize`

Converts a string to a URL-friendly slug (lowercase, hyphens, no special characters).


```liquid

{{ "On Sale" | parameterize }}
{{- "Output: on-sale" -}}
```


### `hmac`

Generates an HMAC signature for a string using a secret key.


```liquid

{{ "data" | hmac: "secret" }}
{{ "data" | hmac: "secret", algorithm: "SHA256" }}
{{ "data" | hmac: "secret", digest: "Base64" }}
```


**Algorithms:** `SHA` (default), `SHA1`, `SHA224`, `SHA256`, `SHA384`, `SHA512`, `MD5`, `RIPEMD160`

**Digests:** `Hex` (default), `Base64`

### `markdown`

Converts Markdown to sanitized HTML using GitHub-Flavored Markdown.


```liquid

{{ article.body | markdown }}
{{ "**bold** and *italic*" | markdown }}
```


### `encrypt` / `decrypt`

Encrypts data into a token, or decrypts a token back to the original value. Accepts an optional `salt` for key derivation.


```liquid

{% assign token = sensitive_value | encrypt, salt: "my-salt" %}
{% assign original = token | decrypt, salt: "my-salt" %}
```


### `deserialize`

Parses a JSON string into a Liquid object (map or array).


```liquid

{% assign data = '{"title":"Hello","count":42}' | deserialize %}
{{ data.title }} — {{ data.count }}
```


---

## URL filters

### `params`

Adds query parameters to a URL path. Handles existing query strings correctly.


```liquid

{{ "/products" | params: page: 2, sort: "name" }}
{{- "Output: /products?page=2&sort=name" -}}

{{ "/products?category=shoes" | params: page: 2 }}
{{- "Output: /products?category=shoes&page=2" -}}
```


---

## Video filters

### `youtube`

Returns a responsive HTML embed for a YouTube video ID.


```liquid

{{ product.videos | first | youtube }}
{{ "video-id-here" | youtube, start_at: 30 }}
```


### `vimeo`

Returns a responsive HTML embed for a Vimeo video ID.


```liquid

{{ "video-id-here" | vimeo }}
{{ "video-id-here" | vimeo, start_at: 60 }}
```


---

## Theme filters

### `t`

Looks up a translation key in the theme's translation file (`translations/en.default.json`). Supports variable interpolation.


```liquid

{{ "welcome.title" | t }}
{{ "products.count" | t: count: 5 }}
```


If a key is not found, returns: `"missing translation: sc.locale.{key} for locale: {locale}"`

### `asset_url`

Returns the URL for a theme asset file.


```liquid

<img src="{{ 'images/logo.png' | asset_url }}" alt="Logo">
{% assign css_url = "styles/theme.css" | asset_url %}
```


---

## Record filters

### `record_fields`

Returns the accessible fields on a record or drop as an array.


```liquid

{{ product | record_fields | join: ", " }}
```


### `record_relationships`

Returns the accessible relationships on a record or drop.


```liquid

{{ product | record_relationships | join: ", " }}
```


### `record_name`

Returns the type name of a record or drop.


```liquid

{{ product | record_name }}
{{- "Output: Product" -}}
```


### `cast`

Converts values between types. For primitive types, converts strings to numbers/booleans. For records from `{% query %}`, converts to the corresponding drop type.


```liquid

{{ "123" | cast: "integer" }}
{{ "true" | cast: "boolean" }}
{{ "3.14" | cast: "float" }}

{% query 'Product2' as records %}
{% for record in records %}
  {% assign product = record | cast: "Product" %}
  {{ product.name }}
{% endfor %}
```


### `recordize`

Converts a drop back to its underlying record representation.

---

## Product content filters

These filters render product-associated content blocks using built-in templates.

### `show_traits`

Renders all product traits using the built-in template. Falls back to the master product's trait category for variants that don't have their own.


```liquid

{{ current_product | show_traits }}
```


### `render_content_blocks`

Renders all content blocks of a specified type for a product.


```liquid

{{ product | render_content_blocks: "downloads" }}
```


### Typed content block filters

Each filter renders content blocks of the named type. All accept a product drop.

| Filter | Alias | Description |
|--------|-------|-------------|
| `downloads_content_blocks` | `render_downloads_content_blocks` | Downloadable files (PDFs, manuals) |
| `features_content_blocks` | `render_features_content_blocks` | Key features and highlights |
| `specifications_content_blocks` | `render_specifications_content_blocks` | Technical specifications |
| `support_content_blocks` | `render_support_content_blocks` | Support and help content |
| `warranty_content_blocks` | `render_warranty_content_blocks` | Warranty terms |


```liquid

{{ product | features_content_blocks }}
{{ product | specifications_content_blocks }}
```


## Utility filters

### `default`

Sets a default value for any variable which is `nil`, `false`, or `blank`.


```liquid

{% assign hide_price = false %}
{{ hide_price | default: true, allow_false: true }}
{{- "Output: false" -}}
```

---

## Follow StoreConnect

- [Email Newsletter](https://getstoreconnect.com/c/lp-newsletter)
- [LinkedIn Newsletter](https://www.linkedin.com/build-relation/newsletter-follow?entityUrn=7444956928444862464)
- [YouTube](https://www.youtube.com/channel/UCngKdP2x8l1wcbAKW3tvU8g)
- [LinkedIn](https://www.linkedin.com/company/storeconnect)
- [X / Twitter](https://x.com/storeconnecthq)

## Popular Links

- [Partners](https://getstoreconnect.com/partners)
- [News](https://getstoreconnect.com/articles/news)
- [Events](https://getstoreconnect.com/articles/events)
- [Feature Comparison](https://getstoreconnect.com/how-we-compare)
- [Download a free trial](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FMkeKUAT)
- [Book a Demo](https://getstoreconnect.com/contact)

## Documentation

- [Help documentation](https://support.storeconnect.com/help-documentation)
- [AI agents](https://support.storeconnect.com/ai)
- [Videos & tutorials](https://support.storeconnect.com/videos-tutorials)
- [Developer reference](https://support.storeconnect.com/developer-reference)
- [Release notes](https://support.storeconnect.com/release-notes)
- [Troubleshooting](https://support.storeconnect.com/troubleshooting)
- [Trust Center](https://trust.getstoreconnect.com/)
- [Status Page](https://status.storeconnect.com/)

## Contact

- info@getstoreconnect.com
- US +1 415 745 3230
- AUS +61 2 8365 2308

100 S Ashley Dr, Suite 600-2461
Tampa FL 33602-600 USA

Level 22, Sydney Place
180 George Street
Sydney, NSW, 2000, AUS

---

StoreConnect Support — https://support.storeconnect.com/articles/liquid-filters-reference