← All plugins

Plugin II — HTML Email Auditing

Email Absolution

No sinful template shall pass.

HTML email development under the watchful eye of the Witchfinder. Twelve doctrines. Three skills. From full structural audits to righteous generation from first principles — client compatibility, inline CSS, table structure, and responsive design all held to account.

/email-absolution:elder /email-absolution:visitation /email-absolution:scribe

The skills

/email-absolution:elder

Elder

Full Audit — Your First Port of Call

Elder is the full audit skill — config setup, template auditing, and routing to Visitation or Scribe. Start here. Elder will offer to create .email-absolution/config.yml via a setup questionnaire on first invocation. From there it audits templates against all twelve doctrines and produces a structured verdict.

Invocation modes

/email-absolution:elder Changed files — diff against base branch (default)
/email-absolution:elder full All templates in configured email_paths
/email-absolution:elder <file> Audit a single named template
/email-absolution:elder doc Changed files + save structured markdown audit report
/email-absolution:elder <file> doc Single template + save markdown audit report
/email-absolution:elder interactive All templates — step through findings and fix one by one
/email-absolution:elder <doctrine> Changed files, single doctrine only (e.g. rendering)
/email-absolution:visitation

Visitation

Formal Inspection

Formal inspection of an existing email template against all doctrines. Use Visitation for a focused, targeted audit when you already know which template needs examination. Spot-checks — quick, precise, unsparing.

Invocation modes

/email-absolution:visitation Audit all email templates changed in this branch vs base
/email-absolution:visitation <file> Spot-check a single named template
/email-absolution:visitation pr <number> Audit changed templates in a specific PR
/email-absolution:visitation interactive Step through findings — fix, explain, skip, or note as exception
/email-absolution:scribe

Scribe

Righteous Generation

Generates new email templates correct by construction. Brief the Scribe, and it builds a template that adheres to all twelve doctrines from the ground up — no post-hoc remediation required. The righteous path from the outset.

Invocation modes

/email-absolution:scribe Interactive — Scribe asks for email type, ESP, variables, and brand constraints before generating
/email-absolution:scribe <brief> Direct — pass the brief inline. Include email type, stack, and available variables for immediate generation

Doctrine catalog

Twelve doctrines. Every rule exposed.

Core doctrines load for all skills. Tooling doctrines load based on your stack.templating config. Expand any doctrine to see its full rule set — purpose, rules, and detection patterns.

12 doctrines 247 rules

Core — loaded by all skills

RENDER

Rendering

Guards against HTML and CSS patterns that cause broken or invisible content in major email clients. The primary adversary is Outlook 2007–2019 (Word renderer), …

25 rules
Purpose
Guards against HTML and CSS patterns that cause broken or invisible content in major email clients. The primary adversary is Outlook 2007–2019 (Word renderer), which holds 5–10% global market share and 30–50%+ in B2B enterprise. Secondary adversaries are Gmail's inline-style stripping bug and New Outlook's forced dark mode inversion. Every rule here has a client victim and a production consequence.
Rule Catalog (25 rules)
HTML

HTML & CSS Practices

Guards against HTML structure and CSS usage patterns that produce broken, unstyled, or mis-spaced output in email clients. Where the rendering doctrine covers *…

23 rules
Purpose
Guards against HTML structure and CSS usage patterns that produce broken, unstyled, or mis-spaced output in email clients. Where the rendering doctrine covers *what* breaks and *why*, this doctrine covers *how to write* HTML and CSS so it does not break. Rules here are about authoring patterns — structure, selectors, inheritance, and the specific properties that behave unexpectedly in the email environment.
Rule Catalog (23 rules)
ACCESS

Accessibility

