What you need
A site served over HTTPS, a square logo to make icons from and access to the page head.
Example
This manifest passes every installability check in the generator:
{
"name": "Example App",
"short_name": "Example",
"description": "A small example application",
"start_url": "/",
"display": "standalone",
"theme_color": "#0d6efd",
"background_color": "#ffffff",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icons/icon-512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "/icons/maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
And the tags that go in the page head:
<link rel="manifest" href="https://example.com/manifest.webmanifest">
<meta name="theme-color" content="#0d6efd">
<link rel="apple-touch-icon" href="https://example.com/icons/icon-192.png">
Common pitfalls
- Relative icon paths resolve against the manifest URL, not the page.
- The
start_urlshould load without a login redirect, or the installed app opens to a blank screen. - Use
display: standalonefor an app-like window;browserkeeps the normal browser UI and is not installable on its own. - iOS uses
apple-touch-iconand its own add-to-home-screen flow, so keep that link too.