Tailkits product guide

Maizzle

Vue and Tailwind CSS 4 email framework with CSS inlining and caniemail checks

FreeEmail
Visit Maizzle
Pricing
Free
Categories
Email
Listed
Sep 2026
Updated
Oct 2026

Details about Maizzle

Short verdict: Maizzle 6 turns Vue templates styled with Tailwind CSS 4 into email HTML with inlined styles, Gmail-safe class names and Outlook fallbacks, and its dev UI flags CSS that email clients only partly support. Our order receipt came out at 14.7 KB, and a five-template build took 2 to 4 seconds. The trade-offs are a heavy install (341 packages, 255 MB), a setup command in the docs that fails, and order data and plain text that need extra work. It suits Vue teams and anyone who wants emails as HTML files built from their own repository. React teams should start with React Email.

How we reviewed it: On 21 October 2026 we installed Maizzle 6.2.2 in an empty folder (Linux, Node.js 22.22.0) following the installation page, then ran the starter's dev server and build. We wrote our own order receipt with an item table, product images, computed totals and a button, previewed it at desktop and phone sizes, built it with the CLI and rendered it with the render() API. Timings are single runs in a cloud container, so treat them as rough. We did not send email, test in real inboxes or try the Vite plugin inside another app. Download and GitHub figures come from npm and GitHub on the same day.

What you get for free

PriceFree, MIT license. The same team sells Mailviews, an optional template library ($99 a year for one person, per Mailviews).
Version6.2.2, published 17 October 2026. Version 6.0.0, a full rewrite, shipped on 9 June 2026; 26 stable 6.x releases so far.
StackVue single-file components or Markdown, built on Vite 8 and styled with Tailwind CSS 4 through the @maizzle/tailwindcss preset. Vite 8 needs Node.js 20.19, or 22.12 and later.
Components32 by our count ("30+" per Maizzle), including Button, Img with a dark-mode source, Preheader, Outlook-only blocks and QrCode.
Ways to run itCLI project, Vite plugin (guides for Laravel, Nuxt, Astro, SvelteKit and four more frameworks) or Node.js API.
Project health89,229 npm downloads in the week of 28 September to 4 October 2026, the last week with complete npm data. About 1,600 GitHub stars, 1 open issue, no open pull requests.

What we found

The setup wizard works; the docs' one-line command does not

npx maizzle new asks for a folder, a starter and whether to install, and finished installing in 27.4 s with an empty npm cache. The docs' non-interactive alternative, npx maizzle new maizzle/maizzle project-name --install, failed with a 404 for maizzle/maizzle/tarball/main: the starter repository's default branch is master, which the wizard requests by name. Adding #master made the one-liner work. The starter ships four emails (order confirmation, password reset, two-factor code, welcome) and asks for @maizzle/framework at latest, so pin a version before CI depends on it.

A preview that checks your CSS as you type

npx maizzle serve found port 3000 taken, moved to 3001 on its own and was ready in 1.7 s. The UI lists every template, resizes the preview to seven device presets from 360 to 1,024 px wide, and shows the compiled HTML. The bottom panel does the most work. Checks listed six warnings for CSS that Gmail, Outlook, Yahoo! Mail or Apple Mail only partly support (media queries, border-radius, max-width, :hover), each with a line number. Stats showed 14.16 KB, 4 images and 1 link. Previewing sent no template content out: apart from the email's own fonts and images, the only outside request was the dev server downloading Can I Email's public data. Without SMTP settings, the Test tab sends through Ethereal, Nodemailer's capture service, per the source code; we did not send.

Maizzle dev UI previewing our order receipt, with the Checks panel listing CSS warnings for media queries and border-radius in Gmail, Outlook and Yahoo! Mail
Our receipt in the dev UI. The Checks tab lists each partly supported CSS feature with its line number.

Our receipt: Tailwind in, inline styles out

The receipt is one Vue file: a v-for table of three items, totals computed in the template ($69.43 with 8% tax and shipping) and a button with a hover color. In the output, the styles sat in 57 style attributes and only eight classes remained, for hover, the 600 px breakpoint and dark mode, renamed so Gmail keeps them (sm:px-4 became sm-px-4). Colors came out as hex, the button got Outlook spacing markup, and sections were wrapped in Outlook-only tables. Maizzle also added role="none" to every table, our item table included, which tells screen readers to ignore its rows and columns.

Our order receipt at Maizzle's 390 px iPhone 17 Pro preview size, normal on the left and with Emulate dark mode on the right, with three items and a $69.43 total
The receipt at the iPhone 17 Pro preset. Emulate dark mode (right) inverts colors like forced-dark clients rather than applying our dark: styles; with the browser in dark mode, those styles and the dark logo appeared.

Order data, image paths and plain text take extra work

maizzle build passes no props, and the docs say preview data is for the dev server only. Our receipt, which takes the order as props, threw an error and stopped the build after two of five files. Emails with real data go through render() at send time, which worked with our props, or keep your email service's merge tags, as the starter does.

