Per-recipient dynamic content is different from variations. A variation is a complete parallel version of your project — a translation, say — that you export as its own deliverable. Dynamic content lives inside a single exported email and is resolved by your ESP for each individual recipient.
The library’s scripting language
Everything on this page depends on your library having a scripting language configured — Liquid or Django-style, matching what your ESP uses (for example, Liquid for Klaviyo or Braze, Django-style for Iterable). The library developer sets this in the library’s options. If no scripting language is set, the dynamic content actions appear disabled in the editor with the note “Requires a scripting language in library options” — without one, Denada has no syntax to emit your ESP’s control structures in the exported HTML.Merge fields in text
You can type your ESP’s expressions directly into text parameters — for example,{{ first_name }}. Denada passes the text through untouched, so the expression appears literally in previews and lands intact in the exported HTML for your ESP to resolve at send time.
Links support the same idea: choose the Dynamic link type in the Edit link dialog to enter merge tags or dynamic URLs without Denada prepending https://.
Block variants
A variant is an alternate version of a block that is chosen per-recipient at send time. Each variant has a name and a condition written in the library’s scripting language; the first variant whose condition is true renders for that recipient, and the block’s main content is the fallback for everyone else. To add a variant, open the block’s ⋯ menu and choose Add variant. The New variant dialog asks for:- Name — a label like “Platinum”.
- Condition — the expression that selects this variant, e.g.
person|lookup:'tier' == 'platinum'.
Conditional rendering
Conditional rendering makes a whole block render only when a condition is true — for example, a rewards banner that only gold-tier members should see. Open the block’s ⋯ menu and choose Conditional rendering. Enter a condition in the library’s scripting language, such as:A block can have variants or conditional rendering, but not both at once — the block menu offers whichever one is still available.
Dynamic image sources
Sometimes the image itself comes from your ESP — a per-recipient product photo, for instance. Instead of uploading an image, click the image in the preview and choose Use dynamic source, then enter an expression like:src at send time. See Using images in projects for the rest of the image menu.
How this exports to your ESP
You only ever write the inner expression — never the surrounding tags. On export, Denada emits the wrapping control structures in your library’s scripting language:- A conditionally rendered block is wrapped in
{% if condition %} … {% endif %}. - A block with variants exports as an if/else chain: each variant’s condition in order, with the main content as the final else.
- Dynamic image expressions are placed directly into the image’s
srcattribute.