Pre-stable 0.9.0

Lint HTML email for client compatibility

Deterministic static analysis for HTML email. Catch unsupported CSS and blocked elements before you send - offline, in CI, and right here in your browser. Your HTML never leaves your machine.

Why EmailLint

Deterministic
No AI. The same input always yields the same output.
No network
Runs fully offline - no test sends, no rendering services.
Runs locally
Your HTML is analyzed in the browser. It never leaves your machine.
CI friendly
Exit code 1 on any error-severity issue. JSON output for automation.
Typed API
Fully typed TypeScript public API. Score, issues, and compat metadata.
Minimal deps
Only parse5 and postcss. Nothing else to audit.

Try it in your browser

Email HTML
Results
35/ 100

14 issues

  • IMG_MISSING_ALT

    <img> is missing an alt attribute.

    line 22:3 - Add alt="" for decorative images or a short text description.

  • EMPTY_LINK

    <a> has no usable href.

    line 24:3 - Add a valid href to the link.

  • EMPTY_LINK

    <a> has no usable href.

    line 25:3 - Add a valid href to the link.

  • DUPLICATE_ID

    Duplicate id "header" found 2 times.

    line 19:9 - Make each id unique.

  • BASE64_IMAGE

    <img> uses a base64 data: URI.

    line 23:3 - Host the image and reference it by URL where possible.

  • CSS_FLEXBOX

    display:flex is not reliably supported in email clients (especially Outlook).

    line 8:85 - Use table-based layout for email.

  • CSS_BORDER_RADIUS

    border-radius is not supported by classic Outlook (renders square).

    line 8:12 - Provide a fallback or accept square corners in Outlook.

  • CSS_BORDER_RADIUS

    border-radius is not supported by classic Outlook (renders square).

    line 26:3 - Provide a fallback or accept square corners in Outlook.

  • CSS_BACKGROUND_IMAGE

    CSS background-image has unreliable support in email clients.

    line 8:32 - Use an <img> or VML fallback for Outlook.

  • CSS_ABSOLUTE_POSITION

    position:absolute is not reliably supported in email clients.

    line 10:12 - Use a table-based or inline layout.

  • CSS_EXTERNAL_FONT

    External font (@font-face) has limited email client support.

    line 7:5 - Use a web-safe font stack for email.

  • CSS_GRID

    display: grid is not reliably supported across email clients.

    line 9:13

  • SCRIPT_ELEMENT

    <script> is not supported in email.

    line 12:3

  • HTML_MISSING_LANG

    <html> is missing a lang attribute.

    line 2:1

Runs entirely in your browser - your HTML is never sent anywhere.

How it works

  1. 1. Paste

    Drop your email HTML into the editor, or load a sample.

  2. 2. Analyze

    EmailLint scores it 0–100 and lists every compatibility issue with line numbers.

  3. 3. Fix

    Each issue tells you why it breaks and how to fix it, plus per-client support.

Score starts at 100: each error subtracts 15, each warning 5, info 0. A single rule is capped at −15 so one prolific issue can't floor the score alone. Minimum 0.

Rules - 39

EmailLint checks email compatibility, not HTML correctness. Click any rule for the rationale and a per-client support matrix.

Invalid - 6

Compatibility - 23

Accessibility - 5

Performance - 2

Quality - 3

Install & use

Pre-stable 0.9.0 - not yet on npm. Clone, build, and lint from the CLI. Exit code is 1 if any error-severity issue is found, so it gates CI.

git clone https://github.com/alurulabs/emaillint
cd emaillint
npm install
npm run build      # tsc -> packages/core/dist
# lint in CI:
node packages/cli/dist/index.js emails/**/*.html