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

# Design emails with drag-and-drop

> Build responsive emails visually with OneSignal’s Drag and Drop Email Builder — settings, rows, content blocks, personalization, and compliance links.

## Overview

The OneSignal Drag and Drop Email Builder lets you visually design responsive emails exactly as they appear in recipients’ inboxes — without writing full HTML.

You build emails using three core components:

* **Settings** – global styles and layout applied across the entire email
* **Rows** – horizontal layout containers that control structure and responsiveness
* **Content** – individual blocks such as text, images, buttons, and HTML

The sections below cover each component and the recommended order for building an email.

<Note>
  Use the Drag and Drop Email Builder if you want to:

  * Design emails visually without managing full HTML (HTML blocks are available)
  * Reuse rows or templates across campaigns
  * Allow non-technical teammates to safely edit content

  If you need full HTML control, custom fonts everywhere, or advanced dark mode logic, use the [HTML Editor](./design-emails-with-html) instead.
</Note>

### Recommended build flow

Follow this order for the best results and fewer rendering issues:

1. Configure global styles in **Settings**
2. Add layout structure using **Rows**
3. Insert **Content** blocks
4. Add personalization and links
5. Add an unsubscribe link (for marketing emails)
6. Save as a template or send

<Check>
  When finished, your email should:

  * Be no wider than 600px
  * Render cleanly on mobile and desktop
  * Include required compliance links
</Check>

<Warning>
  **Common mistakes that cause rendering or deliverability issues:**

  * **Missing unsubscribe link** — required for marketing emails. Without one, inbox providers are more likely to flag your email as spam.
  * **Email wider than 600px** — causes horizontal scrolling on mobile and breaks layouts in many clients.
  * **Background images in rows** — Outlook and several mobile clients do not render them. Use Image blocks instead.
  * **No fallback fonts** — custom web fonts only load in a few clients. Always declare system font fallbacks.
  * **Oversized images** — emails over 1 MB load slowly and may be blocked. Individual images should be under 200 KB.
</Warning>

***

## Settings

Settings define the foundational layout and styles for your email. These values cascade down to rows and content blocks unless explicitly overridden.

<Frame caption="Global settings panel in the Drag and Drop Editor">
  <img src="https://mintcdn.com/onesignal/RBBmVfkQbMT-0tMb/images/email/email-drag-and-drop-settings.png?fit=max&auto=format&n=RBBmVfkQbMT-0tMb&q=85&s=0a857f7754c6b1031926f2e62b6dde15" alt="Global settings panel in the Drag and Drop Editor" width="2418" height="1652" data-path="images/email/email-drag-and-drop-settings.png" />
</Frame>

| Design Setting                | Description                                                            |
| ----------------------------- | ---------------------------------------------------------------------- |
| Content area width            | Width of the email in pixels. **Recommended:** `600px`.                |
| Content area alignment        | Align content left or center.                                          |
| Background color              | Color behind the content area.                                         |
| Content area background color | Color inside the content area.                                         |
| Default font                  | Applied to all text unless overridden. Custom fonts require HTML.      |
| Link color                    | Default color for all links.                                           |
| Language                      | Sets the HTML `lang` attribute for accessibility. Defaults to English. |

<Note>
  **Recommended default:** Configure as much styling as possible in Settings to ensure consistency and reduce per-block overrides.
</Note>

***

## Rows

Rows define the horizontal layout of your email. Each row can contain one or more columns, and each column can contain content blocks.

Drag and drop rows into the editor to build your structure.

<Frame caption="Adding rows to structure an email">
  <img src="https://mintcdn.com/onesignal/RBBmVfkQbMT-0tMb/images/email/email-drag-and-drop-rows.png?fit=max&auto=format&n=RBBmVfkQbMT-0tMb&q=85&s=77120964b859903fc5b9b14ae94f1c44" alt="Adding rows to structure an email" width="2418" height="1652" data-path="images/email/email-drag-and-drop-rows.png" />
</Frame>

