MailKaro docs
MailKaro is a white-label, drag-and-drop email editor you embed in your product with a few lines of React. Your customers design on-brand emails; you get clean, render-ready HTML back.
The editor ships as one npm package, react-email-craft, with a react-email-editor-compatible API, the same component, props, and ref, so existing code and designs work unchanged. Under the hood it renders the full MailKaro editor, and the server-side renderer turns a saved design into email-safe HTML or MJML.
How it fits together#
- Embed the editor in your app with
<EmailEditor />fromreact-email-craft. Pass a publishable embed token (pk_live_…) that scopes the plan and enabled features. - Save the design, a JSON document you store in your own database.
- Render to HTML on your server with
email-craft-sdkand send it through whatever ESP you already use.
Nothing paid is ever unlocked in the browser: entitlements are decided server-side from the token, so a missing, invalid, or expired token always falls back to the free editor.
Start here#
- Installation, add the package.
- Quick start, the editor on screen in a few lines.
- Backend integration, wire the server so AI, uploads, and plans light up (secrets stay server-side).
- Unlayer compatibility, existing designs load as-is.
- Elements, every block and its options.
Frequently asked questions#
- What is MailKaro?
- A white-label, drag-and-drop email editor you embed in your product, plus a server-side renderer that turns a saved design into email-safe HTML or MJML.
- Which package do I install?
- react-email-craft for React. Vue, Angular and plain JavaScript have vue-email-craft, angular-email-craft and vanilla-email-craft. For rendering on your server, add email-craft-sdk.
- Is it compatible with react-email-editor?
- Yes. react-email-craft has the same component, props and ref as react-email-editor, and existing Unlayer design JSON is converted when you call loadDesign().
- Can the browser unlock paid features on its own?
- No. Entitlements are decided on the server from the embed token. A missing, invalid or expired token always falls back to the free editor.