Skip to content

Block Types

Blocks are the building units of every Templatical template. Each block represents a distinct piece of content -- a paragraph, an image, a button. Blocks can be placed directly in the template or inside sections for multi-column layouts. The editor renders them top-to-bottom in the order they appear.

Every block extends a common Block base with shared properties (id, type, styles, displayCondition, customCss, visibility), and each type adds its own specific properties.

To create blocks programmatically, see Programmatic Templates. For default property values and how to customize them, see Block & Template Defaults.

Choosing the right block

NeedBlockNotes
Headings, titlesTitleFixed-size headings (H1-H4) with block-level formatting
Body text, paragraphsParagraphRich text with inline formatting via TipTap
Photos, banners, logosImageOptional link wrapping, responsive width
Call-to-actionButtonBulletproof buttons that work in all email clients
Multi-column layoutSectionThe only block that holds other blocks
Visual separationDividerHorizontal line with style options
Vertical spacingSpacerEmpty space between blocks
Social linksSocial Icons16 platforms, 5 icon styles
Navigation linksMenuHorizontal link list with separators
Tabular dataTableData table with optional header styling
Video previewVideoClickable thumbnail (email clients don't support embedded video)
Raw markupHTMLEscape hatch for custom code
Domain-specific contentCustomYour own block types with fields and Liquid templates

Title

A heading block with fixed size levels. Use titles for headings, section headers, and other prominent text.

PropertyTypeDescription
contentstringHTML content
level1 | 2 | 3 | 4Heading level (H1=36px, H2=28px, H3=22px, H4=18px)
colorstringText color
textAlign'left' | 'center' | 'right'Horizontal alignment
fontFamilystringFont family override

Paragraph

Body text rendered as HTML. The editor uses Tiptap for inline editing with formatting controls (bold, italic, links, alignment, font size, color, etc.). All formatting is applied inline -- there are no block-level formatting properties.

PropertyTypeDescription
contentstringHTML content

Image

Displays an image with optional link wrapping.

PropertyTypeDescription
srcstringImage URL
altstringAlt text
widthnumber | 'full'Display width in px, or 'full' for 100%
align'left' | 'center' | 'right'Horizontal alignment
linkUrlstringWraps image in a link
linkOpenInNewTabbooleanLink target behavior
placeholderUrlstringPlaceholder shown in the editor when src uses a merge tag

Button

A call-to-action button with customizable appearance.

PropertyTypeDescription
textstringButton label
urlstringLink URL
backgroundColorstringButton background color
textColorstringButton text color
borderRadiusnumberCorner radius in px
fontSizenumberFont size in px
buttonPaddingSpacingValueInner padding
fontFamilystringFont family override
openInNewTabbooleanLink target behavior

Divider

A horizontal line separator.

PropertyTypeDescription
lineStyle'solid' | 'dashed' | 'dotted'Line style
colorstringLine color
thicknessnumberLine thickness in px
widthnumber | 'full'Line width in px, or 'full' for 100%

Spacer

Empty vertical space.

PropertyTypeDescription
heightnumberHeight in px

HTML

Injects raw HTML into the template. Use this for content that cannot be expressed with other block types.

PropertyTypeDescription
contentstringRaw HTML markup

Social Icons

A row of social media icons linking to platform profiles.

PropertyTypeDescription
iconsSocialIcon[]List of social icons
iconStyle'solid' | 'outlined' | 'rounded' | 'square' | 'circle'Visual style
iconSize'small' | 'medium' | 'large'Icon size
spacingnumberSpace between icons in px
align'left' | 'center' | 'right'Horizontal alignment

16 platforms are supported: Facebook, Twitter/X, Instagram, LinkedIn, YouTube, TikTok, Pinterest, Email, WhatsApp, Telegram, Discord, Snapchat, Reddit, GitHub, Dribbble, and Behance.

Each SocialIcon has:

ts
interface SocialIcon {
  id: string;
  platform: SocialPlatform;
  url: string;
}

A horizontal navigation menu with text links.

PropertyTypeDescription
itemsMenuItemData[]Menu items
fontSizenumberFont size in px
fontFamilystringFont family override
colorstringText color
linkColorstring (optional)Link color
textAlign'left' | 'center' | 'right'Alignment
separatorstringCharacter between items
separatorColorstringSeparator color
spacingnumberSpace around separator

Each MenuItemData has:

ts
interface MenuItemData {
  id: string;
  text: string;
  url: string;
  openInNewTab: boolean;
  bold: boolean;
  underline: boolean;
  color?: string;
}

Table

A data table with optional header row styling.

PropertyTypeDescription
rowsTableRowData[]Table rows
hasHeaderRowbooleanStyle first row as header
headerBackgroundColorstring (optional)Header row background
borderColorstringBorder color
borderWidthnumberBorder width in px
cellPaddingnumberCell padding in px
fontSizenumberFont size in px
fontFamilystringFont family override
colorstringText color
textAlign'left' | 'center' | 'right'Cell text alignment

Video

Displays a video thumbnail that links to the video URL.

Email client note

Email clients do not support embedded video playback. The renderer outputs a clickable thumbnail image that links to the video URL. Always provide a good thumbnailUrl -- it's the only thing recipients see in their inbox.

PropertyTypeDescription
urlstringVideo URL (YouTube, Vimeo, etc.)
thumbnailUrlstringThumbnail image URL
altstringAlt text for thumbnail
widthnumber | 'full'Display width in px, or 'full' for 100%
align'left' | 'center' | 'right'Horizontal alignment
openInNewTabbooleanLink target behavior
placeholderUrlstringEditor-only placeholder

Section

A layout container that holds one or more columns. See Sections and Columns for full details.

PropertyTypeDescription
columnsColumnLayoutColumn layout preset
childrenBlock[][]Array of block arrays, one per column

Custom

A user-defined block type powered by field definitions and a Liquid template. See Custom Blocks for full details.

PropertyTypeDescription
customTypestringUnique identifier for the custom block type
fieldValuesRecord<string, unknown>Current values for defined fields
renderedHtmlstringCached rendered output
dataSourceFetchedbooleanWhether the data source has been fetched