<Note>
  Use rows to control layout and spacing. Avoid relying on individual content blocks for major layout decisions.
</Note>

### Saved rows

Saved rows let you reuse headers, footers, or repeated sections across emails and templates.

Click the **save icon** on a row to save it.

<Frame caption="Saving a row for reuse">
  <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/f4244e8-save-row.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=d08bbd071e599b38cceb57a093db8837" alt="Saving a row for reuse" width="1056" height="650" data-path="images/docs/f4244e8-save-row.png" />
</Frame>

Access saved rows from **Rows > Saved rows**.

<Frame caption="Selecting a saved row">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/cc85e4fe9192d6917cf8b6e7be2ee3c13473d77cc7719d4bc4e14c26f40e00f8-image.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=534a234a40e10750ae07706628f9fecd" alt="Selecting a saved row" width="419" height="705" data-path="images/docs/cc85e4fe9192d6917cf8b6e7be2ee3c13473d77cc7719d4bc4e14c26f40e00f8-image.png" />
</Frame>

Saved row categories:

* **Empty** – blank row templates
* **My Saved Rows** – rows created by you or your team
* **Sample Rows** – OneSignal examples

### Row properties

Click the outer edge of a row to edit row-level settings.

<Note> If you see **Content** instead of **Row** when hovering, you’ve selected a content block. Click the outer container edge until the label reads **Row**. </Note>

| Row Property     | Description                                                                                       |
| ---------------- | ------------------------------------------------------------------------------------------------- |
| Backgrounds      | Color or image behind the row. **Recommended:** set background color in Settings for consistency. |
| Borders          | Border color, width, and style.                                                                   |
| Layout           | Show or hide rows on mobile or desktop.                                                           |
| Columns          | Add, remove, or resize columns and adjust column padding.                                         |
| Delete/Duplicate | Select a row and use the **delete** or **duplicate** icons to remove or copy it.                  |

<Warning> Avoid background images in rows. Email client support is inconsistent. If the row contains only an image, use an **Image block** instead. </Warning>

***

## Content

Content blocks are the elements recipients see — text, images, buttons, dividers, and HTML.

Drag a content block into a row column. It automatically adapts to the column width.

<Frame caption="Available content blocks">
  <img src="https://mintcdn.com/onesignal/RBBmVfkQbMT-0tMb/images/email/email-drag-and-drop-content.png?fit=max&auto=format&n=RBBmVfkQbMT-0tMb&q=85&s=c4a31c6aa103e112e90519cf6cc0956a" alt="Available content blocks" width="2418" height="1660" data-path="images/email/email-drag-and-drop-content.png" />
</Frame>

<Info>
  **Decision rules for content blocks:**

  * Use **Text blocks** for most copy.
  * Use **Image blocks** for visuals or custom typography.
  * Use **HTML blocks** only when you need advanced styling or behavior.
</Info>

### Custom fonts

The Drag and Drop Editor supports system fonts by default. To use custom fonts, you must use an HTML block.

```html HTML block theme={null}
<!-- Place this into a HTML block at the top of your email -->
<style type="text/css">
  /* Declare Bebas Neue (only loads in clients that support web fonts) */
  @font-face {
    font-family: 'Bebas Neue';
    font-style: normal;
    font-weight: 400;
    src: url('https://fonts.gstatic.com/s/bebasneue/v9/JTUSjIg69CK48gW7PXoo9Wlhzg.ttf') format('truetype');
  }
</style>

<h1 style="font-family:'Bebas Neue', Arial, Helvetica, sans-serif; 
           font-size:36px; line-height:1.2; margin:0; text-transform:uppercase;">
  Welcome!
</h1>
<p style="font-family:Arial, Helvetica, sans-serif; font-size:16px; margin:12px 0 0;">
  Thanks for subscribing.
</p>
```

<Warning>
  Many email clients (including Gmail and Outlook for Windows) do not load web fonts. Use system fonts for body text and reserve custom fonts for headlines only. Always include fallback fonts, or use images for guaranteed typography.
</Warning>

