PWA Installability Checker
Fetches a page you choose, finds its <link rel="manifest">, fetches and
parses that Web App Manifest, and fetches every icon it lists -- then classifies the result
against Chrome's installability criteria: a manifest that parses, a name, an
installable display mode, a secure origin, and a reachable icon of at least
192x192. These are the same checks Lighthouse's installable-manifest audit runs,
with no Chrome or Puppeteer required.
1. Run the CLI against your page
Node.js 18+, no dependencies to install:
node check.mjs https://example.com/ --json
Get check.mjs, probe.mjs, and analyze.mjs from the repo — plain Node, nothing to install. It only ever talks to the URL you pass, the manifest that page links to, and the icons that manifest lists; nothing goes through this site.
2. Paste the JSON output here
Paste the JSON from step 1 and click Check.
Report
Common questions
What does "installable" actually mean?
Chrome (and other browsers that support the Web App Manifest spec) will only offer to install a page as an app -- an icon on the home screen or app list, opening in its own window -- when the page's manifest clears a specific, documented checklist: a manifest exists and parses, it names the app, it declares an installable display mode, the page is served securely, and it lists a large-enough icon that actually loads. This tool runs exactly that checklist.
Why does this need a CLI instead of just checking a URL I type into the page?
This page is hosted on its own domain, and asking it to fetch an arbitrary third-party page and manifest from inside your browser is a cross-origin request -- one that fails unless that other site's server opts in with an Access-Control-Allow-Origin header, which almost none do for their HTML page or manifest.json. Only a non-browser HTTP client, like the CLI here (or curl, or Lighthouse's own Chrome instance), can fetch those directly. Run the CLI, then paste its JSON output here for a rendered report.
Is this the same as running Lighthouse?
It checks the same criteria as Lighthouse's installable-manifest audit -- manifest present, name, display mode, icons, secure origin -- derived from the same published Chrome documentation. It is not a full Lighthouse run: Lighthouse also scores performance, accessibility, SEO, and several other PWA checks (like an offline-capable service worker) that this tool does not attempt. Use this when you want the manifest-installability answer without installing Chrome or Puppeteer.
Does a clean report mean my app installs correctly?
It means the manifest and icons this tool could reach clear Chrome's documented installability criteria. It does not run a service worker, does not test the actual install prompt in a real browser, and cannot see a manifest field browsers might add criteria around in the future. Treat a clean report as evidence about these specific, named checks -- not a guarantee every browser will prompt to install.
Why does a missing "display" field count as a failure?
The Web App Manifest spec's default for a missing "display" is "browser" -- and Chrome's installability criteria explicitly exclude "browser" from the modes it will install. So an absent field is not neutral here; it resolves to the one value that fails the check, the same way this tool (and Lighthouse) reads it.