Runtime scanning
Console errors, uncaught exceptions, failed and HTTP-error network requests, a screenshot, and navigation timing — on every scan, no flags required.
npx frontend-qa scan --url http://localhost:5173Console errors, failed API calls, missing alt text, oversized bundles, and accessibility regressions routinely ship to production because nothing routinely looks. Manually opening dev tools on every route doesn’t scale; hosted synthetic-monitoring services are built for production uptime, not a local dev loop, and mean sending your app’s traffic to someone else’s cloud.
frontend-qa drives a real Chromium instance with Playwright against a URL
you point it at — your local dev server or a deployed environment — and
records what actually happens: console errors, network failures, a
screenshot, navigation timing, and (opt-in) accessibility, performance, and
visual-regression checks. Everything is normalized into one JSON report, and
every issue is tagged with how it was found — Measured, Observed,
StaticAnalysis, Heuristic, Inferred, or Unavailable — so you never
mistake a guess for a fact. It runs entirely on your machine; nothing is
uploaded, and there is no LLM anywhere in the scan path.
frontend-qa scan — against a URL, or nothing
at all if a dev server for a detected Vite/Next project is already running
(or launchable).--a11y), performance (--perf), and visual
diffing (--visual) are opt-in.Issue[]. Every collector’s raw output maps to
the same Issue shape — severity, evidence type, source location where
available..local/frontend-qa/runs/<runId>/report.json. The CLI exits non-zero if
anything at or above your --fail-on severity was found.Read the full breakdown in How It Works.
Runtime scanning
Console errors, uncaught exceptions, failed and HTTP-error network requests, a screenshot, and navigation timing — on every scan, no flags required.
Opt-in QA engines
Accessibility checks via axe-core (--a11y), a Lighthouse performance
audit (--perf), and pixel-diff visual regression against a stored
baseline (--visual).
Static analysis
frontend-qa static parses your source with ts-morph — missing alt
text, unsafe dangerouslySetInnerHTML, dead exports, unresolved
imports, TODO/FIXME — no browser required.
Bundle analysis
frontend-qa bundle walks a build output directory and flags
oversized JS/CSS chunks — no browser required.
MCP server
frontend-qa-mcp exposes scan, report, issues, console errors, and
screenshots as five stdio tools an AI coding assistant can call
directly.
Redacted by construction
Authorization/Cookie/API-key headers are redacted at the point of capture, before anything reaches disk — not as a later filtering pass.
# in the project you want to scannpx frontend-qa scan --url http://localhost:5173[frontend-qa] project: react (vite=true)[frontend-qa] scanning http://localhost:5173 routes=["/"]
[frontend-qa] report: .local/frontend-qa/runs/01J.../report.json[frontend-qa] issues: 4 (critical=1 high=2 medium=1 low=0 info=0) - [critical] browser.console: Uncaught exception on click - [high] browser.console: console.error on mount - [high] browser.network: GET /api/data → 500 - [medium] browser.network: img src 404Full walkthrough, including auto-detecting a dev server: Quick Start.
CLI (frontend-qa) ──┐MCP server ──────────┼──▶ core (config, project detection, normalizer, report writer) │ └─▶ shared (Issue/Report schemas, redaction) └──▶ browser (Playwright collectors: console, network, screenshot, timing, a11y, perf, visual)Five packages, one dependency direction — shared → core → browser → {cli, mcp-server} — so a new collector never requires touching the orchestrator. Full breakdown: Architecture.