English
Compatibility rule catalog
This catalog explains every compat.* rule, its trigger, exclusions, severity and evidence. Data-backed rules use the bundled caniemail snapshot dated 2026-09-16. A client verdict is its last-listed test, with the noted usage narrowed where specified.
compat.css-display-flex
Default severity: warning when any client is unsupported; info when only partial.
What fires: display: flex or inline-flex in pass-through CSS.
What does not: Other display values and SDK column layout.
Narrowing: Note 2 makes inline-flex unsupported where that variant is excluded.
Source: caniemail css-display-flex.
compat.css-display-grid
Default severity: warning when any client is unsupported; info when only partial.
What fires: display: grid or inline-grid in pass-through CSS.
What does not: Other display values and SDK column layout.
Narrowing: No note narrowing.
Source: caniemail css-display-grid.
compat.css-position
Default severity: warning when any client is unsupported; info when only partial.
What fires: position: absolute, fixed or sticky in pass-through CSS.
What does not: position: relative.
Narrowing: Notes 1–4 name supported values; any detected value outside a cell’s list is unsupported.
Source: caniemail css-position.
compat.css-variables
Default severity: warning when any client is unsupported; info when only partial.
What fires: A var(--…) reference in a CSS value.
What does not: Declarations without a variable reference.
Narrowing: No note narrowing.
Source: caniemail css-variables.
compat.css-at-import
Default severity: warning when any client is unsupported; info when only partial.
What fires: An @import rule in a style element or stylesheet.
What does not: Text inside CSS comments.
Narrowing: No note narrowing.
Source: caniemail css-at-import.
compat.html-link
Default severity: warning when any client is unsupported; info when only partial.
What fires: A <link> whose rel contains stylesheet.
What does not: Other rel values.
Narrowing: No note narrowing.
Source: caniemail html-link.
compat.html-style
Default severity: warning when any client is unsupported; info when only partial.
What fires: A <style> element in pass-through HTML, which lands in the email body.
What does not: Styles generated in MJML’s head.
Narrowing: Note 1 excludes <style> in <body> even when the client supports it in the head.
Source: caniemail html-style.
compat.html-svg
Default severity: warning when any client is unsupported; info when only partial.
What fires: An inline <svg> element.
What does not: A linked SVG image URL; this rule reads elements, not linked image formats.
Narrowing: No note narrowing.
Source: caniemail html-svg.
compat.html-form
Default severity: warning when any client is unsupported; info when only partial.
What fires: A <form>, <input>, <select> or <textarea> element.
What does not: A link to a web form.
Narrowing: Gmail web supports forms; Outlook Windows does not. The rule follows the client cells rather than a blanket claim.
Source: caniemail html-form.
compat.html-object
Default severity: warning when any client is unsupported; info when only partial.
What fires: An <object> element.
What does not: A linked image.
Narrowing: No note narrowing.
Source: caniemail html-object.
compat.html-video
Default severity: warning when any client is unsupported; info when only partial.
What fires: An embedded <video> element.
What does not: The SDK Video block, which emits a linked thumbnail.
Narrowing: No note narrowing.
Source: caniemail html-video.
compat.html-audio
Default severity: warning when any client is unsupported; info when only partial.
What fires: An embedded <audio> element.
What does not: A link to an audio file.
Narrowing: No note narrowing.
Source: caniemail html-audio.
compat.css-width
Default severity: warning when any client is unsupported; info when only partial.
What fires: Inline width on div, p, span or body, or on img without a width attribute.
What does not: A table cell width or an image with a width attribute.
Narrowing: Note 1 excludes these elements in affected clients.
Source: caniemail css-width.
compat.css-max-width
Default severity: warning when any client is unsupported; info when only partial.
What fires: Inline max-width on an element other than table.
What does not: max-width on a table.
Narrowing: Note 1 permits only tables in affected clients.
Source: caniemail css-max-width.
compat.css-float
Default severity: warning when any client is unsupported; info when only partial.
What fires: A float declaration in an inline style or stylesheet.
What does not: Layout produced from SDK sections and columns.
Narrowing: No note narrowing.
Source: caniemail css-float.
compat.css-background-image
Default severity: warning when any client is unsupported; info when only partial.
What fires: A CSS background URL without background-color, a color in the background shorthand, or bgcolor.
What does not: A background with one of those fallback colors.
Narrowing: No note narrowing.
Source: caniemail css-background-image.
compat.image-base64
Default severity: warning when any client is unsupported; info when only partial.
What fires: A data:image/ URL in a pass-through image, background attribute, CSS URL or supported block URL field.
What does not: Hosted image URLs and non-image data URLs. The excerpt contains only the media type.
Narrowing: Note 1 excludes GIF; note 3 supports only PNG.
Source: caniemail image-base64.
compat.html-script
Default severity: warning.
What fires: A <script> element. Email clients do not run its JavaScript.
Evidence: Hand-written warning; caniemail has no test for this element.
compat.html-iframe
Default severity: warning.
What fires: An <iframe> element whose embedded content is blocked in most email clients.
Evidence: Hand-written warning; caniemail has no test for this element.
compat.gmail-clipping
Default severity: warning.
What fires: Compiled HTML larger than thresholds.maxHtmlBytes (default 92_160 UTF-8 bytes); equality passes.
Where it runs: Never in lintTemplate or the editor's live Issues list. Three surfaces measure it: lintCompiledHtml(html) on HTML you compile; templatical validate --html, which needs the optional mjml peer (exit 3 without it); and the editor's Email size check, shown only when the render provider implements toHtml or compileMjml, and not in Cloud mode.
Evidence: Only lintCompiledHtml checks this; template JSON and pass-through scans do not estimate compiled size. Google does not document the approximately 102 KB limit; it comes from community tests, which also show clipping below it after a sending service adds markup.