What the manifest actually controls
A web app manifest is a small JSON file that tells Android — and Chrome, and any WebView that reads it — how your site should behave when it is treated as an app rather than a page. It is the difference between a bookmark and something that looks installed.
- The home-screen name and icon, from
short_nameandicons. - Whether browser UI is visible, from
display.standaloneis what makes a site stop looking like a web page. - The status bar colour, from
theme_color— the single highest-impact line in the file. - The launch splash, drawn by Android from
background_color, the icon and the name. - Which pages count as "inside" the app, from
scope.
display: the field people get wrong
| Value | What the user sees | Good for |
|---|---|---|
standalone | Status bar, no address bar or tabs | Almost everything |
fullscreen | No system UI at all | Games, video, kiosks |
minimal-ui | A minimal back/reload strip | Content sites where navigation matters |
browser | A normal browser tab | Effectively opting out |
fullscreen looks tempting and is usually a mistake: hiding the clock and battery on a shopping or content app annoys people, and on gesture-navigation devices it removes affordances users rely on.
Scope, and how to trap your users by accident
scope defines which URLs stay inside the app. Set it to /shop/ and a link to /blog/ opens in the browser instead — sometimes exactly what you want, often a surprise. Set it too broadly and external links open inside your chrome-less app window, leaving users on a third-party page with no address bar and no obvious way back. Most sites should set scope to / and control external links in code instead.
Maskable icons
Android masks home-screen icons to the launcher's shape. A normal icon gets letterboxed inside a white circle — the "sticker" look that immediately marks an app as a converted website. An icon declared with "purpose": "maskable" is drawn edge to edge instead, with the important artwork kept inside the central 80% safe zone. Supplying both, as the generated manifest does, gives each platform the version it wants. Our icon generator produces the padded artwork these need.
Manifest vs. AndroidManifest.xml
These two get confused constantly and have nothing to do with each other. manifest.json is a web standard describing your site. AndroidManifest.xml is an Android file describing your app — its components, permissions and entry points. A converted app has both, and they duplicate a little information (the name, the theme colour) in two entirely different formats.
If your app wraps a live website, the manifest still matters: the WebView reads theme_color for the status bar, and anyone visiting the site in a browser gets the installable experience too. If you bundle the content offline, the manifest does less — there is no install prompt for a page loaded from disk — but keeping it costs nothing and it stays useful on the web.
Where the file goes
Put manifest.json at the root of your site, link it from the <head> of every page, and serve it with the application/manifest+json content type where you can — browsers are forgiving about the type, but linters are not. The theme-color meta tag belongs in the head too: some contexts read it before the manifest has been fetched.