Rendered UI evidence

Runtime layout checks for rendered UIs.

OverflowLint turns live DOM geometry and browser hit testing into structured, actionable findings for developers, Playwright, and coding agents.

{ "rule": "interactive-covered", "rule_level": "essential", "severity": "error", "confidence": "high", "selector": "button.sync", "diagnosis": { "causes": ["pointer-interception"], "suggestions": ["adjust-stacking"] } }

Explore the failure. Develop against evidence. Verify the same rendered state.

Explore

Run the panel on an ordinary page. Start with root-cause groups and inspect precise elements.

Develop

Use rule IDs, selectors, rectangles, typed evidence, likely causes, and preview-ready fix candidates to make a targeted fix.

Verify

Inject the panel-free core in Playwright and enforce policy across Chromium, Firefox, and WebKit.

Useful before you annotate anything.

Document overflow, masked clipping, truncated text, covered native controls, flex/grid escapes, content overlap, and unusable interactive targets come from generic browser signals. Broad new heuristics are clearly labeled experimental. Optional contracts express product intent only where geometry cannot.

Render → scan → fix → rerun.

Ordinary scans distinguish observed and masked failures. Explicit text stress safely probes expanded, unbroken, URL, numeric, emoji, CJK, and mixed-script copy, then restores the page.

Know what it cannot prove.

A clean scan does not prove that a design looks good. OverflowLint does not replace visual review, accessibility testing, product judgment, or representative cross-browser coverage. It does not traverse iframes or closed shadow roots.

Stable distribution stays release-bound.

Install from npm, use the stable userscript, or drag the stable bookmarklet. Stable browser artifacts follow npm latest through jsDelivr; the website can describe unreleased main-branch behavior.

Dev bookmarklet & userscript

Tracks latest main on every push (0.5.0-dev.1787058512+b3d2ef5). Separate install from stable — may break.