String Filters

These are provided in the default filters. Specifically, when TemplateOptions is constructed, these are added via the extension method WithStringFilters.


Adds the first argument to end of the input string.

{% assign name = "Deane" %}
My full name is {{ name | append:" Barker" }}.
My name is Deane Barker.

Clearly, given that Fluid is a templating language itself, there’s some questionable utility here. A template is fundamentally a way to glue text together. Put another way, you could just as easily do this:

My full name is {{ name }} Barker.

You would probably use this only when you needed to feed the results into another filter.


Capitalizes the first character in a string, and every character that follows whitespace. If your value isn’t a StringValue, it will get turned into one.

{% assign name = "deane barker" %}
My name is {{ name | capitalize }}.
My name is Deane Barker.

Notably, this filter does not use any of the System.Globalization functionality, like TextInto.ToTitleCase(), so don’t be surprised if it acts differently. It literally iterates the characters in the string, detects the beginning of the string or any whitespace, then capitalizes the next character.


Turns a string into lower-case. Simply calls ToLower() on whatever ToStringValue() returns (so if it’s not a StringValue it will get turned into one.)

{% assign name = "Deane Barker" %}
My informal name is {{ name | downcase }}.
My information name is deane barker.


Strips whitespace from the start of a string. Internally, it calls TrimStart() on whatever ToStringValue() returns. (No example because whitespace is vague to demonstrate.)


Strips whitespace from the end of a string. Internally, it calls TrimEnd() on whatever ToStringValue() returns. (No example because whitespace is vague to demonstrate.)


Replaces newlines – both \r\n and \n – with <br /> tags.

context.SetValue("body", @"This is my first sentence.

This is my second");
{{ body | newline_to_br }}
This is my first sentence.<br /><br />This is my second.


Works the same as append but adds the input string to the end of the first argument.



Replaces one string with another, within the input string. This filter simply wraps Replace. It takes two arguments:

  1. The old string. This is required.
  2. The new string. This is optional. If not provided, it defaults to an empty string, which essentially removes the old string.
{{ "Deane" | replace:"e","x" }}
{{ "Deane" | replace:"e" }}



Functions the same as replace, but stops after the first replacement.


Removes a strings from the input string. Functions the same as replace without a second argument (see second example, above).


Functions the same as remove but stops after the first removal.


Extracts a range of one or more elements from an array or string. Takes two arguments:

  1. The starting index. This is required, and must be an integer.
  2. The desired length. This is optional. If not provided, it defaults to 1.

Internally, it has different code for arrays and strings, but the easiest way to think about it is to remember that a string is just an array of characters.

{{ "Alec,Gabrielle,Isabella" | split:"," | slice:1  }}
{{ "Deane" | slice:1 }}

In the above example, we’re starting at index 1 (the second element) and requesting one item. If we provided a second argument, we can get more than one item.

{{ "Alec,Gabrielle,Isabella" | split:"," | slice:1,2  }}
{{ "Deane" | slice:1,2 }}

You can also use negative numbers for the starting index, which will count back from the end.

{{ "Deane" | slice:-3,2 }}

A starting index of -1 with no length is an easy way to get the last element, however it’s no different than using the .last member.


Splits a string on a supplied delimiter. If a delimiter isn’t provided, splits the string into an array of characters. Either way, it returns an ArrayValue of StringValues.

{{ "My name is Deane Barker" | split:" " | join:", " }}
My, name, is, Deane, Barker

Note that this is presently the only way to form an array directly in Liquid.


Trims whitespace from both ends of a string. Internally, it calls Trim() on whatever ToStringValue() returns. (No example because whitespace is vague to demonstrate.)


Replaces any newlines or carriage returns with empty strings.

{% assign phrase = "My name is 
Deane Barker" %}
{{ phrase | strip_newlines}}
My name is Deane Barker

Clearly, the example is a little contrived because you could also solve this by just not having the assign statement wrap lines. Also, note that this doesn’t replace the newlines with spaces, so if there’s no whitespace at the end of the first line, you’ll get this:

My name isDeane Barker


Returns the first X characters, appended with a suffix. It takes two optional arguments:

  1. The number of characters to reveal. If this is not supplied (or is non-numeric) it will default to 50.
  2. The suffix. If this is not supplied, it will default to an ellipsis ()

The character count is reduced by the length of the suffix. So, if you truncate to 10 using the default suffix, you will get 7 characters plus the 3 dots.

{% assign name = "Deane Barker" %}
{{ name | truncate:10 }}
Deane B...

(This can cause some weirdness if you’re then processing with Markdown, since three consecutive dots will often get replaced by a single character code, leaving your character counts off by two.)

You can pass in your own suffix, including an empty string. If you pass in an empty string, your character count will be accurate and exact.

{{ name | truncate:3,"" }}

Any number value equal to or longer than the input string will result in the entire string being returned, regardless of suffix. This can lead to a sudden drop in revealed characters when using a suffix, because reducing the character count by one less than the length of the string causes the suffix length to be taken into account.

{{ name | truncate:12 }}
{{ name | truncate:11 }}
Deane Barker
Deane Ba...


Returns the first X words, appended by a suffix. It takes two arguments:

  1. The number of words to reveal. This defaults to 0, which means nothing will be returned if the argument is not provided. (Amusingly, the suffix will still be appended.)
  2. The suffix to append. This defaults to an ellipsis ().

The filter calculates “words” by simply counting whitespace. Every time it crosses over whitespace, it increments the word count by 1.

{% assign phrase = "My name is Deane Barker" %}
{{ phrase | truncatewords:3 }}
My name is...


Turns a string into upper case. See notes for downcase above.

This is item #5 in a sequence of 5 items.

You can use your left/right arrow keys to navigate


Integration Console