Guards against HTML patterns that exclude users with visual, motor, or cognitive disabilities from transactional email content. The European Accessibility Act (…

20 rules
Purpose
Guards against HTML patterns that exclude users with visual, motor, or cognitive disabilities from transactional email content. The European Accessibility Act (EAA) enforcement began in June 2025, making accessibility compliance a legal requirement in EU markets. WCAG 2.1 AA is the target standard. Accessibility rules here apply regardless of client — an inaccessible template fails users across all rendering environments.
Rule Catalog (20 rules)
DELIV

Deliverability

Guards against sending infrastructure failures, authentication gaps, and content patterns that route transactional email to spam or cause outright rejection. Si…

20 rules
Purpose
Guards against sending infrastructure failures, authentication gaps, and content patterns that route transactional email to spam or cause outright rejection. Since February 2024, Google and Yahoo enforce mandatory SPF+DKIM+DMARC and one-click unsubscribe requirements for bulk senders — these are no longer best-practice recommendations. A technically correct HTML template that fails deliverability checks never reaches the inbox.
Rule Catalog (20 rules)
GOTCHA

Gotchas & Edge Cases

Documents the non-obvious traps, client-specific regressions, and silent failure modes that survive rendering and deliverability tests but bite in production. T…

30 rules
Purpose
Documents the non-obvious traps, client-specific regressions, and silent failure modes that survive rendering and deliverability tests but bite in production. These rules are drawn from verified issue reports in hteumeuleu/email-bugs, caniemail.com feature data, and live client testing. Many of these issues are invisible in screenshot testing — they manifest only in real send-and-receive environments.
Rule Catalog (30 rules)
UX

Content & UX

Guards against content, copy, and structural UX patterns that undermine the effectiveness, trustworthiness, or legibility of transactional and marketing emails.…

21 rules
Purpose
Guards against content, copy, and structural UX patterns that undermine the effectiveness, trustworthiness, or legibility of transactional and marketing emails. Rendering correctness means nothing if the copy does not communicate clearly or the CTA is not actionable. Rules here apply to template structure, copy patterns, and send-time configuration — not to infrastructure.
Rule Catalog (21 rules)

Tooling — loaded by stack config

TOOL

Tooling Overview

Selection guidance and cross-tool rules for email templating pipelines. This doctrine is the tooling overview — it covers when to use each engine, pipeline arch…

15 rules
Purpose
Selection guidance and cross-tool rules for email templating pipelines. This doctrine is the tooling overview — it covers when to use each engine, pipeline architecture patterns, and rules that apply regardless of which templating tool is selected. The per-language doctrines (mjml.md, handlebars.md, liquid.md, react-email.md, maizzle.md) cover tool-specific rules. Loading note: Elder and visitation load this overview alongside the per-language doctrine. Scribe loads only the per-language doctrine — it does not load this file.
Rule Catalog (15 rules)
MJML

MJML

Rules and gotchas for engineers building HTML email templates with MJML. MJML v4.18.0 is the current stable release (March 2024). MJML v5.0.0-beta.1 was release…

21 rules
Purpose
Rules and gotchas for engineers building HTML email templates with MJML. MJML v4.18.0 is the current stable release (March 2024). MJML v5.0.0-beta.1 was released March 2025 and is under active development — do not use in production without thorough visual regression testing. MJML compiles .mjml XML source to cross-client HTML with inlined CSS, nested tables, and MSO conditional comments for Outlook. It does not handle dynamic data — a separate templating layer is always required.
Rule Catalog (21 rules)
HBS

Handlebars

Rules and gotchas for engineers building transactional email templates with Handlebars.js, or the Handlebars subsets used by SendGrid Dynamic Templates and Mand…

17 rules
Purpose
Rules and gotchas for engineers building transactional email templates with Handlebars.js, or the Handlebars subsets used by SendGrid Dynamic Templates and Mandrill. Covers data safety, helper patterns, and the critical differences between full Handlebars.js and the restricted subsets exposed by ESPs.
Rule Catalog (17 rules)
LIQ

Liquid

Rules and gotchas for engineers building transactional email templates with Liquid — Shopify's open-source templating language (Ruby gem: `liquid`; JavaScript p…

19 rules
Purpose
Rules and gotchas for engineers building transactional email templates with Liquid — Shopify's open-source templating language (Ruby gem: liquid; JavaScript port: liquidjs). Covers Klaviyo's Liquid implementation, self-hosted LiquidJS pipelines, and the safety properties that make Liquid well-suited to email rendering. Liquid has no filesystem access and cannot execute arbitrary code — it is the safest option for rendering user-influenced templates.
Rule Catalog (19 rules)
REMAIL

React Email

Rules and gotchas for engineers building email templates with React Email — the Resend-maintained React/TypeScript email component library (`react-email@5.2.10`…

18 rules
Purpose
Rules and gotchas for engineers building email templates with React Email — the Resend-maintained React/TypeScript email component library (react-email@5.2.10, March 2026). React Email renders React components to HTML strings server-side. It does not abstract cross-client layout like MJML — engineers remain responsible for email-safe CSS. Its primary advantage over text-based templating is TypeScript compile-time checking of email data shapes.
Rule Catalog (18 rules)
MZL

Maizzle

Rules and gotchas for engineers building email templates with Maizzle — the Tailwind CSS email framework (stable: v5.5.0, February 2026). Maizzle applies the Ta…

18 rules
Purpose
Rules and gotchas for engineers building email templates with Maizzle — the Tailwind CSS email framework (stable: v5.5.0, February 2026). Maizzle applies the Tailwind CSS utility workflow to plain HTML email templates, compiling and inlining CSS at build time. Unlike MJML, it does not abstract table-based layout — developers write table HTML directly or use Maizzle's starter templates. Suited to teams already fluent in Tailwind who prefer full HTML control without learning a component DSL.
Rule Catalog (18 rules)

Configuration

Project config.
Per-template overrides.

On first invocation, Elder creates .email-absolution/config.yml via a questionnaire. Individual templates may have their own email.config.yml — per-email configs inherit from the project config and only need to specify overrides.

Set strictness per category: strict, pragmatic, or aspirational.

# .email-absolution/config.yml
stack:
  esp: sendgrid
  templating: handlebars

clients: all

brand:
  primary_colour: "#0066cc"
  max_width: 600

strictness:
  rendering: strict
  html-css: strict
  accessibility: pragmatic
  deliverability: strict
  gotchas: strict
  content-ux: pragmatic
  tooling: aspirational

email_defaults:
  type: transactional
  unsubscribe: false

Client coverage

Outlook. Gmail. Apple Mail.

The rendering doctrine covers the full client support matrix. Nothing ships without passing the Witchfinder's examination of how it renders everywhere that matters.

Outlook 2016–2021 MSO workarounds, VML fallbacks
Outlook on the web Modern rendering, flexbox support
Gmail (web + app) CSS stripping, style block behaviour
Apple Mail Dark mode, CSS variables
iOS Mail Responsive, viewport handling
Android Gmail Webkit rendering quirks