{
  "version": "2",
  "generatedAt": "2026-11-06T20:51:57.517Z",
  "listing": {
    "slug": "harlan-zw--unlighthouse",
    "name": "Unlighthouse",
    "tagline": "Scan a whole site with Google Lighthouse from a CLI, with CI budgets and static reports.",
    "shortTagline": "Site-wide Lighthouse scans",
    "description": "Unlighthouse finds the pages of a site from robots.txt, the sitemap or a crawler, runs Lighthouse on each in parallel Chrome instances, and reports scores. The unlighthouse-ci binary exits with a status code against score budgets and writes JSON, CSV or static HTML reports. The npm package ships a SKILL.md for agents, and the v1 beta adds an MCP server.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "content-publishing",
    "alternativeTo": [],
    "shape": "internal-tool",
    "formFactor": "cli",
    "executionModel": "deterministic",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "TypeScript"
      ],
      "frameworks": [
        "Lighthouse",
        "Puppeteer"
      ],
      "packageManager": "pnpm",
      "database": [],
      "hostingTarget": [
        "npm"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/harlan-zw/unlighthouse",
        "owner": "harlan-zw",
        "name": "unlighthouse",
        "license": "MIT",
        "stars": 4933,
        "lastCommit": "2026-10-23"
      }
    ],
    "interface": {
      "kind": "cli",
      "url": "https://unlighthouse.dev/integrations/cli",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Scan every page of a site",
        "reachable": true,
        "evidence": "unlighthouse-ci --site <url> (CI docs)"
      },
      {
        "job": "Discover pages from robots.txt, sitemap or crawl",
        "reachable": true,
        "evidence": "Automatic; flags --sitemaps, --urls, --include-urls, --exclude-urls (CLI docs)"
      },
      {
        "job": "Fail a build when scores drop under a budget",
        "reachable": true,
        "evidence": "unlighthouse-ci --budget 80; ci.budget in config; exit code 1 on failure"
      },
      {
        "job": "Write static HTML reports",
        "reachable": true,
        "evidence": "unlighthouse-ci --build-static writes to .unlighthouse/"
      },
      {
        "job": "Write JSON or CSV reports",
        "reachable": true,
        "evidence": "--reporter json, jsonExpanded, csv, csvExpanded"
      },
      {
        "job": "Scan sites behind a login",
        "reachable": true,
        "evidence": "--auth, --cookies, --extra-headers flags"
      },
      {
        "job": "Scan as mobile or desktop, with samples and throttling",
        "reachable": true,
        "evidence": "--mobile, --desktop, --samples, --throttle"
      },
      {
        "job": "Upload results to a Lighthouse CI server",
        "reachable": true,
        "evidence": "--reporter lighthouseServer with --lhci-host and --lhci-build-token"
      },
      {
        "job": "Browse results in the live dashboard",
        "reachable": false,
        "evidence": "The unlighthouse binary serves a browser dashboard on port 5678 and never exits; agents are told to use unlighthouse-ci instead"
      },
      {
        "job": "Reopen and compare saved scans",
        "reachable": false,
        "evidence": "Scan history is a v1 beta feature; the stable 0.19 CLI has no history command. The beta MCP tools history_list and compare_run cover it."
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/harlan-zw/unlighthouse"
          },
          {
            "kind": "installable",
            "url": "https://www.npmjs.com/package/unlighthouse",
            "command": "npx unlighthouse-ci --site https://example.com --budget 80"
          }
        ]
      }
    ],
    "skills": {
      "kind": "bundled",
      "paths": [
        "packages/unlighthouse/skills/unlighthouse/SKILL.md"
      ],
      "install": "npx skilld install harlan-zw/unlighthouse/unlighthouse",
      "note": "Tells an agent which binary to run, how URL discovery and budgets behave, and how to read exit codes. Also published at unlighthouse.dev/SKILL.md."
    },
    "customization": {
      "summary": "unlighthouse.config.ts (or .js, .mjs) sets the site, which paths to include or exclude, mobile or desktop, samples, throttling, auth, and per-category CI budgets for performance, accessibility, best-practices and seo. CLI flags override it.",
      "envVars": [],
      "configFiles": [
        "unlighthouse.config.ts"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 1
    },
    "useWhen": [
      "you want an agent to audit every page of a site for Lighthouse scores before launch",
      "you want CI to fail when performance or SEO scores drop"
    ],
    "accounts": [],
    "active": true,
    "lastActivity": "2026-10-23",
    "gotchas": [
      "Needs Node 22.18 or newer and a Chrome install (it downloads one if none is found)",
      "Default dynamic sampling scans at most 8 URLs per route group",
      "The Nuxt, Vite and Webpack integrations are deprecated; run the CLI",
      "Lighthouse scores vary between runs; use samples for CI gates",
      "The MCP server and scan history are in the v1 beta (npm install -g unlighthouse@beta), which needs Node 24.13.1 or newer"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README and docs: npx CLI, two binaries",
      "executionModel": "Lighthouse audits; no model",
      "operability": "packages/cli/src/createCli.ts defines the flags; unlighthouse.dev/integrations/cli and /ci docs; SKILL.md in repo",
      "effort": "unlighthouse.dev/guide/guides/config shows unlighthouse.config.ts with scanner and ci.budget keys",
      "editions": "MIT; homepage says free and open source, funded by sponsors; no pricing page",
      "active": "gh api: last commit 2026-10-23; release v0.19.1 2026-10-03",
      "skills": "README links skilld.dev/gh/harlan-zw/unlighthouse, which gives the install command; skilld is Harlan Wilton's package; package.json files includes skills",
      "vertical": "No vertical covers site auditing. Two other SEO audit Listings sit in content-publishing (seo-skills--seo-audit-skill, nowork-studio--notfair-plugin)."
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.9,
      "effort": 0.75,
      "reach": 0.9,
      "editions": 0.9,
      "provenance": 0.2
    },
    "openQuestions": [],
    "sources": [
      {
        "url": "https://unlighthouse.dev",
        "foundBy": "sourcing:content-publishing:vendor"
      },
      {
        "url": "https://github.com/harlan-zw/unlighthouse",
        "foundBy": "analysis"
      },
      {
        "url": "https://unlighthouse.dev/v1/integrations/mcp",
        "foundBy": "verification"
      }
    ],
    "published": true,
    "lastCheckedAt": "2026-11-06",
    "research": {
      "stage": "verified",
      "verdict": "approve",
      "reason": "Gates pass: MIT, 4,933 stars, fix commits to 2026-10-23, release v0.19.1, 395K monthly downloads on the homepage. Every CLI flag in Reach exists in packages/cli/src. config-only holds because unlighthouse.config.ts sets scan scope and budgets. An official MCP server exists in the v1 beta, recorded as mcpServer.",
      "disputed": []
    },
    "mcpServer": {
      "url": "https://unlighthouse.dev/v1/integrations/mcp",
      "evidence": "Builder docs for the unlighthouse-mcp binary, in the unlighthouse@beta package (1.0.0-beta.1 on npm): twenty tools including scan_start, scan_summary and pack_run. Beta only; the stable 0.19 package has no MCP server."
    },
    "url": "apps/harlan-zw--unlighthouse.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/harlan-zw--unlighthouse.json"
  }
}
