Iconello
Maskable & Standard

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 behaviorRendered as-is, no clippingOS applies device-specific mask (circle, squircle, etc.)
Safe zoneNo restriction — use the full canvasContent must fit within the inner 80%
BackgroundCan be transparentMust be opaque — fill the entire canvas
Use caseBrowser tab, app list, desktop shortcutHome screen icon on Android
What happens if wrongNothing — it just worksLogo gets clipped by circular/squircle mask

Do not use "any maskable" as a combined purpose

You might see older guides recommending 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

Load your maskable icon into maskable.app to preview it under every common mask shape. If your logo peeks out from under the circular mask, add more padding.

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:

48x48

Notification

Android status bar badge

72x72

Small launcher

Older, low-density Android devices

96x96

Standard

Medium density devices, desktop shortcuts

128x128

Chrome Web Store

Required for Chrome Web Store listings

144x144

MS tile

Windows pinned tile, medium density launchers

192x192

Android Chrome

Primary home screen icon on most Android devices

384x384

High-res

High density screens, 2x of 192

512x512

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.

manifest.json
{
  "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

Your manifest file needs to be referenced in your HTML head:<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:

index.html
<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

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.

Get PWA-ready icons in seconds

Standard and maskable variants, manifest included. Describe your app and download everything.