File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -60,6 +60,29 @@ Most frameworks quietly drop the awkward clients because supporting them is tedi
6060
6161</div >
6262
63+ ### Against the compiler frameworks
64+
65+ Checked against each project's own documentation, 2026-08-22. These are all good
66+ tools; the axis that separates them is whether a compiler stands between you and the
67+ markup that ships.
68+
69+ | | ** html-email** | [ MJML] ( https://github.com/mjmlio/mjml ) | [ Maizzle] ( https://maizzle.com ) | [ React Email] ( https://github.com/resend/react-email ) |
70+ | ---| :-:| :-:| :-:| :-:|
71+ | You author | HTML | ` <mj-*> ` markup language | Vue SFCs + Tailwind | React/JSX components |
72+ | Build step to get HTML | optional (concatenation only) | required (compile) | required (Vite pipeline) | required (render) |
73+ | Runtime dependencies | 0 | npm package | Node + Vite + Tailwind | Node + React |
74+ | Ships markup you wrote | yes | no — compiler output | no — pipeline output | no — render output |
75+ | Hand-editing the shipped HTML | expected | round-trip is lost | round-trip is lost | round-trip is lost |
76+ | CSS inlining | not needed (styles authored in place) | automatic | configurable transformers | via Tailwind component |
77+ | Lints * other* tools' output | yes — point it at any HTML email | no | no | no |
78+
79+ The trade is real and runs both ways. A compiler gives you components, scoping, and
80+ a smaller surface to get wrong, and for a large template library that is worth a lot.
81+ This project takes the other side: the HTML in the repository is the HTML that
82+ arrives, so a client-specific quirk is fixed where you can see it, and nothing has to
83+ survive a regeneration. The [ 28 documented quirks] ( ./docs/quirks.md ) are the reason
84+ that trade is worth making here.
85+
6386## How it builds
6487
6588``` mermaid
You can’t perform that action at this time.
0 commit comments