Generate PWA Icons with AI
Standard and maskable variants at every recommended size. Complete manifest.json icons array included.
PWA Icons Are Not Just Favicons
A favicon lives in the browser tab — a controlled 16x16 or 32x32 square. PWA icons do something harder: they represent your app on the user's home screen, app drawer, task switcher, and splash screen. The operating system decides the shape, and your icon has to survive all of them.
Android might render your icon in a circle. Samsung's One UI uses a squircle. An older device uses a plain rounded rectangle. If your content extends to the edges of the image, it will get clipped on at least one of these shapes. That is where maskable icons come in.
Maskable vs. Standard (Any) Icons
Every icon in your web app manifest has a purpose field. The two values you actually need to care about are any and maskable.
| Standard (any) | Maskable | |
|---|---|---|
| Purpose value | "any" | "maskable" |
| Masking behavior | Rendered as-is, no clipping | OS applies device-specific mask (circle, squircle, etc.) |
| Safe zone | No restriction — use the full canvas | Content must fit within the inner 80% |
| Background | Can be transparent | Must be opaque — fill the entire canvas |
| Use case | Browser tab, app list, desktop shortcut | Home screen icon on Android |
| What happens if wrong | Nothing — it just works | Logo gets clipped by circular/squircle mask |
Do not use "any maskable" as a combined purpose
purpose: "any maskable" on a single icon. This is a bad idea. An icon padded for maskable safe zone will look too small when rendered as an "any" icon (too much whitespace). An icon designed to fill the canvas for "any" use will get clipped when used as maskable. Create separate files for each purpose.The 80% Safe Zone
Maskable icons reserve 10% padding on every side. For a 512x512 icon, that means all meaningful content must fit within the center 410x410 pixels. The outer ring is not wasted — it should be filled with your brand color or a solid background. The OS clips into this area when applying the mask shape.
Why 80%? The most aggressive mask shape is a circle, which clips roughly 10% from each edge of a square. The 80% safe zone guarantees your content survives every possible mask: circle, rounded square, squircle, teardrop — whatever the device manufacturer picked.
Test before you ship
Recommended Sizes
The web app manifest spec does not mandate specific sizes, but Chrome (the main consumer of PWA manifests) has clear preferences. Provide at least 192x192 and 512x512. For full coverage across all contexts:
Notification
Android status bar badge
Small launcher
Older, low-density Android devices
Standard
Medium density devices, desktop shortcuts
Chrome Web Store
Required for Chrome Web Store listings
MS tile
Windows pinned tile, medium density launchers
Android Chrome
Primary home screen icon on most Android devices
High-res
High density screens, 2x of 192
Splash screen
PWA splash screen on launch, largest recommended size
For each size, you ideally provide both a standard (any) version and a maskable version. In practice, most projects get away with standard + maskable at 192 and 512 only. Chrome downscales from the nearest larger size for everything else.
manifest.json Icons Array
Here is a complete manifest icons configuration with both standard and maskable variants at the two most important sizes. Iconello generates this file for you, but understanding the structure is useful for debugging.
{
"name": "My PWA",
"short_name": "PWA",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#3b82f6",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/icons/icon-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/icons/icon-maskable-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/icons/icon-maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}Notice the separate files for any and maskable. The any versions have the icon filling the full canvas with a transparent or shaped background. The maskable versions have the icon centered in the safe zone with a solid background extending to all edges.
Link the manifest in your HTML
<link rel="manifest" href="/manifest.json">Chrome DevTools > Application > Manifest shows you exactly what it found and flags any issues.What About iOS?
iOS does not read PWA icons from the manifest. Safari uses a separate HTML tag:
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">The recommended size is 180x180. iOS applies its own rounded-rectangle mask and does not support maskable icons. The Iconello download includes an Apple Touch Icon alongside the PWA manifest icons, so you are covered on both platforms.
What Iconello Generates
- Standard icons at 48, 72, 96, 128, 144, 192, 384, and 512px
- Maskable variants at 192 and 512px with safe zone padding
- A ready-to-use manifest.json (or site.webmanifest) with all icon entries
- Apple Touch Icon at 180x180
- All files individually optimized — not just downscaled from one source
Frequently Asked Questions
What is the minimum set of PWA icons I need?
At minimum, provide a 192x192 and a 512x512 PNG, both with purpose: "any". Chrome will downscale these for smaller contexts. For a better home screen experience on Android, add maskable versions at the same two sizes. That is four files total, and it covers 95% of real-world scenarios.
Why does my PWA icon look tiny on some Android home screens?
You are probably using an any-purpose icon where the OS expects a maskable one. The OS renders the icon inside its mask shape, and since the icon was not padded for masking, it gets shrunk to fit. Adding a maskable variant with proper safe zone padding fixes this.
Can I use SVG icons in the manifest?
The spec allows it (type: "image/svg+xml"), but browser support is limited. Chrome on Android does not yet support SVG manifest icons as of early 2026. Stick with PNG for broad compatibility. SVG works fine for the inline favicon (<link rel="icon" type="image/svg+xml">) but not the manifest.
Do I need a service worker for the icons to work?
The icons themselves display without a service worker. However, Chrome requires a service worker (and HTTPS) before it shows the "Add to Home Screen" install prompt. The icons are useless on the home screen if the user cannot install the PWA in the first place.