site webmanifest icon sizes: The Only Sizes That Matter
If you've ever installed a PWA on your phone only to see a pixelated mess on your home screen, your site webmanifest icon sizes are probably wrong. Android doesn't just shrink your largest image. It aggressively crops, scales, and masks your icons based on what you declare in your manifest.json.
I learned this the hard way in 2026 when an app I built looked razor-sharp on my Pixel but showed a tiny, off-center blob on a Samsung device. The issue wasn't the image quality. It was the manifest configuration.
If you need a primer on the manifest file itself, read our developer's guide to favicon site.webmanifest. Here, we are going strictly into the icon array and the exact dimensions you need to declare.
Prerequisites
You need a high-resolution source image (at least 512x512 pixels) and a text editor. If you don't have a source file, pop over to Mzu favicondl to generate one from an existing logo or image.
Step-by-Step: Configuring Your Manifest Icons
Let's build a bulletproof icons array. We will focus on the three entries that actually matter for modern Android and PWA support.
1. The 192x192 Standard PNG
This is your baseline. Android uses this size for the app launcher icon on most standard displays. You must declare it explicitly.
Do not rely on the browser to downscale your 512x512 image. Android's rendering engine sometimes applies weird interpolation when scaling down, leaving your icon looking softer than it should. Provide a dedicated 192x192 PNG.
2. The 512x512 High-Res PNG
This is the splash screen icon. When your PWA launches, Android displays this image on a white background while the service worker boots up. If you only declare one icon in your manifest, make it this one (but honestly, don't do that).
3. The Maskable Icon (Crucial)
Android 13+ and modern Chrome OS use adaptive icons. If you don't declare a maskable icon, the OS puts your standard icon inside a white circle. It looks terrible.
Maskable icons require a 'safe zone' in the center. You must pad your design so the OS can crop it into any shape (circle, squircle, rounded square) without cutting off your logo. We explain the design side of this in our maskable icon guide.
The Complete Code
Here is the exact icons array you should paste into your manifest.json right now:
Notice the purpose field. This tells the OS exactly how to use the file. If you omit it, the browser assumes any, which means your maskable icon might get used as a standard icon and look weirdly padded.
Common Pitfalls
Even with the right code, things break. Here are the mistakes I see most often.
Using a Single 'any maskable' Icon
Some developers try to save bytes by declaring one icon with "purpose": "any maskable". Don't do this. A maskable icon has built-in padding. If the browser uses that same file for a standard any request, your icon will look tiny inside the launcher. Always split them into separate files.
Forgetting the Safe Zone
You designed a beautiful 512x512 icon. You uploaded it as maskable. The OS crops it into a circle, and half your logo disappears. You need to keep your artwork within the center 80% of the canvas (the safe zone) for maskable icons.
Mismatched Sizes Attribute
If your file is actually 512x512 pixels but you write "sizes": "192x192" in the manifest, Android gets confused. The OS trusts your manifest declaration over the actual file dimensions. Always verify your image dimensions match the string.
What the Pros Do
Look at how GitHub handles their PWA. They don't ship 15 different PNG sizes. They ship the standard 192 and 512, plus a dedicated maskable version. That is the modern standard. You can verify this yourself by opening DevTools and checking their manifest.
If you want to inspect how other sites handle their icons, use Mzu favicondl to download and analyze their manifest configurations. It saves you from digging through minified HTML.
Wrapping Up
Stop generating dozens of icon files. You only need three entries in your site webmanifest icon sizes array: 192x192, 512x512, and a 512x512 maskable version. Keep your code clean, respect the safe zone, and your PWA will look native on every device.
¿Te ha pasado que instalas una PWA en tu móvil y, al ver el icono en la pantalla de inicio, parece un borrón pixelado de los años 90? Seguramente el problema no es tu diseño, sino que tus site webmanifest icon sizes están mal configurados. Android no se limita a reducir tu imagen más grande; la recorta, la escala y le aplica máscaras de forma agresiva según lo que declares en tu manifest.json.
Lo sufrí en mis propias carnes hace poco. Tenía una app que se veía nítida en mi Pixel, pero en un Samsung de un colega el icono aparecía minúsculo y descentrado. El problema no era la calidad del archivo, sino la configuración del manifest.
Si necesitas repasar los conceptos básicos del manifest, échale un ojo a nuestra guía de favicon site.webmanifest para developers. Aquí vamos a ir directo al grano: al array de iconos y las dimensiones exactas que deves declarar.
Requisitos previos
Vas a necesitar una imagen de alta resolución (como mínimo 512x512 píxeles) y tu editor de código favorito. Si no tienes un archivo fuente a mano, pásate por Mzu favicondl y genera uno a partir de un logo o imagen existente.
Paso a paso: configurando los iconos del manifest
Vamos a montar un array de icons a prueba de balas. Nos centraremos en las tres entradas que de verdad importan para el soporte moderno de PWA en Android.
1. El PNG estándar de 192x192
Esta es tu línea base. Android utiliza este tamaño para el icono del launcher en la mayoría de pantallas estándar. Debes declararlo explícitamente, sin excepciones.
No te fíes del navegador para que reduzca tu imagen de 512x512. El motor de renderizado de Android a veces aplica una interpolación rara al escalar hacia abajo, dejando tu icono con un aspecto borroso. Proporciona un PNG de 192x192 dedicado.
2. El PNG de alta resolución de 512x512
Este es el icono del splash screen. Cuando tu PWA arranca, Android muestra esta imagen sobre un fondo blanco mientras el service worker carga. Si solo declaras un icono en tu manifest, que sea este ( aunque te recomiendo no conformarte con uno solo).
3. El icono Maskable (Crucial)
Android 13+ y las versiones modernas de Chrome OS usan iconos adaptativos. Si no declaras un icono maskable, el sistema operativo mete tu icono estándar dentro de un círculo blanco. El resultado es de lo más cutre.
Los iconos maskable requieren una 'safe zone' en el centro. Tienes que añadir padding a tu diseño para que el sistema operativo pueda recortarlo en cualquier forma (círculo, squircle, cuadrado redondeado) sin cortar tu logo. Explicamos el lado del diseño en nuestra guía de iconos maskable.
El código completo
Aquí tienes el array de icons exacto que deberías pegar en tu manifest.json ahora mismo:
Fíjate en el campo purpose. Esto le dice al sistema operativo exactamente cómo debe usar el archivo. Si lo omites, el navegador asume any, lo que significa que tu icono maskable podría usarse como icono estándar y verse con un padding raro.
Errores comunes
Incluso con el código correcto, las cosas se pueden romper. Aquí van los fallos que veo más a menudo.
Usar un único icono 'any maskable'
Algunos developers intentan ahorrar bytes declarando un solo icono con "purpose": "any maskable". No hagas esto. Un icono maskable lleva padding integrado. Si el navegador usa ese mismo archivo para una petición estándar any, tu icono se verá diminuto dentro del launcher. Siempre sepáralos en archivos distintos.
Olvidar la Safe Zone
Diseñaste un icono precioso de 512x512. Lo subes como maskable. El sistema operativo lo recorta en un círculo y la mitad de tu logo desaparece. Debes mantener tu artwork dentro del 80% central del canvas (la safe zone) para iconos maskable.
Atributo sizes que no coincide
Si tu archivo realmente tiene 512x512 píxeles pero en el manifest escribes "sizes": "192x192", Android se hace un lío. El sistema operativo se fía más de lo que declaras en el manifest que de las dimensiones reales del archivo. Verifica siempre que las dimensiones de tu imagen coinciden con el string.
Lo que hacen los pros
Fíjate en cómo gestiona GitHub su PWA. No incluyen 15 tamaños distintos de PNG. Solo envían el de 192 y 512 estándar, más una versión maskable dedicada. Ese es el estándar moderno. Puedes comprobarlo tú mismo abriendo DevTools y revisando su manifest.
Si quieres inspeccionar cómo otras webs gestionan sus iconos, usa Mzu favicondl para descargar y analizar sus configuraciones de manifest. Te ahorra tener que rastrear el HTML minificado.
En resumen
Deja de generar decenas de archivos de iconos. Solo necesitas tres entradas en tu array de site webmanifest icon sizes: 192x192, 512x512 y una versión maskable de 512x512. Mantén tu código limpio, respeta la safe zone y tu PWA se verá nativa en cualquier dispositivo.
PWA를 폰에 설치했는데 홈 화면 아이콘이 깨져 보인 적 있으신가요? 십중팔구 site webmanifest icon sizes 설정이 잘못된 겁니다. Android는 가장 큰 이미지를 알아서 축소해주지 않습니다. manifest.json에 선언된 값을 기준으로 아이콘을 자르고, 늘리고, 마스킹까지 거침없이 처리해버립니다.
저도 2026년에 이 문제로 정말 고생했습니다. 제가 만든 앱이 개발용으로 쓰던 Pixel에서는 완벽하게 보였는데, 삼성폰에서 테스트해보니 아이콘이 작고 찌그러져 보이더군요. 이미지 품질 문제가 아니었습니다. manifest 설정이 원인이었습니다.
purpose 필드를 주목하세요. OS가 파일을 어떻게 사용할지 알려주는 역할입니다. 생략하면 브라우저는 any로 간주하는데, 이렇게 되면 maskable icon이 표준 아이콘으로 사용되어 이상하게 여백만 큰 아이콘이 될 수 있습니다.
자주 발생하는 실수들
코드가 맞아도 문제는 생깁니다. 제가 가장 많이 겪은 실수들입니다.
하나의 'any maskable' Icon으로 때우기
일부 개발자는 용량을 아끼려고 하나의 아이콘에 "purpose": "any maskable"을 선언합니다. 절대 하지 마세요. maskable icon은 기본적으로 여백이 내장되어 있습니다. 브라우저가 그 파일을 표준 any 요청에도 사용하면 런처 안에서 아이콘이 비정상적으로 작게 보입니다. 무조건 파일을 분리하세요.
Safe Zone 무시하기
예쁜 512x512 아이콘을 디자인했습니다. maskable로 업로드했습니다. 그런데 OS가 원으로 자르니까 로고가 반쯤 잘려나갔습니다. maskable icon은 캔버스 중앙 80% 영역(safe zone) 안에 아트워크를 위치시켜야 합니다.
sizes 속성과 실제 파일 사이즈 불일치
실제 파일은 512x512인데 manifest에 "sizes": "192x192"라고 적는 경우가 있습니다. Android는 혼란스러워합니다. OS는 실제 파일 크기보다 manifest 선언값을 우선합니다. 항상 이미지 크기와 선언값이 일치하는지 확인하세요.
프로들은 어떻게 하는가
GitHub의 PWA를 분석해보세요. 15개나 되는 다양한 PNG 사이즈를 만들지 않습니다. 표준 192, 512, 그리고 전용 maskable 버전만 제공합니다. 이게 현대적인 표준입니다. DevTools를 열어 manifest를 직접 확인해보면 됩니다.
다른 사이트들이 아이콘을 어떻게 처리하는지 분석하고 싶다면 Mzu favicondl을 사용해 manifest 설정을 다운로드하고 분석해보세요. minify된 HTML을 뒤질 필요가 없습니다.
마무리
수십 개의 아이콘 파일을 만들지 마세요. site webmanifest icon sizes 배열에 필요한 건 세 가지뿐입니다: 192x192, 512x512, 그리고 512x512 maskable 버전. 코드를 깔끔하게 유지하고 safe zone을 지키면 모든 기기에서 네이티브 앱처럼 보이는 PWA를 만들 수 있습니다.
PWAをスマホにインストールした後、ホーム画面に表示されたアイコンがピクセルだらけでボヤけていたら、それは site webmanifest の icon sizes 設定に問題がある可能性が高いです。Androidは単に一番大きい画像を縮小して表示してくれるわけではありません。manifest.json に宣言された内容に基づいて、積極的にクロップ、スケーリング、マスク処理を行います。