Dynamic templates
One invoice template. Any number of line items.
Real documents don't have a fixed row count — invoices have 3 line items or 30, and some sections only apply sometimes. Mark a group to repeat per data row, and another to show only when a condition is true, and one template handles every case.

Rows that fit the data
A repeating group expands once per array entry — one invoice template handles 3 line items or 300, no template variants.
Sections that show only when relevant
Hide or reveal a group based on whether a value is truthy — a discount line, a warning, an optional clause.
Free on every plan
Both directives are part of the core template engine, with no plan gate on using them.
What people build with this
Invoices with variable line items
A single invoice template that handles a one-item order and a thirty-item order identically.
Order confirmations
Show a shipping section only if shipping applies, a discount line only if a code was used.
Itemized receipts
Render receipts of any length from the same layout, no matter how many products were purchased.
Frequently asked
Do I need a separate template for orders with different numbers of line items?
No — a data-repeat group expands to fit however many entries are in the array you send, whether that's 1 or 100.
Can I hide a section unless a certain condition is met?
Yes — a data-if directive shows or hides a group based on whether a param is truthy, for things like an optional discount line.
Is this a paid feature?
No — repeat and conditional fields are part of the core template engine and available on every plan.
Stop building a template per row count.
One layout. Any number of items. Sections that show up only when they should.
Create your free account