> ## Documentation Index
> Fetch the complete documentation index at: https://developers.kit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dynamic content blocks overview

> Subscriber-personalized content blocks powered by Liquid templates

Dynamic content blocks extend Kit's standard [content block plugins](/plugins/content-blocks/overview) to support subscriber-personalized email content. Rather than returning final, static HTML at design time, your server returns a Liquid-templated HTML response that Kit renders individually for each subscriber at send time.

## How dynamic blocks differ from standard blocks

With a standard content block, Kit calls your endpoint whenever a creator configures or refreshes the block in the email editor. Your server returns HTML that is stored as-is and delivered identically to every recipient.

With a dynamic content block, Kit still calls your endpoint at design time—but the HTML you return contains [Liquid template variables](/plugins/content-blocks/dynamic-blocks/liquid-templates). Kit stores this template and renders it per subscriber at send time, substituting real data from the chosen data source.

|                    | Standard content blocks      | Dynamic content blocks                                                                 |
| ------------------ | ---------------------------- | -------------------------------------------------------------------------------------- |
| **HTML generated** | Once, at design time         | Template at design time; rendered per subscriber at send time                          |
| **Content**        | Identical for all recipients | Personalized per subscriber                                                            |
| **Works in**       | Any email type               | Any email type; event node data source requires a Visual Automation sequence email     |
| **Requires**       | Content block plugin         | Content block plugin; automation event plugin required only for event node data source |

## Data sources

Dynamic content blocks support two data sources:

* **Automation event node** — An [automation node plugin](/plugins/automation-nodes/overview) that fires when a subscriber triggers an event (such as abandoning a cart). The event plugin stores subscriber-specific data in Kit's automation context, and your Liquid template references it via `automation.{app_identifier}.{event_node_identifier}.*`, where `event_node_identifier` is the linked event node's `identifier`. Requires a Visual Automation sequence email.
* **Subscriber custom fields** — Subscriber data stored directly on the Kit subscriber record and accessible via `{{ subscriber.field_name }}` in your template. Works in any email type.

## When to use dynamic blocks

Dynamic content blocks are the right choice when:

* Content must reflect data specific to each subscriber at the moment the email is sent
* The underlying data changes between when the email is designed and when it is delivered
* The block depends on an event a subscriber triggered inside a Visual Automation workflow
* You want to personalize content using data already stored on the subscriber record

**Common use cases:**

* **Abandoned cart recovery** — Show each subscriber the actual items they left in their cart
* **Personalized product recommendations** — Surface items relevant to a specific subscriber's history
* **Event-triggered summaries** — Display real-time order, booking, or activity details
* **Subscriber-specific content** — Greet subscribers by name, reference their plan, or display content based on custom field values

## Prerequisites

To build a dynamic content block you need a **dynamic content block plugin**—a content block plugin configured with `dynamic: true` and the additional fields described in [plugin configuration](/plugins/content-blocks/dynamic-blocks/plugin-configuration).

If your block uses an **automation event node** as its data source, you also need an automation node plugin in the same Kit app that captures subscriber-specific data and stores it in Kit's automation context. See [plugin flow](/plugins/content-blocks/dynamic-blocks/plugin-flow) for a step-by-step walkthrough of this setup.
