Android

A manifest.json you can download. Not a PWA audit.

Fill name, start_url, display, icon paths, and optional shortcuts. We print JSON in this tab. We do not fetch those icon files, we do not register a service worker, and Chrome’s install criteria still run on your origin.

Shown under the icon when space is tight (home screen, task switcher).
Stable app identity; useful when start_url changes.
Comma-separated (e.g. for stores and catalogs that read this field).

Icons

Provide at least 192×192 and 512×512 PNGs for install prompts on Chromium-based browsers. Add a maskable icon so adaptive icons look correct on Android.

Shortcuts (optional)

Quick actions shown on long-press / right-click of the installed app icon (where supported).

{}

When to use this — and when not to

Use it to scaffold a manifest.json: name, short_name, start_url, scope, display, theme colors, icon path rows, optional shortcuts. Then host the file and link it from HTML. Chrome DevTools → Application → Manifest is still the install check.

Do not treat this page as a PWA audit. We never fetch your src paths, we do not register a service worker, we do not confirm HTTPS, and we do not wrap the site as a Trusted Web Activity for Play. Icon purpose: maskable is a JSON flag — it does not pad the PNG.

What the generator actually emits

Required: a non-empty name. Everything else is omitted if blank. Icon rows become { src, sizes, type, purpose } only when src is set; purpose is left off when it is any. Shortcuts need both name and URL. orientation: any is omitted so the JSON stays quiet. Copy or download — strings stay in the tab.

After you host it:

<link rel="manifest" href="/manifest.json" />

Prefer application/manifest+json (or application/json). An HTML 404 at that URL fails installability with no useful UI.

Worked example

Name My Tasks, short_name Tasks, start_url and scope /, display standalone, two icons:

{
  "name": "My Tasks",
  "short_name": "Tasks",
  "start_url": "/",
  "scope": "/",
  "display": "standalone",
  "icons": [
    { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
  ]
}

Export the 192/512 bitmaps from the icon generator, then add a real maskable asset (safe-zone padding) — see the safe-zone note. Offline still needs a service worker on HTTPS (or localhost).

Mistakes people make

  • Icon paths 404. The JSON is valid; Chrome still refuses install.
  • start_url outside scope — launch opens a normal tab.
  • A 12-character short_name that still truncates under a circle mask. Test on a launcher, not only this preview.
  • Shipping JSON and calling the site a PWA with no worker and no HTTPS.

Related

App icon sizes · Service worker generator · Maskable / adaptive safe zone

Frequently asked questions

Does this make the site installable?

No. It writes JSON. Chrome still requires a valid manifest URL, icons that load, a service worker, and a secure origin.

Are icon files uploaded or checked?

No. Paths are strings. If the file is missing on your host, this page will not tell you.

name vs short_name?

name is the install dialog / splash title. short_name is the cramped home-screen label. Omit it and the browser truncates name.

Is this a Trusted Web Activity?

No. TWA / Play wrapping is a separate Android project. This file is for the web origin only.