### Images & video

Upload images directly to the OneSignal dashboard so your team can reuse them. The editor supports cropping, filtering, and other effects. You can also reference externally hosted images and videos by URL — make sure each URL is publicly accessible.

#### Recommended image sizes for email

<AccordionGroup>
  <Accordion title="Aspect ratios">
    * Header/Banner images: `3:1` or `4:1` (e.g., `600×200` or `600×150`)
    * Hero images: `16:9` or `2:1` (e.g., `600×338` or `600×300`)
    * Square images: `1:1` (e.g., `300×300`) — good for product grids
    * Thumbnails: `1:1` or `4:3`
    * Max width: `600–700px` is standard (most email clients)
    * Design at `2x` for retina displays (e.g., `1200px` wide, displayed at `600px`)
  </Accordion>

  <Accordion title="File size">
    * Keep individual images under `100–200 KB`
    * Total email size (including images) under `1 MB`
    * Smaller images mean faster load times and better deliverability
  </Accordion>

  <Accordion title="File formats">
    * **JPG** — best for photos
    * **PNG** — best for graphics, logos, and images with transparency
    * **GIF** — for simple animations (keep file size small)
    * **WebP** — not widely supported in email yet; avoid
  </Accordion>

  <Accordion title="General tips">
    * Always include alt text for accessibility and for when images do not load
    * Use inline CSS for styling (many clients strip `<style>` tags)
    * Avoid background images (inconsistent client support)
    * Test across clients — Gmail, Outlook, and Apple Mail all render differently
    * Outlook often ignores image dimensions, so set both `width` and `height` attributes in HTML
  </Accordion>
</AccordionGroup>

### Links

OneSignal enables link tracking by default and supports multi-link tracking.

<Columns cols={2}>
  <Card title="Links" icon="link" href="./links#email">
    Configure link tracking, multi-link tracking, and click analytics for email.
  </Card>

  <Card title="Deep linking" icon="arrow-up-right-from-square" href="./deep-linking">
    Route recipients to specific screens in your app from email links.
  </Card>
</Columns>

#### Unsubscribe links

All marketing emails must contain an unsubscribe link. Emails without one are more likely to be flagged as spam by inbox providers. When a recipient clicks the default OneSignal unsubscribe link, their email [Subscription](./subscriptions) is automatically set to unsubscribed.

Add the `[unsubscribe_url]` tag to your email using either method:

<Tabs>
  <Tab title="Editor (Special links)">
    1. Select the text you want to turn into the unsubscribe link.
    2. Click the link icon in the toolbar.
    3. Choose **Special links > Unsubscribe**.

    <Frame caption="Adding the unsubscribe link using Special links in the editor">
      <img src="https://mintcdn.com/onesignal/RBBmVfkQbMT-0tMb/images/email/email-drag-and-drop-unsubscribe-link.png?fit=max&auto=format&n=RBBmVfkQbMT-0tMb&q=85&s=42c785978dc3142feba1b8de65cc9e62" alt="Adding the unsubscribe link using Special links in the editor" width="1320" height="936" data-path="images/email/email-drag-and-drop-unsubscribe-link.png" />
    </Frame>
  </Tab>

  <Tab title="HTML block">
    Paste the following into an HTML block:

    ```html theme={null}
    <a href="[unsubscribe_url]">Unsubscribe</a>
    ```
  </Tab>
</Tabs>

<Columns cols={2}>
  <Card title="Unsubscribe links" icon="link-slash" href="./unsubscribe-links-email-subscriptions">
    Compliance requirements and how OneSignal handles unsubscribes.
  </Card>

  <Card title="Custom unsubscribe page" icon="browser" href="./create-custom-unsubscribe-page">
    Replace the default unsubscribe flow with your own branded page.
  </Card>
</Columns>

### HTML blocks

Use HTML blocks when you need control that drag-and-drop content blocks cannot provide:

