A Web App Manifest is the JSON file that turns a website into an installable progressive web app, defining its name, icons, colours, and how it launches. This builder produces a valid manifest.json plus the exact HTML <link> tag and the icon sizes browsers require for installability.
How it works
The manifest is a flat JSON object the browser reads when you link it from your page’s <head>:
- Identity fields —
name,short_name,description— appear in the install dialog and on the splash screen. - Appearance fields —
theme_color,background_color,display,orientation— control the launched window and splash. - Launch fields —
start_url,scope— define where the app opens and which URLs it controls. - The
iconsarray lists images withsrc,sizes,type, and optionalpurpose: "maskable"; a 192px and a 512px icon are the minimum for an install prompt.
A minimal installable manifest
After filling the builder, the generated output looks like this:
{
"name": "My Application",
"short_name": "MyApp",
"description": "A short description of what this app does.",
"start_url": "/?source=pwa",
"scope": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#1a73e8",
"icons": [
{ "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png",
"purpose": "maskable" }
]
}
Link it from your HTML <head>:
<link rel="manifest" href="/manifest.json">
The three installability requirements
A browser shows an install prompt only when all three conditions are true:
- HTTPS — the page must be served over a secure origin (or localhost for development).
- Service worker registered — at least a minimal
fetchhandler must be active. - Valid manifest — must have
nameorshort_name, astart_url, adisplayofstandaloneorfullscreen, and icons at 192px and 512px.
This builder satisfies requirement 3; you still need to register a service worker separately.
Display modes explained
| Mode | What the user sees |
|---|---|
standalone | Launched in its own window, browser chrome hidden — feels like a native app |
fullscreen | Full screen with status bar hidden — common for games |
minimal-ui | Browser chrome reduced to minimal back/reload buttons |
browser | Opens in a normal browser tab — effectively no PWA window |
Most productivity and utility apps use standalone. Games often use fullscreen.
Maskable icons
A maskable icon stores its logo centred in a safe zone (the inner 80% of the image), with coloured padding around it. Android adaptive launchers crop icons into circles, squircles, or other shapes depending on the device. If you only provide a standard icon, the launcher crops a rectangle out of it, often clipping corners. A maskable icon fills the safe zone so the shape crop always looks intentional.
Tips and common mistakes
- Set
start_urlto/?source=pwaor a similar attributed URL so you can see PWA launches separately in your analytics. - Keep
short_nameto 12 characters or fewer — longer names are truncated under the home-screen icon on small screens. - Provide both a standard and a
maskableversion of the 512px icon so you cover all Android launcher shapes without relying on a single image for both purposes. - Test the manifest in Chrome DevTools → Application → Manifest to see exactly what the browser parsed.