Haz que cualquier sitio web se pueda instalar y funcione sin conexión: un generador de manifest, un service worker probado, un botón de instalar, los límites en iPhone y la configuración en Vite o Next.js.
Para convertir un sitio web en una progressive web app, sírvelo por HTTPS, añade un manifest.webmanifest con un nombre, start_url, modo de visualización e iconos de 192 y 512 píxeles, enlázalo desde todas las páginas y registra un service worker que guarde archivos en caché para usarlos sin conexión. Los navegadores Chromium ofrecerán entonces instalarla; quienes usan Safari la añaden desde Compartir.
Las tres partes de una PWA
Rellena el formulario para obtener un manifest y las etiquetas del head que debes pegar, y luego copia el service worker y el script de instalación. El worker de esta página se ejecutó en un navegador real con la red cortada antes de publicarlo.
En el Chrome actual, no: un manifest válido, HTTPS y algo de interacción del usuario bastan para la opción de instalar. Aun así te conviene un worker, porque sin él la app instalada muestra la página de error del navegador cuando no hay conexión.
Sí, con límites. En Safari se instalan desde el menú Compartir, no existe el evento de aviso de instalación y las notificaciones push solo funcionan en un sitio añadido a la pantalla de inicio en iOS 16.4 o posterior. La caché sin conexión sí funciona.
beforeinstallprompt solo se dispara en navegadores Chromium, solo cuando se cumplen los criterios de instalación y no cuando la app ya está instalada. Revisa la sección Manifest del panel Application de DevTools para ver el motivo.
Lighthouse 12 eliminó la categoría PWA. Usa el panel Application de Chrome DevTools: la vista Manifest enumera los errores de instalabilidad y los problemas de iconos, y la vista Service workers muestra el registro, las actualizaciones y un interruptor Offline.
Cambia la VERSION de la caché en sw.js. El navegador detecta el worker modificado, lo instala y el paso activate elimina las cachés antiguas. Con skipWaiting y clients.claim, el nuevo worker toma el control en la siguiente carga.
Instalar da a tu sitio su propio icono y una ventana sin barra de direcciones. Un service worker añade páginas sin conexión. Push necesita ambas cosas, y Apple solo lo permite para sitios que el usuario ha añadido a la pantalla de inicio.
Qué puede hacer una PWA, por plataforma
Tres archivos hacen que un sitio funcione sin conexión: el worker, una página de respaldo y unas pocas líneas para registrarlo. Ejecutamos exactamente estos archivos en localhost en Chromium: el worker se instaló, la caché se llenó y, con el servidor detenido, la página de inicio cargó desde la caché mientras que una página nunca visitada mostró offline.html.
Las páginas prueban primero la red para que la gente vea contenido actualizado, luego recurren a una copia en caché y después a offline.html. Archivos como CSS, scripts e iconos salen primero de la caché. Cambiar VERSION hace que el siguiente paso activate elimine las cachés antiguas.
Haz que sea autónoma: estilos en línea y ningún archivo externo, porque puede que no se pueda acceder a nada más cuando se muestre.
El evento beforeinstallprompt solo se dispara en navegadores Chromium (Chrome, Edge, Samsung Internet, Opera). Safari y Firefox nunca lo envían, así que allí el botón queda oculto y la gente usa el menú del propio navegador.
Chrome ya no exige un service worker para ofrecer la instalación; lo que revisa es el manifest y los elementos de abajo. Lighthouse 12 eliminó su categoría PWA, así que revisa la instalabilidad en Chrome DevTools: panel Application y luego Manifest, que enumera cualquier problema en Installability.
Requisitos de instalación de Chrome
Instálalo con npm i -D vite-plugin-pwa. El plugin escribe el manifest y genera un service worker de Workbox al compilar, así que no tienes que escribir sw.js a mano. Pon los iconos en public/.
Next.js sirve este archivo en /manifest.webmanifest y añade la etiqueta link por ti. Para el soporte sin conexión, pon el sw.js de arriba en public/ y regístralo desde un pequeño componente de cliente.
Renderízalo una vez en app/layout.tsx. Omite el registro en desarrollo para que una compilación en caché no oculte tus cambios.
Nombre de la app
Nombre corto (bajo el icono)
URL de inicio
Carpeta de iconos
Color del tema
Color de fondo
Copiar
Generador de manifest
Visualización
Incluir un icono maskable
Guarda tus iconos como icon-192.png e icon-512.png (e icon-512-maskable.png) en la carpeta de iconos.
Etiquetas para el head de todas las páginas
Empieza gratis · Sin tarjeta de crédito