* **Dark mode overrides** — add `prefers-color-scheme` CSS. See [Dark mode styling](#dark-mode-styling-with-drag-and-drop) below.
* **Custom fonts** — declare `@font-face` rules with fallback stacks.
* **Advanced layouts** — multi-column grids, conditional content, or Outlook-specific markup.

<Note>
  JavaScript is not supported in email. Use inline CSS — many clients strip `<style>` tags, classes, and IDs.
</Note>

### Personalization

Use Liquid templating to insert subscriber-specific content like names, tags, or fallback values. Example: `{{ first_name | default: "there" }}`

<Frame caption="Using Liquid templating to personalize messages">
  <img src="https://mintcdn.com/onesignal/RBBmVfkQbMT-0tMb/images/email/email-drag-and-drop-personalization.png?fit=max&auto=format&n=RBBmVfkQbMT-0tMb&q=85&s=1bf7e704ceb2cdf940ffdfe3939dac44" alt="Using Liquid templating to personalize messages" width="1232" height="670" data-path="images/email/email-drag-and-drop-personalization.png" />
</Frame>

<Columns cols={2}>
  <Card title="Message personalization" icon="user-pen" href="./message-personalization">
    Available personalization variables and how to use them.
  </Card>

  <Card title="Using Liquid syntax" icon="code" href="./using-liquid-syntax">
    Conditionals, filters, loops, and advanced Liquid patterns.
  </Card>
</Columns>

***

## Dark mode

Most emails render acceptably in dark mode without changes. However, emails with brand colors, logos on white backgrounds, or colored sections often need adjustments.

### Do I need dark mode styling?

Add dark mode overrides if your email includes any of the following:

* **Brand-colored sections** — saturated colors become harsh in dark mode and hurt readability
* **Logos or icons on white/light backgrounds** — the background may invert while the image stays light, making it invisible
* **Text on colored backgrounds** — inverted backgrounds can clash with non-inverted text colors
* **Call-to-action buttons** — button backgrounds may invert to unexpected colors

If your email is mostly text with minimal styling, the default rendering is usually acceptable.

### Preview dark mode in the editor

Use the **Preview Mode** button to get a general preview of dark mode rendering. This preview is an approximation — actual rendering varies by inbox provider (see the [client behavior table](#how-email-clients-handle-dark-mode) below).

<Frame caption="Preview mode in the Drag and Drop Editor">
  <img src="https://mintcdn.com/onesignal/nqVPQMp5bHnJaL0x/images/email/email-drag-and-drop-dark-mode-preview.png?fit=max&auto=format&n=nqVPQMp5bHnJaL0x&q=85&s=8eb1757aa045df0becd6a393522853fe" alt="Preview mode in the Drag and Drop Editor" width="2852" height="1830" data-path="images/email/email-drag-and-drop-dark-mode-preview.png" />
</Frame>

<Frame caption="Light and dark mode toggle in the Drag and Drop Editor">
  <img src="https://mintcdn.com/onesignal/nqVPQMp5bHnJaL0x/images/email/email-drag-and-drop-light-dark-mode-toggle.png?fit=max&auto=format&n=nqVPQMp5bHnJaL0x&q=85&s=c6565bbb0effe970750a159cf234f23e" alt="Light and dark mode toggle in the Drag and Drop Editor" width="2852" height="1830" data-path="images/email/email-drag-and-drop-light-dark-mode-toggle.png" />
</Frame>

### How email clients handle dark mode

Every email client applies dark mode differently. You cannot control this behavior directly, but you can design emails that render well across all modes.

| Client                       | Behavior                                                         | Respects `prefers-color-scheme` CSS? |
| ---------------------------- | ---------------------------------------------------------------- | ------------------------------------ |
| **Apple Mail** (iOS/macOS)   | Full color inversion                                             | Yes                                  |
| **Gmail** (iOS/Android apps) | Partial inversion — changes light backgrounds but not all colors | No                                   |
| **Gmail** (Web)              | No dark mode rendering                                           | N/A                                  |
| **Outlook** (Windows)        | Full inversion using Word rendering engine                       | No — ignores most CSS overrides      |
| **Outlook** (Mac/iOS)        | Partial inversion                                                | Yes                                  |
| **Yahoo Mail**               | Partial inversion                                                | No                                   |
| **Samsung Mail**             | Full inversion                                                   | No                                   |

<Warning>
  **Common dark mode failures to watch for:**

  * **Disappearing logos** — a dark logo on a transparent PNG becomes invisible on a dark background. Add a white or light outline, or use a version with a built-in light background.
  * **Unreadable text** — dark text on a light background may stay dark after the background is inverted. Always pair text color overrides with background overrides.
  * **Clashing brand colors** — saturated brand colors that look great on white become harsh on dark backgrounds. Test desaturated or muted alternatives.
  * **Invisible buttons** — CTA buttons with dark text on a brand-colored background may lose contrast after partial inversion.
</Warning>

**Design tips:**

* Avoid pure white (`#FFFFFF`) and pure black (`#000000`). Use off-whites and dark grays to reduce the impact of full-inversion clients.
* Use transparent PNGs with care. They blend well with any background, but dark logos on transparent backgrounds become invisible in dark mode. Add a light outline or use a version with a built-in background for logos.
* On images that include text, outline dark text in white to ensure legibility. For white text on a dark background, outline in black.

### Dark mode styling with drag-and-drop

If only a few elements render poorly in dark mode, you can replace them with HTML blocks and override the styling directly using CSS classes and `!important` declarations.

<Steps>
  <Step title="Add an HTML block to the top of your email">
    Drag an **HTML block** into the first row of your email.

    <Frame caption="Adding an HTML block to the top of your email">
      <img src="https://mintcdn.com/onesignal/nqVPQMp5bHnJaL0x/images/email/email-drag-html-block.png?fit=max&auto=format&n=nqVPQMp5bHnJaL0x&q=85&s=b5ddeeb7ed1144655ba0ee92891f059f" alt="Adding an HTML block to the top of your email" width="1299" height="603" data-path="images/email/email-drag-html-block.png" />
    </Frame>
  </Step>

  <Step title="Add dark mode CSS">
    Paste the following into the HTML block. The `prefers-color-scheme: dark` media query applies styles only when the recipient’s email client is in dark mode.

    ```html HTML block theme={null}
    <meta name="color-scheme" content="light dark" />
    <meta name="supported-color-schemes" content="light dark" />
    <style>
      :root {
        color-scheme: light dark;
      }

      @media (prefers-color-scheme: dark) {
        .email-body {
          background-color: #1a1a1a !important;
          color: #f0f0f0 !important;
        }

        .email-header {
          background-color: #2d2d2d !important;
        }

        .email-button {
          background-color: #0a84ff !important;
        }
      }
    </style>
    ```
  </Step>

  <Step title="Replace problem content with HTML blocks">
    Replace any content blocks that do not render correctly in dark mode with HTML blocks that use the CSS classes defined above.

    <CodeGroup>
      ```html email-header theme={null}
      <div class="email-header" style="background-color: #f5f5f5; padding: 0; text-align: center;">
        <img src="https://dashboard.onesignal.com/assets/email/your-email-strategy-starts-here.jpg" 
             alt="Your email strategy starts here" 
             width="600" 
             style="display: block; width: 100%; max-width: 600px; height: auto;" />
      </div>
      ```

      ```html email-body theme={null}
      <div class="email-body" style="background-color: #ffffff; color: #333333; padding: 24px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; line-height: 1.5;">
        <p style="margin: 0 0 16px;">Hi {{ first_name | default: 'there' }}!</p>
        <p style="margin: 0 0 16px;">Ready to craft a stunning email? Here\u2019s how to get started:</p>
        <ul style="margin: 0 0 16px; padding-left: 20px;">
          <li style="margin-bottom: 8px;"><strong>Drag &amp; drop simplicity:</strong> Add text, images, and buttons to your email.</li>
          <li style="margin-bottom: 8px;"><strong>Build smarter with Saved Rows:</strong> Create reusable headers and footers for consistent branding.</li>
          <li style="margin-bottom: 8px;"><strong>Test &amp; preview:</strong> Verify your email on every device before sending.</li>
        </ul>
      </div>
      ```

      ```html email-button theme={null}
      <div class="email-body" style="background-color: #ffffff; padding: 0 24px 24px; text-align: center;">
        <a class="email-button" href="https://example.com" 
           style="background-color: #0066cc; color: #ffffff; padding: 14px 32px; 
                  text-decoration: none; border-radius: 4px; display: inline-block; 
                  font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight: bold;">
          Get Started
        </a>
      </div>
      ```
    </CodeGroup>
  </Step>
</Steps>

<Check>
  Return to preview mode to verify the dark mode styles are applied correctly.
</Check>

***

## Save your work

Save your email design as a [**template**](./templates) for future use.

<Frame caption="Save email as a template">
  <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b827bbc-Email-Save_As_Template.jpg?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=042193dfb7e8d814f99deb2b12bb26fa" alt="Save email as a template" width="2250" height="1176" data-path="images/docs/b827bbc-Email-Save_As_Template.jpg" />
</Frame>

***

## FAQ

### How do I add a custom unsubscribe link?

Replace the default `[unsubscribe_url]` with your own URL. You are responsible for updating the email Subscription status in OneSignal when a recipient unsubscribes. See [Create a custom unsubscribe page](./create-custom-unsubscribe-page) for setup details.

### Why does my email look different in Outlook?

Outlook on Windows uses the Microsoft Word rendering engine, which does not support modern CSS. Common issues include ignored `max-width`, collapsed background images, and missing web fonts. Test in Outlook specifically and use inline CSS with explicit `width` and `height` attributes on images.

### What is the maximum email size?

Keep total email size (HTML + images) under 1 MB. Emails over 102 KB of HTML are clipped by Gmail, which hides content below the fold behind a "View entire message" link. Optimize images and remove unused code to stay under this threshold.

### Can I reuse parts of an email across multiple campaigns?

Yes. Save any row as a **Saved Row** by clicking the save icon on the row. Saved rows appear under **Rows > My Saved Rows** and can be dragged into any email. For full email reuse, save the entire design as a [template](./templates).

### How do I preview my email before sending?

Use the **Preview** button in the top toolbar to see how your email renders on desktop and mobile. To send a live test, click **Send Test Email** and enter a recipient address. Test emails are delivered to the inbox so you can verify rendering, links, and personalization in actual email clients.

### Do emojis work in emails?

Yes, but they render differently across email clients. Outlook on Windows is the most inconsistent — emojis may appear as black-and-white outlines or boxes. If emojis are part of your subject line or CTA text, test across clients before sending.

### How do I import an existing HTML email template?

You can bring existing HTML templates into OneSignal three ways:

1. Forward the email to OneSignal using [Email Template forwarding](./email-template-forwarding)
2. Use the [Create Template API](/reference/create-template) to upload HTML programmatically
3. Copy-paste your HTML directly into the [HTML Editor](./design-emails-with-html)

## Related pages

<Columns cols={3}>
  <Card title="Email overview" icon="envelope" href="./email-messaging">
    End-to-end guide to sending email with OneSignal.
  </Card>

  <Card title="Design emails with HTML" icon="code" href="./design-emails-with-html">
    Full HTML control, dark mode overrides, and advanced styling.
  </Card>

  <Card title="Email templates" icon="copy" href="./templates">
    Save and reuse email designs across campaigns.
  </Card>

  <Card title="Unsubscribe links" icon="link-slash" href="./unsubscribe-links-email-subscriptions">
    Add default or custom unsubscribe links for compliance.
  </Card>

  <Card title="Message personalization" icon="user-pen" href="./message-personalization">
    Personalize emails with tags, Liquid syntax, and dynamic content.
  </Card>

  <Card title="AB testing" icon="flask" href="./ab-testing">
    Test subject lines, content, and send times to optimize engagement.
  </Card>
</Columns>
