List repeater

List repeater

Repeats a piece of markup for every item in a list — for example a badge per tag of an article.

List repeater

Repeats a piece of markup for every item in a list: give it a list field (or comma-separated text) and the content is rendered once per item. Handy for tags, badges or properties that belong to a record as a list. The technical name is Each.

Use Each whenever a record has a repeatable field — tags, features, team members, steps in a process — and you want to render one piece of markup per item without hard-coding each one separately. Content and layout stay separate: editors update the list, the layout stays untouched.

A common example is a pricing card that lists included features as checkmarked bullets, or a product page that shows a badge for every tag in a comma-separated field. Combine it with an Icon block inside the callback to add a checkmark or bullet per item.

Typical uses across different sites

On a webshop, Each is a natural fit for rendering size or colour swatches from a comma-separated field on a product record, or for listing included accessories as a bulleted feature list. On a portfolio site it commonly renders the tools or skills used on a project as a row of tags underneath the case study title. On a professional services site it can turn a list of certifications, service areas or industries served into a scannable row of badges instead of a wall of text. In each case the underlying data is a single field on the record — the layout only needs to be designed once.

A common mistake is reaching for Each on data that isn't actually a list, such as a single free-text description — there's nothing to repeat, so a plain paragraph is simpler and clearer. Another is forgetting that the callback needs one clear element wrapping each item's content; mixing plain text and multiple sibling elements inside the callback without a wrapper can break the intended layout. For larger structured datasets with many fields per item — more than a short label per entry — a dedicated Records block set up against a data type is usually a better fit than stretching Each beyond a simple list.

Each pairs naturally with an Icon inside the callback — a checkmark before each included feature, or a small tag icon before each keyword — turning a bare list into something more scannable. It also composes with layout components like HStack or Wrap around it to control whether items wrap onto multiple lines or stay in a single row.

Because the repetition happens once, server-side, when the page is rendered, there's no client-side loop or extra JavaScript cost regardless of how many items the list contains — a ten-item list and a two-item list render with the same performance profile.

Example

FastFlexibleHeadless

The prompt for this example

prompt
Show the words Fast, Flexible and Headless as purple badges next to each other.

Free · no strings attached

Try Obelisk yourself

Answer a few short questions and the AI assistant sets up your own site. Then you keep building it yourself — in plain language.

Try it yourself