The document is JSON. That is why it can be free.
The drag-and-drop email builder, free forever, with no watermark and no signup required to build, preview, test-send or export. Ninety sector templates included, RTL first-class, and a linter that catches Gmail clipping before you send.
- #Drag-and-drop
- #MJML
- #Dark-mode
- #RTL
- #Linter
- #Export
Sixteen block types
Sections with up to four columns, text, headings, images, buttons, dividers, spacers, social rows, video thumbnails, product cards, repeaters bound to a data array, countdowns, menus, QR codes, an HTML escape hatch, and an unsubscribe block that cannot be deleted on the campaign plane.
One compiler, two runtimes
The same TypeScript compiles the preview in your browser and the final HTML on our servers. If preview and send-time output ever diverged the product would be broken, so they share code rather than being kept in sync.
Undo, autosave, versions
A hundred steps of history with per-block granularity, autosave to local storage every three seconds and to the server every fifteen, and named version snapshots with a diff and restore.
RTL is first-class, not an afterthought
dir="rtl", mirrored padding and correct alignment throughout, verified in Arabic and Turkish. Translating a template preserves the structure rather than re-laying it out.
Outlook, handled
Tables for layout, all CSS inlined, MSO conditional comments, VML for background images and rounded buttons, explicit mso-line-height-rule, retina images at 2×, and a fluid-hybrid technique for the clients that ignore media queries.
Export without an account
Inlined HTML ready to paste anywhere, MJML source, the JSON document, a PDF preview, or a ZIP with the images. No watermark. Import works too: paste HTML and anything unconvertible is preserved in an HTML block rather than dropped.
Open it, build something, take it with you.
- [01]
Start from a sector template
Ninety of them, each with a filled sample-data set, a suggested subject and preheader, a plaintext version and a note on when to use it.
- [02]
Drag, drop, reorder
From the palette, between columns, and by keyboard — arrow keys move a selected block, because a tool marketed as the best cannot skip accessibility.
- [03]
Watch the linter
It runs continuously in a side panel. Errors block a send; warnings need an acknowledgement that is recorded.
- [04]
Export or send
HTML, MJML, JSON, PDF or ZIP — or connect a domain and send it as a campaign.
It tells you before the receiver does.
| Check | Severity | Why |
|---|---|---|
| Compiled size above 102 KB | error | Gmail clips the message — and the unsubscribe link often falls below the clip. |
| No plaintext-visible unsubscribe | error | A campaign-plane message cannot be sent without one. |
| Broken merge tag reference | error | A campaign whose sample render leaves an unresolved tag is blocked. |
| Link to a blacklisted domain | error | Checked against Spamhaus DBL and SURBL at lint time, not send time. |
| Missing alt text | warning | Screen readers skip the image and spam filters score it worse. |
| Image-to-text ratio above 70% | warning | A spam signal, and the message is unreadable with images blocked. |
| Contrast below WCAG AA | warning | Measured on the compiled output, in both light and dark rendering. |
| Missing preheader | warning | The inbox shows the first line of body text instead, which is rarely what you want. |
| Background image used | info | Breaks in Outlook desktop. The compiler offers a VML fallback. |
| Web font used | info | Outlook ignores it. The compiler always emits a fallback and names the clients that will use it. |
| Subject above 60 characters | info | Shown with a mobile truncation preview so you can see where it cuts. |
JSON in, email-safe HTML out.
Storing the document as a block tree rather than HTML is the single most important decision in the builder. It gives deterministic re-rendering when we improve the compiler, safe merge-tag substitution, per-block validation, diffable version history, and translation without re-layout.
- Section
- Divider
- Spacer
- Heading
- Text
- Button
- Menu
- HTML
- Image
- Video
- Social
- QR code
- Product
- Repeater
- Countdown
- Unsubscribe
{
"version": 2,
"settings": {
"width": 600,
"backgroundColor": "#f4f4f5",
"fontFamily": "Inter, Arial, sans-serif",
"fallbackFont": "Arial, sans-serif",
"darkMode": "adaptive",
"direction": "rtl",
"language": "ar"
},
"blocks": [
{
"id": "b_01",
"type": "section",
"props": { "padding": [24, 24, 24, 24] },
"columns": [
{
"width": "50%",
"blocks": [
{ "id": "b_02", "type": "image",
"props": { "src": "hero", "alt": "Required" } }
]
},
{
"width": "50%",
"blocks": [
{ "id": "b_03", "type": "text",
"props": { "text": "{{ first_name | default: \"there\" }}" } }
]
}
]
}
]
}- Editor bundle, gzipped
- Under 280 KB
- Preview re-render after an edit
- Under 60 ms
- Compile a 40-block document
- Under 120 ms
- Autosave round trip
- Under 200 ms
- Gallery page LCP
- Under 1.2 s
- Undo history
- 100 steps
- Max nesting depth
- 3
- Max columns per section
- 4
- Compiled size
- Warned at 90 KB, blocked at 200 KB
- Content width
- 600 px, fluid-hybrid on mobile
- Merge tag language
- A restricted Liquid subset, evaluated in our own sandbox
- Render limits
- 1,000 loop iterations, 250 ms total render time
Free forever. No watermark. No account to export.
An email builder is a commodity feature that every provider gates behind a paid plan. Making ours free, better and exportable is worth more to us as an acquisition channel than it would ever be as a line item — and the marginal cost of a free user is a few hundred kilobytes of object storage.