Drag-n-Drop Email Editor Component for React.js
See the codeOfficial React component for embedding Unlayer’s drag-and-drop email editor in your app.
Add a production-ready, drag-and-drop email builder to your React app with a single component. react-email-editor lets developers embed Unlayer, load and save designs, listen to editor events, customize configuration, and export responsive HTML.
Use it when you need email template creation inside your app without building and maintaining a full visual editor from scratch.
| Video Overview |
|---|
| Watch video overview: https://youtu.be/qp9t74G4VyM |
Check out the live demo here: https://react-email-editor-demo.netlify.app/ (Source Code)
The easiest way to use React Email Editor is to install it from NPM and include it in your own React build process.
npm install react-email-editor --save
Version 2.0 is a modernization release — the component API is unchanged, and most apps can upgrade without code changes. Requirements and packaging did change:
react-email-editor/dist/... are blocked by the new exports map.node_modules.See the CHANGELOG for the full list.
Require the EmailEditor component and render it with JSX:
import React, { useRef } from 'react';
import { createRoot } from 'react-dom/client';
import EmailEditor, { EditorRef, EmailEditorProps } from 'react-email-editor';
const App = (props) => {
const emailEditorRef = useRef<EditorRef>(null);
const exportHtml = () => {
const unlayer = emailEditorRef.current?.editor;
unlayer?.exportHtml((data) => {
const { design, html } = data;
console.log('exportHtml', html);
});
};
const onReady: EmailEditorProps['onReady'] = (unlayer) => {
// editor is ready
// you can load your template here;
// the design json can be obtained by calling
// unlayer.loadDesign(callback) or unlayer.exportHtml(callback)
// or generated from React code with @unlayer/react-elements (renderToJson)
// const templateJson = { DESIGN JSON GOES HERE };
// unlayer.loadDesign(templateJson);
};
return (
<div>
<div>
<button onClick={exportHtml}>Export HTML</button>
</div>
<EmailEditor ref={emailEditorRef} onReady={onReady} />
</div>
);
};
createRoot(document.getElementById('app')!).render(<App />);
See the example source for a reference implementation.
The editor renders into the DOM, so the component is client-only. The published bundle includes the 'use client' directive, so with the Next.js App Router you can import it directly from any Client Component — no next/dynamic workaround required.
All unlayer methods are available in the editor instance (emailEditorRef.current.editor). See the Unlayer Docs for more information, or log the object in the console to explore it. Here are the most used ones:
| method | params | description |
|---|---|---|
| loadDesign | Object data | Takes the design JSON and loads it in the editor |
| saveDesign | Function callback | Returns the design JSON in a callback function |
| exportHtml | Function callback | Returns the design HTML and JSON in a callback function |
editorId {String} HTML div id of the container where the editor will be embedded (optional)minHeight {String} minimum height to initialize the editor with (default 500px)onLoad {Function} called when the editor instance is createdonReady {Function} called when the editor has finished loadingoptions {Object} options passed to the Unlayer editor instance (default {})
style {Object} style object for the editor container (default {})The email editor output is tested using the most popular email clients.
| Gmail ✔ | Apple Mail ✔ | Outlook ✔ | Yahoo! Mail ✔ |
Add AI-powered content creation to your embedded email editor.
Unlayer’s AI Assistant helps users generate, rewrite, translate, and improve email content directly inside the editor. Developers can enable AI features through the editor configuration, giving users a faster way to create polished emails without leaving your app.
Custom tools can help you add your own content blocks to the editor. Every application is different and needs different tools to reach it's full potential. Learn More
You can submit new language translations by creating a PR on this GitHub repo: https://github.com/unlayer/translations. Translations managed by PhraseApp
@unlayer/react-elements: write templates in code as React components (Email, Row, Column, Heading, Paragraph, Button, …) and render them to email HTML, responsive web pages or print-ready HTML for PDFs. renderToJson() synchronously returns design JSON you can pass to loadDesign, so templates written in code (by developers, coding agents, or an LLM at runtime) stay editable in this editor.Copyright (c) 2026 Unlayer. MIT Licensed.
Overall
Maintained
Code review
Latest release
Releases this year
176 followers · starred Apr 2021
288 followers · starred Jan 2020
40 followers · starred Jun 2022
35 followers · starred Jul 2026
Drag-n-Drop Email Editor Component for React.js
See the codeOfficial React component for embedding Unlayer’s drag-and-drop email editor in your app.
Add a production-ready, drag-and-drop email builder to your React app with a single component. react-email-editor lets developers embed Unlayer, load and save designs, listen to editor events, customize configuration, and export responsive HTML.
Use it when you need email template creation inside your app without building and maintaining a full visual editor from scratch.
| Video Overview |
|---|
| Watch video overview: https://youtu.be/qp9t74G4VyM |
Check out the live demo here: https://react-email-editor-demo.netlify.app/ (Source Code)
The easiest way to use React Email Editor is to install it from NPM and include it in your own React build process.
npm install react-email-editor --save
Version 2.0 is a modernization release — the component API is unchanged, and most apps can upgrade without code changes. Requirements and packaging did change:
react-email-editor/dist/... are blocked by the new exports map.node_modules.See the CHANGELOG for the full list.
Require the EmailEditor component and render it with JSX:
import React, { useRef } from 'react';
import { createRoot } from 'react-dom/client';
import EmailEditor, { EditorRef, EmailEditorProps } from 'react-email-editor';
const App = (props) => {
const emailEditorRef = useRef<EditorRef>(null);
const exportHtml = () => {
const unlayer = emailEditorRef.current?.editor;
unlayer?.exportHtml((data) => {
const { design, html } = data;
console.log('exportHtml', html);
});
};
const onReady: EmailEditorProps['onReady'] = (unlayer) => {
// editor is ready
// you can load your template here;
// the design json can be obtained by calling
// unlayer.loadDesign(callback) or unlayer.exportHtml(callback)
// or generated from React code with @unlayer/react-elements (renderToJson)
// const templateJson = { DESIGN JSON GOES HERE };
// unlayer.loadDesign(templateJson);
};
return (
<div>
<div>
<button onClick={exportHtml}>Export HTML</button>
</div>
<EmailEditor ref={emailEditorRef} onReady={onReady} />
</div>
);
};
createRoot(document.getElementById('app')!).render(<App />);
See the example source for a reference implementation.
The editor renders into the DOM, so the component is client-only. The published bundle includes the 'use client' directive, so with the Next.js App Router you can import it directly from any Client Component — no next/dynamic workaround required.
All unlayer methods are available in the editor instance (emailEditorRef.current.editor). See the Unlayer Docs for more information, or log the object in the console to explore it. Here are the most used ones:
| method | params | description |
|---|---|---|
| loadDesign | Object data | Takes the design JSON and loads it in the editor |
| saveDesign | Function callback | Returns the design JSON in a callback function |
| exportHtml | Function callback | Returns the design HTML and JSON in a callback function |
editorId {String} HTML div id of the container where the editor will be embedded (optional)minHeight {String} minimum height to initialize the editor with (default 500px)onLoad {Function} called when the editor instance is createdonReady {Function} called when the editor has finished loadingoptions {Object} options passed to the Unlayer editor instance (default {})
style {Object} style object for the editor container (default {})The email editor output is tested using the most popular email clients.
| Gmail ✔ | Apple Mail ✔ | Outlook ✔ | Yahoo! Mail ✔ |
Add AI-powered content creation to your embedded email editor.
Unlayer’s AI Assistant helps users generate, rewrite, translate, and improve email content directly inside the editor. Developers can enable AI features through the editor configuration, giving users a faster way to create polished emails without leaving your app.
Custom tools can help you add your own content blocks to the editor. Every application is different and needs different tools to reach it's full potential. Learn More
You can submit new language translations by creating a PR on this GitHub repo: https://github.com/unlayer/translations. Translations managed by PhraseApp
@unlayer/react-elements: write templates in code as React components (Email, Row, Column, Heading, Paragraph, Button, …) and render them to email HTML, responsive web pages or print-ready HTML for PDFs. renderToJson() synchronously returns design JSON you can pass to loadDesign, so templates written in code (by developers, coding agents, or an LLM at runtime) stay editable in this editor.Copyright (c) 2026 Unlayer. MIT Licensed.
Overall
Maintained
Code review
Latest release
Releases this year
176 followers · starred Apr 2021
288 followers · starred Jan 2020
40 followers · starred Jun 2022
35 followers · starred Jul 2026