finds.dev← search

// the find

forwardemail/email-templates

★ 3,733 · JavaScript · MIT · updated Dec 2025

Create, preview (browser/iOS Simulator), and send custom email templates for Node.js. Made for @forwardemail, @ladjs, @cabinjs, @spamscanner, and @breejs.

A Node.js wrapper around Nodemailer that adds template rendering (Pug, EJS, Handlebars, etc.), automatic CSS inlining via Juice, i18n support, and browser preview in development. It's the standard choice if you're building transactional email in a Node app and want template-based rendering without wiring everything together yourself. Maintained by the Forward Email team, so it has real production use behind it.

1. The development preview workflow is genuinely useful — auto-opens rendered emails in your browser without sending anything, which cuts iteration time significantly. 2. CSS inlining via Juice is configurable at the right granularity: you can inline per-stylesheet, skip it entirely, or pass through to `<style>` tags now that most clients support them. 3. Pluggable template engines via consolidate means you're not locked into Pug — EJS, Handlebars, Nunjucks all work with a one-line config change. 4. The `render`/`renderAll`/`send` separation is clean: you can use just the rendering layer without Nodemailer if you have your own transport.

1. Thirteen major versions with breaking changes on nearly every one — the changelog is a list of things that silently stopped working. Adopting this means you're signing up for upgrade pain. 2. The i18n integration leans on `@ladjs/i18n` which adds Google Translate magic under the hood; if you want straightforward static translation files, you'll be fighting the abstraction. 3. No built-in MJML or React Email support — if your design team is using either of those (increasingly common), this package is not in that world and you'd need a custom `render` function. 4. The `juiceResources.webResources.relativeTo` config bites almost everyone on first setup; the default points to a `build/` directory that doesn't exist in most projects, and the error message gives you nothing useful.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →