If you've ever installed a PWA on your Android home screen only to see a blurry, stretched-out mess of your logo, your web app manifest icons 192 512 are probably misconfigured. Android doesn't guess what icon to use—it strictly reads your manifest.json file and picks the closest match. If you mess up the dimensions or the image padding, that's exactly what you get.
Google's own Lighthouse audit will straight-up fail your PWA if it cannot find a 192x192 and a 512x512 PNG icon in your manifest. They aren't just arbitrary numbers. The 192px icon is the standard size used for the home screen shortcut, while the 512px icon is what Android uses to generate your app's splash screen. You need both, and they need to be perfect.
We won't cover the broader PWA ecosystem here—if you need a general overview, check out our Web App Manifest Favicon Guide. Instead, we are going to focus purely on the 192 and 512 pixel icons: why they break, how to generate them correctly, and the exact JSON you need to make them work.
Prerequisites: Getting Your Source Image Right
Before you resize anything, you need a high-quality source file. Do not start with a 16x16 favicon and try to upscale it. You need a vector SVG source file or a PNG that is at least 1024x1024 pixels.
If you only have a rasterized logo, you'll notice that scaling it up to 512px introduces blur. This is why working from SVG is the professional standard in 2026. It scales infinitely without losing a single pixel of clarity. If your logo relies on tiny text, you're going to have a bad time—read our Favicon Design Tips to understand why simplifying your mark is critical for small formats.
Step-by-Step: Generating and Configuring the Icons
Let's walk through the actual implementation. You can use any image editor, but we'll use standard CLI tools and plain JSON configuration so you can automate this in your build pipeline.
Step 1: Export the 192 and 512 PNGs
Open your source SVG in your editor of choice (Figma, Sketch, or Adobe XD). Export two distinct PNG files. Name them exactly icon-192.png and icon-512.png. Naming conventions matter because it makes your manifest readable and easy to debug.
If you are using a build tool like Vite or Webpack, you can automate this with a plugin. But for a quick static site, just dropping them in your /public/icons/ directory works perfectly.
Step 2: Write the Manifest JSON
Now, open your manifest.json file. You need to declare both icons explicitly in the icons array. Here is the exact configuration you should copy:
Notice the purpose field. Setting it to any tells the browser this icon can be used anywhere. We'll discuss maskable icons in the pitfalls section, because that's where most developers get tripped up.
Step 3: Link the Manifest in Your HTML
Your manifest won't do anything if the browser doesn't know it exists. Add this single line to the <head> of your HTML document:
<link rel='manifest' href='/manifest.json'>
That's it. Once you deploy, Android devices will read this file and pull the correct 192px and 512px icons automatically.
Common Pitfalls When Setting 192 and 512 Icons
Getting the JSON right is only half the battle. Most developers fail the Lighthouse PWA audit because of subtle design or configuration mistakes. Here are the three most common issues I see in code reviews.
Pitfall 1: Forgetting the 'purpose' Maskable Trap
Android 8+ introduced adaptive icons. If you want your icon to look native and fill the circular or squircle shapes on different launchers, you need a maskable icon. However, you cannot just set purpose: "maskable" on your existing 192 and 512 PNGs.
Maskable icons require a full-bleed background color with your logo placed inside a safe zone (the inner 80% of the canvas). If your logo touches the edges, the Android launcher will crop it awkwardly. You need to export separate versions specifically designed with padding, and declare them like this:
You can actually have multiple 192x192 entries in your manifest as long as their purpose is different. I recommend having one any and one maskable for both 192 and 512 sizes.
Pitfall 2: Serving the Wrong MIME Type
If your icons are failing to load on mobile but work fine on desktop, check your server headers. Some strict web servers default to serving PNGs as application/octet-stream instead of image/png.
Android Chrome is notoriously picky about MIME types in the manifest. If the type field in your JSON doesn't match the server's Content-Type header, the OS will silently reject the icon. Make sure your Nginx or Apache config is correctly mapping .png files.
Pitfall 3: Using a 512px Icon with Too Much Detail
Just because you have a 512x512 canvas doesn't mean you should cram your entire company mission statement into it. When Android scales that 512px icon down for a notification or a small shortcut, all that detail turns into mud.
Look at how Stripe handles their PWA icon. They use a simple, high-contrast mark on a solid background. It looks perfectly sharp whether it's displayed at 512px on a splash screen or scaled down to 48px in a notification bar. Keep it simple.
Verifying Your Setup
Don't just deploy and hope. You need to verify your manifest icons are working correctly. Open Chrome DevTools, go to the Application tab, and click on Manifest. You should see your 192 and 512 icons rendered clearly under the 'Icons' section.
If they show up there without a broken image icon, you've done it right. If you want to quickly grab a 192 or 512 icon from another site to see how they structured their padding, you can use Mzu favicondl to pull the exact manifest files and compare their setup.
Setting up your web app manifest icons 192 512 correctly takes about ten minutes if you have the right source file. Skip the guesswork, export the exact sizes, declare the correct MIME types, and your PWA will look native on every Android device.
¿Te ha pasado que instalas una PWA en tu móvil Android y el icono de tu marca aparece borroso o deformado en la pantalla de inicio? Te aviso ya: el problema no es tu teléfono, son tus web app manifest icons 192 512. Android no adivina nada ni hace magia por ti; lee estrictamente tu archivo manifest.json y coge el recurso que mejor encaje. Si te equivocas con las dimensiones o no respetas los márgenes de la imagen, el resultado va a ser un desastre visual.
Si pasas el audit de Lighthouse de Google, verás que te suspende directamente la PWA si no encuentra un icono PNG de 192x192 y otro de 512x512 en tu manifest. No son números que han puesto a lo loco. El icono de 192px es el estándar que se usa para el acceso directo en el home, mientras que el de 512px es el que utiliza Android para montar el splash screen de tu app. Necesitas ambos, y tienen que estar perfectamente configurados.
No te voy a aburrir con el ecosistema general de las PWA en este post; si necesitas un repaso completo, échale un ojo a nuestra Web App Manifest Favicon Guide. Aquí nos vamos a centrar de lleno en los iconos de 192 y 512 píxeles: por qué fallan, cómo generarlos sin morir en el intento y el JSON exacto que tienes que poner para que funcionen.
Prerrequisitos: Deja bien tu imagen de origen
Antes de redimensionar nada, necesitas un archivo de origen de alta calidad. Por favor, no cojas un favicon de 16x16 y intentes escalarlo. Necesitas un archivo SVG vectorial o un PNG que sea como mínimo de 1024x1024 píxeles.
Si solo tienes el logo rasterizado, verás que al escalarlo a 512px se queda hecho un puré. Por eso en 2026 trabajar desde SVG es el estándar profesional. Escala de forma infinita sin perder ni un ápice de nitidez. Si tu logo depende de un texto minúsculo, lo vas a pasar mal; lee nuestros Favicon Design Tips para entender por qué simplificar tu marca es crítico en formatos tan pequeños.
Paso a paso: Generando y configurando los iconos
Vamos a la implementación real. Puedes usar el editor de imágenes que quieras, pero vamos a usar herramientas CLI estándar y configuración JSON pura para que puedas automatizarlo en tu pipeline de build.
Paso 1: Exportar los PNG de 192 y 512
Abre tu SVG de origen en tu editor favorito (Figma, Sketch o Adobe XD). Exporta dos archivos PNG distintos. Llámalos exactamente icon-192.png y icon-512.png. Los nombres importan y mucho, porque hacen que tu manifest sea legible y fácil de debuguear.
Si usas herramientas de build como Vite o Webpack, puedes automatizar esto con un plugin. Pero para un site estático rápido, con que los dejes caer en tu directorio /public/icons/ ya funciona perfecto.
Paso 2: Escribir el JSON del Manifest
Ahora abre tu archivo manifest.json. Tienes que declarar ambos iconos de forma explícita en el array de icons. Aquí tienes la configuración exacta que puedes copiar y pegar:
Fíjate en el campo purpose. Si lo pones a any, le dices al navegador que este icono se puede usar en cualquier contexto. Ya hablaremos de los iconos maskable en la sección de errores comunes, porque ahí es donde la mayoría de devs se atascan.
Paso 3: Enlazar el Manifest en tu HTML
Tu manifest no va a hacer nada si el navegador no sabe que existe. Añade esta única línea en el <head> de tu documento HTML:
<link rel='manifest' href='/manifest.json'>
Y ya está. Cuando hagas deploy, los dispositivos Android leerán este archivo y cogerán automáticamente los iconos correctos de 192px y 512px.
Errores comunes al configurar los iconos de 192 y 512
Dejar el JSON bien es solo la mitad del trabajo. La mayoría de devs suspende el audit de Lighthouse por errores de diseño o de configuración muy sutiles. Aquí van los tres problemas que más veo en las code reviews.
Error 1: Olvidarse de la trampa del 'purpose' Maskable
Android 8+ introdujo los adaptive icons. Si quieres que tu icono tenga un look nativo y rellene las formas circulares o de squircle en diferentes launchers, necesitas un icono maskable. Ojo, que no puedes simplemente poner purpose: "maskable" en los PNG de 192 y 512 que ya tienes.
Los iconos maskable requieren un fondo de color que ocupe todo el canvas (full-bleed) con tu logo colocado dentro de una zona segura (el 80% interior del canvas). Si tu logo toca los bordes, el launcher de Android lo recortará de forma horrible. Tienes que exportar versiones separadas diseñadas específicamente con padding, y declararlas así:
En realidad puedes tener múltiples entradas de 192x192 en tu manifest siempre y cuando su purpose sea distinto. Te recomiendo tener uno any y otro maskable tanto para el tamaño 192 como para el 512.
Error 2: Servir el MIME Type equivocado
Si tus iconos no cargan en el móvil pero en el escritorio van bien, revisa las cabeceras de tu servidor. Hay servidores web estrictos que por defecto sirven los PNG como application/octet-stream en lugar de image/png.
Android Chrome es especialito con los MIME types en el manifest. Si el campo type de tu JSON no coincide con la cabecera Content-Type del servidor, el SO va a rechazar el icono sin decir ni pío. Asegúrate de que tu configuración de Nginx o Apache mapea correctamente los archivos .png.
Error 3: Usar un icono de 512px con exceso de detalle
El hecho de tener un canvas de 512x512 no significa que debas meter todo el manifiesto de tu empresa ahí dentro. Cuando Android escala ese icono de 512px para una notificación o un acceso directo pequeño, todo ese detalle se convierte en manchas borrosas.
Fíjate cómo gestiona Cabify el icono de su PWA. Usan una marca simple y de alto contraste sobre un fondo sólido. Se ve nítido tanto a 512px en un splash screen como escalado a 48px en la barra de notificaciones. Mantenlo simple.
Verificando tu configuración
No hagas un deploy y rece para que funcione. Tienes que verificar que tus iconos del manifest están funcionando. Abre Chrome DevTools, ve a la pestaña de Application y haz clic en Manifest. Ahí deberías ver tus iconos de 192 y 512 renderizados claramente en la sección de 'Icons'.
Si aparecen ahí sin el icono de imagen rota, lo has hecho bien. Si quieres sacar rápidamente un icono de 192 o 512 de otro site para ver cómo han estructurado su padding, puedes usar Mzu favicondl para descargar los archivos manifest exactos y comparar su configuración con la tuya.
Configurar bien tus web app manifest icons 192 512 te lleva unos diez minutos si tienes el archivo de origen correcto. Salta el ensayo-error, exporta los tamaños exactos, declara los MIME types correctos y tu PWA se verá nativa en cualquier dispositivo Android.
안녕하세요, 개발자 여러분. 모바일 홈 화면에 PWA를 설치했더니 로고가 뭉개져서 나오는 경험, 한 번쯤 있으시죠? 이건 십중팔구 web app manifest의 192px, 512px icon 설정이 꼬여있기 때문입니다. Android는 알아서 딱 맞는 아이콘을 골라주지 않습니다. manifest.json 파일을 아주 엄격하게 읽고 가장 근접한 이미지를 선택할 뿐이죠. 사이즈나 여백(padding) 설정을 잘못하면 바로 그런 참사가 벌어집니다.
Google Lighthouse audit에서는 manifest 파일 내에 192x192 PNG icon과 512x512 PNG icon이 없으면 PWA 검사를 바로 실패시킵니다. 이 숫자들에는 분명한 이유가 있습니다. 192px icon은 홈 화면 바로가기 아이콘의 표준 사이즈이고, 512px icon은 Android에서 앱의 splash screen을 생성할 때 사용합니다. 둘 다 있어야 하며, 완벽하게 세팅되어야 합니다.
이 글에서는 PWA 생태계 전반을 다루지는 않겠습니다. PWA 전반적인 개요가 필요하시다면 저희 Web App Manifest Favicon Guide를 참고해 주세요. 대신, 이 글에서는 192px과 512px icon에만 집중합니다. 왜 깨지는지, 어떻게 올바르게 생성하는지, 그리고 정확히 어떤 JSON 설정이 필요한지 알아보겠습니다.
시작하기 전에: 원본 이미지 준비
리사이징을 하기 전에, 고화질의 원본 파일부터 준비해야 합니다. 16x16 favicon을 가지고 확대(upscale)하려고 하지 마세요. SVG vector 원본 파일이거나 최소 1024x1024 pixel 이상의 PNG 파일이 필요합니다.
래스터 이미지 로고밖에 없다면, 512px까지 키울 때 블러 현상이 발생할 겁니다. 2026년에는 SVG로 작업하는 것이 업계 표준입니다. SVG는 선명도를 한 픽셀도 잃지 않고 무한히 확장할 수 있죠. 만약 로고에 아주 작은 텍스트가 포함되어 있다면, 이건 애초에 타협이 필요한 부분입니다. 작은 사이즈에서는 로고를 단순화하는 것이 필수적입니다. 자세한 이유는 Favicon Design Tips에서 확인해 보세요.
단계별 가이드: Icon 생성 및 설정
이제 실제 구현을 해보겠습니다. 어떤 이미지 에디터를 써도 상관없지만, 빌드 파이프라인에서 자동화할 수 있도록 CLI 툴과 순수 JSON 설정을 사용하는 방식으로 설명하겠습니다.
Step 1: 192px과 512px PNG 내보내기
선호하는 에디터(Figma, Sketch, Adobe XD 등)에서 원본 SVG를 엽니다. 두 개의 PNG 파일로 각각 내보내세요. 파일명은 정확히 icon-192.png와 icon-512.png로 지정합니다. 네이밍 컨벤션은 manifest의 가독성과 디버깅 편의성을 높여주므로 매우 중요합니다.
Vite나 Webpack 같은 빌드 툴을 사용 중이라면 플러그인으로 자동화할 수 있습니다. 하지만 정적 사이트라면 /public/icons/ 디렉토리에 파일들을 넣기만 해도 충분히 동작합니다.
Step 2: Manifest JSON 작성
이제 manifest.json 파일을 엽니다. icons 배열에 두 icon을 명시적으로 선언해야 합니다. 아래 설정을 그대로 복사해서 사용하시면 됩니다.
purpose 필드를 주목해 주세요. any로 설정하면 브라우저에게 이 icon을 어디든 사용할 수 있다고 알려주는 것입니다. 아래 pitfalls 섹션에서 maskable icon에 대해 다룰 텐데, 대부분의 개발자가 바로 이 부분에서 넘어집니다.
Step 3: HTML에 Manifest 연결
브라우저가 manifest 파일의 존재를 모르면 아무 일도 일어나지 않습니다. HTML 문서의 <head>에 다음 한 줄을 추가하세요.
<link rel='manifest' href='/manifest.json'>
끝입니다. 배포하고 나면 Android 기기가 이 파일을 읽고 알아서 192px과 512px icon을 가져옵니다.
192px, 512px Icon 설정 시 흔히 겪는 함정들
JSON을 올바르게 작성하는 것은 싸움의 절반에 불과합니다. 대부분의 개발자가 Lighthouse PWA audit에서 불합격하는 이유는 미묘한 디자인이나 설정 실수 때문입니다. 코드 리뷰하면서 자주 발견하는 세 가지 문제점을 짚어보겠습니다.
Pitfall 1: 'purpose' Maskable 함정
Android 8+부터 adaptive icon이 도입되었습니다. icon이 네이티브처럼 보이고 다양한 런처의 원형이나 squircle 모양을 채우려면 maskable icon이 필요합니다. 하지만 기존 192px, 512px PNG에 그냥 purpose: "maskable"을 설정한다고 되는 게 아닙니다.
Maskable icon은 전체 영역을 채우는 배경색과 안전 영역(캔버스 안쪽 80%)에 배치된 로고가 필요합니다. 로고가 영역 끝에 닿으면 Android 런처가 이를 어색하게 잘라버립니다. 여백(padding)을 고려해 별도로 디자인된 버전을 따로 내보내고, 다음과 같이 선언해야 합니다.
purpose 값이 다르다면 manifest에 192x192 entry를 여러 개 가질 수 있습니다. 192px과 512px 사이즈 모두에 any 용도와 maskable 용도를 하나씩 만들어 두는 것을 권장합니다.
Pitfall 2: 잘못된 MIME Type 제공
데스크톱에서는 icon이 잘 로드되는데 모바일에서만 실패한다면, 서버 헤더를 확인해 보세요. 일부 엄격한 웹 서버는 PNG를 image/png가 아니라 application/octet-stream으로 제공하기도 합니다.
Android Chrome은 manifest 내의 MIME type에 대해 유독 깐깐합니다. JSON의 type 필드와 서버의 Content-Type header가 일치하지 않으면, OS가 조용히 icon을 거부합니다. Nginx나 Apache 설정에서 .png 파일이 올바르게 매핑되어 있는지 반드시 확인하세요.
Pitfall 3: 디테일이 너무 많은 512px Icon 사용
512x512 캔버스를 쓴다고 해서 회사의 모든 비전과 미션을 아이콘에 쑤셔 넣을 수 있는 건 아닙니다. Android가 512px icon을 알림이나 작은 바로가기로 축소할 때, 그 많은 디테일은 그냥 흙탕물처럼 뭉개집니다.
토스(Toss)나 카카오 같은 국내 앱들의 PWA icon을 보면 이해가 쉽습니다. 단순하고 대비가 강한 마크를 단색 배경 위에 배치합니다. splash screen에서 512px으로 보여질 때나 알림 바에서 48px로 축소되어 보여질 때나 완벽하게 선명하게 보이죠. 심플함이 핵심입니다.
설정 검증하기
배포하고 기도하지 마세요. manifest icon이 제대로 동작하는지 검증해야 합니다. Chrome DevTools를 열고 Application 탭으로 이동한 뒤, Manifest를 클릭하세요. 'Icons' 섹션 아래에 192px과 512px icon이 선명하게 렌더링된 것을 볼 수 있어야 합니다.
깨진 이미지 아이콘 없이 제대로 보인다면 성공입니다. 다른 사이트의 192px이나 512px icon을 빠르게 다운받아 여백 구조를 비교해 보고 싶다면, Mzu favicondl을 사용해 manifest 파일을 직접 가져와 비교해 볼 수 있습니다.
올바른 원본 파일만 있다면 web app manifest icon 192 512 설정은 10분이면 충분합니다. 찍기 없이 정확한 사이즈로 내보내고, 올바른 MIME type을 선언하세요. 그러면 여러분의 PWA도 모든 Android 기기에서 네이티브 앱처럼 보일 겁니다.