Access is invite-only during beta. Once invited, create a key to personalize these examples. Production sending requires a separate review.

Liquid

Variables, filters, if, and for.

Templates use the Liquid gem. Write tags in subject, HTML, text, and CSS. Pass a JSON object as template.variables when you send. The dashboard Variables pane is the same shape.

Missing variables render as empty. Use | default when you want a fallback.

Variables

greeting.html
1 <p>Hi {{ name }},</p>
2 <p>{{ body | default: "Thanks for signing up." }}</p>
variables.json
1 {
2 "name": "Ada",
3 "body": "Your account is ready."
4 }

Nested keys work:

nested.html
1 <p>{{ user.name }}</p>
nested.json
1 {
2 "user": {"name": "Ada"}
3 }

{{ name }} is replaced as written. Escape in your application if the value is untrusted, or use | escape. Use values that are already HTML when you want markup in the body.

Filters

Common filters:

Filter Example
default {{ name | default: "there" }}
upcase / downcase / capitalize {{ name | upcase }}
escape {{ name | escape }}
date {{ created_at | date: "%b %-d, %Y" }}
truncate {{ body | truncate: 80 }}
join {{ tags | join: ", " }}

Conditions

conditions.html
1 {% if action_url %}
2 <p><a href="{{ action_url }}">Continue</a></p>
3 {% endif %}
4
5 {% unless items %}
6 <p>No items.</p>
7 {% endunless %}

Lists

list.html
1 {% for item in items %}
2 <p>{{ item.name }} — {{ item.price }}</p>
3 {% endfor %}
items.json
1 {
2 "items": [
3 {"name": "Vintage Macintosh", "price": "499"},
4 {"name": "Keyboard", "price": "79"}
5 ]
6 }

{% for item in items %}{{ item }}{% endfor %} works when items is an array of strings.

Comments and raw tags

comments.html
1 {% comment %}Not sent.{% endcomment %}
2 {% raw %}{{ this stays literal }}{% endraw %}

What Liquid will not do

  • No file {% include %} or {% render %}. Templates cannot read the filesystem.
  • Invalid Liquid is a validation error on save and a 422 {error: invalid, field: template} at send.
  • Variable names are Liquid identifiers. {{ user.name }} is a nested key, not a filter.

About

PostShiba is the email platform that powers Bento behind the scenes. You can build your own products, like Bento, on top of it.

© 2026 PostShiba by Backpack Internet Pty. Ltd. All rights reserved.

The same policies that govern Bento are applied to PostShiba Privacy | Terms | Security