Built HTML keeps paths such as /logo.png, so you host the images and set a base URL. The docs' example base plus the starter's paths gave https://cdn.example.com/emails//logo-footer.png, with a double slash, and a base URL set in a template also broke images in the dev preview.

A plain-text part is one flag away (--plaintext), but it ran our whole item table into one line. The <Plaintext> and <NotPlaintext> components plus an explicit newline per item fixed it.

Output and build

MeasurementResult
Install, empty npm cache27.4 s and 25.7 s (two runs)
Installed packages341 packages, 255 MB of node_modules
CLI build of 5 templates2.05 to 2.31 s by Maizzle's timer, 3.6 to 4.0 s in total (3 runs)
Receipt HTML14,668 bytes formatted, 13,953 bytes with --minify, about 2.4 KB gzipped
Receipt plain text484 bytes
render() per email1.4 to 1.8 s for the first, 0.5 to 0.9 s after that
npm audit7 moderate advisories from one sprintf-js chain under the Markdown plugin

Minifying saves little because 3,557 bytes of the receipt are hidden spacer characters from the Preheader component and 5,830 bytes are inline styles; 14.7 KB is far below the roughly 100 KB at which Gmail clips. The install is heavy because the dev UI's libraries, such as Lucide icons (33 MB) and Reka UI (18 MB), are regular dependencies, as is TypeScript (24 MB), so build servers install them too.

What you still have to build

  • Sending. Maizzle outputs HTML and text; a provider such as Postmark or Amazon SES delivers it. The docs have sending guides for seven services.

  • Image hosting and the data path. Host images publicly, and choose between render() at send time and merge tags.

  • Inbox testing. Maizzle says its components are render-tested in Apple Mail, Gmail, Yahoo! Mail and Outlook, and still recommends testing your emails with tools such as Litmus.

  • Accessibility. Set role="table" on data tables yourself; Maizzle only adds role="none" where no role exists, and ours survived the build.

Pros and cons

Pros

  • Tailwind CSS 4 classes become inline styles, hex colors and Gmail-safe class names with no setup.

  • The dev UI flags partly supported CSS with line numbers and shows the email's size.

  • Outlook fallbacks for layout and buttons are added for you.

  • One MIT-licensed package works as a CLI, a Vite plugin or an API, with 26 releases since June 2026.

Cons

  • Heavy install: 341 packages and 255 MB.

  • The documented one-line setup fails until you add #master.

  • Templates that take props cannot go through maizzle build.

  • Automatic plain text flattens tables, and dark mode emulation ignores your dark: styles.

  • render() took 0.5 to 0.9 s per email, slow if you render at send time.

How Maizzle compares

  • React Email does the same job with React and TypeScript components and is far more widely used: about 6.2 million weekly npm downloads for react-email against Maizzle's 89,000. In our review of it on the same day, a similar receipt rendered in a median 17 ms after the first call (0.5 to 0.9 s here), and its production install was 117 packages and 79 MB. Its preview, though, uploads each email you open to a spam-check service. Maizzle's migration guide maps React Email's core components one to one and adds Outlook-only, VML background and plain-text components. Pick React Email for a React app.

  • MJML uses its own tags, such as <mj-section> and <mj-column>, instead of Tailwind classes. Version 5.4.1 is MIT-licensed and had about 2.4 million npm downloads the same week. Pick it if your team already knows MJML or wants a markup language rather than Vue and Tailwind; Maizzle also publishes a guide for moving from it.

See all email tools for sending services and other options.

Who should use Maizzle

Use it if your team writes Vue or plain HTML, wants its emails in its own repository with a preview that warns about client support, and sends through any provider. Agencies building template sets get plain HTML files from every build. Look elsewhere if your app is React, if you render at send time and need speed, or if a 255 MB dependency is a problem for your CI.

FAQ

Is Maizzle free?

Yes. Maizzle is MIT-licensed and free for any project. Mailviews, a separate template and component library from the same team ($99 a year for one person), is optional.

Do I need to know Vue to use Maizzle?

Some. Templates are Vue single-file components, but most of our receipt was component tags and Tailwind classes; we needed Vue only for the item loop, the computed totals and props. Markdown templates are also supported.

Can Maizzle send emails?

No. It builds HTML and plain text that you send through an email service such as Resend, Postmark, SendGrid or Amazon SES, and the docs have a guide for each. The dev server's Test tab sends test messages to Ethereal, a capture service, unless you add your own SMTP settings.

How do I put real order data into a Maizzle email?

Call render() with props when you send. The maizzle build command passes no props, and in our test a template that required them stopped the build. For static builds, keep your email service's merge tags in the template instead.

Can I upgrade a Maizzle 5 project to version 6?

Only by porting it. Maizzle 6 replaces HTML templates with PostHTML expressions by Vue files, and the upgrade guide recommends starting a new project and copying your templates over. The last 5.x release was 5.5.0 on 12 February 2026.