La extensión funciona en tu equipo. Ahora toca preparar el paquete, completar la ficha y pasar la revisión de Google.
Esta guía recorre lo necesario para pasar de «funciona al cargarla sin empaquetar» a una versión publicada en la Chrome Web Store.
Paso 0: registra la cuenta de desarrollador
- Abre el panel de desarrolladores.
- Inicia sesión con una cuenta de Google.
- Paga la tarifa única que indique el panel.
- Acepta el acuerdo de desarrollador.
El registro corresponde a la cuenta. Comprueba allí el importe y los límites vigentes antes de enviar la extensión.
Paso 1: revisa Manifest V3
Antes de empaquetar:
- Declara
"manifest_version": 3. - Usa
service_workersi necesitas trabajo de segundo plano. - Evita
eval(),new Function()y scripts inline en las páginas de la extensión. - Incluye el código en el paquete; no cargues scripts desde servidores remotos.
- Usa
chrome.scripting.executeScripten lugar de la API antigua. - Revisa
chrome.declarativeNetRequestsi necesitas reglas de red. - No añadas
unsafe-evala la CSP; contemplawasm-unsafe-evalsolo si lo necesitas.
La configuración con TypeScript parte de MV3. Revisa también las dependencias que añadas después.
Paso 2: empaqueta la extensión
Compila la versión de producción:
npm run build
Con CRXJS, dist/ incluye JavaScript compilado, páginas HTML, manifiesto e iconos.
Crea el ZIP con el contenido de esa carpeta, de forma que manifest.json quede en la raíz del archivo:
cd dist
zip -r ../my-extension.zip .
Paso 3: prepara la ficha de la tienda
Reúne los recursos antes de enviar.
Campos y recursos necesarios
- Nombre: claro y relacionado con la función. Comprueba el límite indicado en el panel.
- Resumen: una frase concreta dentro del límite del formulario.
- Descripción: explica el valor y la función principal en las primeras líneas. Evita cifras de rendimiento sin evidencia.
- Icono: prepara el recurso de 128 × 128 píxeles y comprueba su legibilidad en tamaños pequeños.
- Capturas: muestra la interfaz real. Prepara las dimensiones admitidas, como 1280 × 800 o 640 × 400, y revisa los requisitos del panel.
- Categoría: elige la que corresponda al uso principal.
- Idioma: indica el idioma de la interfaz y prepara las traducciones que realmente ofreces.
Información necesaria si tratas datos del usuario
- Política de privacidad: describe el acceso y tratamiento reales y facilita una URL pública cuando corresponda según las políticas de la tienda.
- Justificación de permisos: explica qué función necesita cada capacidad.
Recursos que puedes añadir
- Un recurso promocional con las dimensiones que pida el panel.
- Un vídeo que demuestre el uso real.
- La URL de tu web para documentación y soporte.
Paso 4: escribe una política de privacidad precisa
Como estructura inicial, explica:
- Qué datos accedes o recoges, con nombres concretos.
- Para qué los usas.
- Dónde se almacenan y si existe sincronización o envío a servidores.
- Qué terceros participan.
- Cómo contactar para consultas de privacidad.
En herramientas locales como ResistGate o Amethyst, describe cada flujo por separado. Que los registros de actividad sean locales no implica que no haya peticiones de fuentes, iconos, sincronización, soporte o telemetría opcional.
Publica la política en una página accesible y comprueba el enlace desde una sesión sin autenticar.
Paso 5: sube el paquete y envíalo a revisión
- Abre el panel de desarrolladores.
- Crea un elemento nuevo.
- Sube el ZIP.
- Completa los campos de la ficha.
- Añade iconos y capturas.
- Incluye la información de privacidad necesaria.
- Justifica los permisos.
- Elige la distribución pública, no listada o privada que corresponda.
- Envía a revisión.
Paso 6: espera la revisión y atiende sus resultados
Cuánto puede tardar
Los plazos varían entre días y semanas. El acceso amplio y el código difícil de revisar pueden alargar el proceso. Las actualizaciones también se revisan. Consulta el proceso oficial y no prometas una fecha basándote en un plazo fijo.
Qué comprueba la revisión
- La necesidad de los permisos.
- La legibilidad del comportamiento: la ofuscación está prohibida; la minificación normal está permitida.
- La correspondencia entre privacidad declarada y tratamiento real.
- El cumplimiento de MV3.
- La ausencia de comportamiento malicioso o spam.
- La coherencia entre la ficha, la función y las políticas.
Rechazos habituales y cómo responder
Solicitar más permisos de los necesarios
Causa: acceso general a sitios cuando bastan dominios concretos o capacidades que no usa la función central.
Solución: revisa los permisos, retira los que sobran y solicita los secundarios cuando se activen.
Política de privacidad ausente o incompleta
Causa: el enlace falla o no explica los datos que se tratan.
Solución: comprueba la URL y describe el acceso. Si usas almacenamiento, distingue datos locales, sincronizados y enviados a terceros.
Dificultad para revisar el código
Causa: ofuscación que esconde el comportamiento. La minificación habitual no está prohibida.
Solución: retira la ofuscación. Una compilación legible puede facilitar la revisión:
// vite.config.ts
export default defineConfig({
build: {
minify: false, // or 'terser' with readable options
sourcemap: true,
},
// ...
});
Los mapas de fuentes pueden ayudar a entender la salida. No garantizan por sí solos la aprobación.
Funciones que la ficha no describe con precisión
Causa: anunciar algo que el producto no hace o esconder comportamiento relevante.
Solución: ajusta la descripción al producto. No anuncies que mejora la productividad un 300 % sin evidencia.
Contenido duplicado o spam
Causa: fichas o extensiones casi idénticas sin una diferencia útil.
Solución: explica qué problema concreto resuelves y en qué se diferencia la función.
Comprobaciones después de la aprobación
- Instala la versión publicada desde la tienda y pruébala.
- Comprueba su disponibilidad y visibilidad en búsquedas relevantes.
- Revisa cómo aparecen las capturas y la descripción.
- Añade el enlace de instalación a tu web.
- Evalúa canales y directorios adecuados para darla a conocer.
Cómo enviar actualizaciones
- Incrementa
versionen el manifiesto. - Compila y crea un nuevo ZIP.
- Abre el elemento en el panel.
- Sube el paquete.
- Envía la actualización.
También pasa por revisión, con plazo variable.
Cambios de permisos: añadir capacidades que generan nuevos avisos puede requerir que los usuarios acepten el acceso antes de seguir utilizando la extensión. Evalúa ese efecto antes de publicar.
Opciones de monetización
La tienda distribuye extensiones, pero su antiguo sistema de pagos está retirado. Si decides cobrar, necesitas un mecanismo externo apropiado.
Gratis: puedes ofrecer el producto sin cobro y financiar el trabajo por otra vía.
Freemium: una parte gratuita y funciones de pago. Un valor editable en chrome.storage no debe ser la autoridad de la licencia; necesitas validar el acceso de pago con un mecanismo fiable.
Pago único o suscripción: elige según el valor que entregas y los costes que mantienes. No hay una tasa de instalación garantizada para ninguno.
ResistGate tuvo un modelo freemium. Desde octubre de 2026 es gratuito y de código abierto. Esta sección describe opciones, no su modelo comercial actual.
La lista original de comprobación
Conservo esta lista del ejemplo original en inglés como referencia. Los pasos anteriores contienen su explicación en español. Confirma en el panel cualquier importe, dimensión o requisito que pueda cambiar.
PRE-SUBMISSION
[ ] manifest_version: 3
[ ] All code bundled locally (no remote scripts)
[ ] No eval() or unsafe-eval in CSP
[ ] Service worker handles idle termination correctly
[ ] Permissions audited, minimum necessary set
[ ] Privacy policy hosted and accessible
[ ] Icons: 128×128, 48×48, 16×16
[ ] Screenshots: 1280×800, showing real UI
[ ] Description written with target keywords
[ ] Tested in Chrome, Edge, Brave
SUBMISSION
[ ] ZIP contains dist/ contents (not the folder)
[ ] All listing fields filled
[ ] Permission justifications written
[ ] Privacy policy URL added
[ ] Distribution set to Public
POST-APPROVAL
[ ] Install from Web Store and test
[ ] Verify search visibility
[ ] Add Web Store link to website
[ ] Monitor reviews for bug reports
El recorrido completo
La serie va de la carpeta vacía a la arquitectura, los mensajes tipados, el estado persistente, el popup con React, los permisos, la integración de IA, la construcción asistida y el caso de ResistGate.
El último paso es probar el paquete real que vas a publicar.
Esta es la última nota de la serie Extensiones de Chrome: de cero a producto, nacida del trabajo en ResistGate y Amethyst.
Un pequeño voto de confianza
¿Valió la pena leer esta nota?