Quick start
Import theEmailTheming plugin and add it to your extensions:
How theming works
Themes are CSS-in-JS style objects that map to email component types (headings, paragraphs, links, buttons, etc.). Each theme defines a set ofReact.CSSProperties for every supported
component.
During composeReactEmail, the EmailTheming
plugin acts as a SerializerPlugin that resolves styles for each node based on its type and
depth in the document tree. These styles are then inlined directly onto the rendered React
Email components as style attributes. This is necessary because email clients don’t
reliably support <style> tags or external stylesheets.
The resolved styles are passed to each node’s renderToReactEmail() method via the style
prop, where they can be spread onto the rendered element.
Built-in themes
The editor ships with two themes:| Theme | Description |
|---|---|
'basic' | Full styling: typography, spacing, borders, and visual hierarchy. This is the default. |
'minimal' | Essentially no styles. Gives you a blank slate to build your own look from scratch. |
.configure():
Switching themes dynamically
Use React state to toggle themes at runtime. Re-key theEditorProvider to apply the new theme:
The
key={theme} on EditorProvider forces React to remount the editor when the theme changes,
ensuring the new theme is applied cleanly.Custom themes
Instead of being limited to built-in presets, you can define custom themes using a CSS-in-JS object that maps component names to styles.Extending a built-in theme
UseextendTheme to start from a built-in theme and override specific styles:
Creating a theme from scratch
UsecreateTheme to build a theme without inheriting from a built-in preset.
When no extends is set, the minimal reset is used as a base:
Passing a theme config inline
You can also pass aThemeConfig object directly to the theme prop without using the
helper functions:
Custom theme values appear in the inspector UI, and users can still tweak them
interactively. The inspector doesn’t distinguish between built-in and custom values.
Theme components
Themes define styles for the following email components:| Component | Description |
|---|---|
reset | CSS reset styles |
body | Email body wrapper |
container | Content container |
h1 | Level 1 heading |
h2 | Level 2 heading |
h3 | Level 3 heading |
paragraph | Text paragraphs |
list | Ordered and unordered lists |
listItem | Individual list items |
listParagraph | Paragraphs inside list items |
nestedList | Nested list styles |
blockquote | Block quotes |
codeBlock | Code blocks |
inlineCode | Inline code |
link | Hyperlinks |
button | Email buttons |
section | Content sections |
footer | Footer area |
hr | Horizontal rules |
image | Images |
Theme-aware serialization
WhenEmailTheming is in your extensions array, the composeReactEmail function automatically
applies theme styles to the exported HTML. No extra configuration is needed.
Examples
See theming in action with a runnable example:Email Theming
Basic/Minimal/Custom theme toggle with live preview.
Custom Themes
Define custom themes with createTheme and extendTheme.