Node 18+ · TypeScript · ESM · MIT
Point it at a URL. Safi Studio Scanner crawls the site, audits every page it finds, and hands back one report you can render, gate a build on, or store.
Example output. Shape of a real report, not a real site.
The audit engine is a library, not a command. Import it, call it, and read the report object, or ask for the report already rendered.
npm install safi-studio-scannerimport { audit, render } from "safi-studio-scanner";
// The full object: score, per-category scores, every finding.
const report = await audit("https://example.com", { maxPages: 20 });
console.log(report.score); // 0-100
console.log(report.categories); // per-category scores and counts
// JSON for pipelines, CI, dashboards, and diffing one run against the next.
const json = render(report, "json");
// The same report as one self-contained HTML file.
const html = render(report, "html");Crawl
Same-origin pages from the start URL, capped by page count, concurrency, and depth. robots.txt and the sitemap are fetched once and shared.
Check
Every selected rule runs against every page, reading one context object: headers, parsed DOM, links, images, and rendered metrics if you asked for them.
Score
Findings are weighted by severity into a score per page and per category, then into one deliberately harsh overall number.
Thirteen categories need nothing but the HTML and the response headers. Two make extra requests. Accessibility and Core Web Vitals need a rendered page, from either a local Chromium or the PageSpeed Insights API.
Eleven phases, one shipped.
Phase 0 is what you can install today. The roadmap lists what is being built next and everything planned after it.