Si buscas una alternativa de hot code push para Cordova, probablemente sea porque cordova-hot-code-push-plugin y el CodePush de Microsoft para Cordova dejaron de funcionar o de recibir mantenimiento. Una opción mantenida hoy es @capgo/cordova-updater, un plugin de Cordova que lleva Capgo live updates a apps de Cordova Android 13+ y Cordova iOS 7+, con canales, rollback y bundles cifrados, sin obligarte a migrar a Capacitor primero.
El estado de las actualizaciones en vivo de Cordova en 2026
cordova-hot-code-push está archivado
El nordnet/cordova-hot-code-push el repositorio está archivado en GitHub. El último cambio de code fue en septiembre de 2018 y la última versión de npm cordova-hot-code-push-plugin es 1.5.3. Fue diseñado para las plataformas de Cordova y la carga de WebView basada en archivos de esa época. El Android moderno de Cordova sirve la app desde https://localhost a través de un manejador de rutas, y Cordova iOS usa WKWebView con un app:// esquema. Un plugin que asume file:// carga no encaja con ese modelo, y nadie lo está actualizando.
Las instalaciones existentes pueden seguir funcionando si nunca actualizas las plataformas de Cordova. Esa es la trampa: no puedes pasar a un Android de Cordova actual o a Xcode sin arriesgar el mecanismo de actualización.
CodePush para Cordova ha desaparecido
Microsoft archivó cordova-plugin-code-push, terminó el soporte de Cordova en App Center en 2022 y retiró el servicio principal de App Center, incluyendo build, distribución y CodePush, el 31 de marzo de 2025. El plugin se comunicaba con el servicio CodePush en App Center, por lo que ya no hay un backend que sirva actualizaciones. Si pasaste a autoalojar el servidor CodePush, sigues dependiendo de un plugin de cliente archivado.
Ionic Appflow
cordova-plugin-ionic conectaba apps de Cordova con las actualizaciones en vivo de Ionic Appflow. Ionic ha anunciado que Appflow se está cerrando, por lo que los equipos que lo usan también buscan una alternativa. Cubrimos esa ruta en la Guía de alternativas a Appflow.
Lo que debe tener un reemplazo
Antes de elegir una herramienta, compárala con estos requisitos:
| Requisito | Por qué es importante |
|---|---|
| Funciona con Android e iOS de Cordova actuales | Los requisitos de las tiendas obligan a actualizar las plataformas: Xcode 26 para subir a App Store desde abril de 2026, y aumentos anuales del target API en Google Play |
Sin dependencia de cordova-plugin-ionic-webview |
Ese plugin está desactualizado y entra en conflicto con los manejadores de esquemas modernos |
| Rollback automático | A bad bundle must not brick the app |
| Canales | Prueba con usuarios internos antes de todos |
| Bundles firmados o cifrados | Evita la manipulación de code entregado por la red |
| Segmentación por versión | Nunca envíes JavaScript que requiera un shell nativo más nuevo |
| CLI compatible con CI | Las releases deben ser un solo comando en tu pipeline |
| Mantenido | Revisa las releases recientes, no solo las estrellas |
Capgo para Cordova
@capgo/cordova-updater usa el mismo API de JavaScript que @capgo/capacitor-updater y el mismo backend en la nube de Capgo. Los bundles, canales, estadísticas y firmas funcionan igual para clientes de Cordova, Capacitor y Electron.
Requisitos
- Cordova CLI 12+
- Cordova Android 13+ (predeterminado
https://localhost/scheme) - Cordova iOS 7+ (predeterminado
app://localhost/scheme) cordova-plugin-ionic-webvieweliminado
Comprueba tus plataformas:
cordova platform ls
Actualiza si es necesario:
cordova platform rm android && cordova platform add android@latest
cordova platform rm ios && cordova platform add ios@latest
Instalar
Crea la app en Capgo (dashboard o CLI) y luego añade el plugin con tu ID de app:
bunx @capgo/cli@latest login
bunx @capgo/cli@latest app add com.example.app --name "My Cordova App"
cordova plugin add @capgo/cordova-updater --variable APP_ID=com.example.app
cordova prepare android ios
Puedes configurar más opciones al instalar. Son variables del plugin, así que ejecuta cordova prepare después de modificarlos:
cordova plugin add @capgo/cordova-updater \
--variable APP_ID=com.example.app \
--variable DEFAULT_CHANNEL=production \
--variable AUTO_UPDATE=atBackground \
--variable APP_READY_TIMEOUT=10000
AUTO_UPDATE por defecto es atBackground, que descarga actualizaciones en segundo plano y las aplica la próxima vez que la app pase a segundo plano. Otros modos incluyen atInstall, onLaunch y off para un control totalmente manual.
Indicar al plugin que la app se inició correctamente
Esta es la única línea que no puedes omitir. Llama a notifyAppReady() en cada inicio, después de deviceready. Si un nuevo bundle no lo llama dentro de APP_READY_TIMEOUT milisegundos, el plugin lo marca como fallido y vuelve al último bundle funcional.
document.addEventListener('deviceready', async () => {
const { Updater } = cordova.plugins;
await Updater.notifyAppReady();
}, false);
Llámalo después de que tu app se haya renderizado, no justo al inicio del script, para detectar bundles que fallan al arrancar.
Flujo de actualización manual
Si configuras AUTO_UPDATE=off, controlas cuándo verificar, descargar y aplicar:
document.addEventListener('deviceready', async () => {
const { Updater } = cordova.plugins;
await Updater.notifyAppReady();
const latest = await Updater.getLatest();
if (latest.url && !latest.error) {
const bundle = await Updater.download({
url: latest.url,
version: latest.version,
checksum: latest.checksum,
});
// Applied on next background/restart
await Updater.next({ id: bundle.id });
}
});
El paquete incluye tipos de TypeScript:
import type { UpdaterPlugin } from '@capgo/cordova-updater';
declare const cordova: { plugins: { Updater: UpdaterPlugin } };
Publicar una actualización
Compila tu www carpeta y súbela:
bun run build
bunx @capgo/cli@latest bundle upload com.example.app --path ./www --channel production
Agrégalo a tu CI después de los tests. La página de Live Updates muestra despliegues de canales, estadísticas y rollback desde el dashboard.
Migrar desde cordova-hot-code-push
- Elimina el plugin antiguo y su configuración. Eliminar
cordova-hot-code-push-plugin,chcpsección enconfig.xml, y lacordova-hcpCLI ychcp.json/chcp.manifestgeneración desde tu build. - Eliminar
cordova-plugin-ionic-webviewsi está presente, y prueba que la app funcione en el WebView de Cordova por defecto. - Actualiza las plataformas de Cordova a Android 13+ e iOS 7+.
- Instalar
@capgo/cordova-updatery añadenotifyAppReady(). - Publica un nuevo build en la tienda. Las instalaciones antiguas conservan el plugin antiguo. Solo el nuevo binario contiene el actualizador Capgo.
- Sube tu primer bundle a un canal de pruebas, verifícalo en dispositivos y luego promuévelo a producción.
Los usuarios que no actualicen desde la tienda permanecerán con el mecanismo antiguo hasta que lo hagan. Mantén tu servidor de actualizaciones anterior en línea durante la transición si aún funciona, o acepta que esos usuarios no reciban actualizaciones OTA hasta que instalen el nuevo binario.
Migración desde CodePush para Cordova
- Reemplazar
codePush.sync()llamadas connotifyAppReady()y ya sea el modo automático o elgetLatest/download/nextflujo. - Reemplaza las claves de despliegue por canales (
DEFAULT_CHANNEL). - Reemplazar
code-push release-cordovaconbunx @capgo/cli@latest bundle upload. - Elimina las
CodePushDeploymentKeypreferencias deconfig.xml.
Para una versión paso a paso para usuarios de App Center, consulta la guía de migración de App Center.
Seguridad y reglas de la tienda
- Encryption and signing. Configurar
PUBLIC_KEYal instalar y usa las claves de cifrado de CLI, para que los dispositivos solo acepten bundles firmados para tu app. - Políticas de Apple y Google. Ambos permiten actualizar code interpretado, como JavaScript, de forma remota, siempre que no cambies el propósito de la app ni añadas funciones que requieran revisión. Los code nativos, los nuevos plugins y los cambios de permisos requieren una publicación en la tienda.
- Segmentación por versión. Si un bundle necesita un plugin nativo que solo existe en un binario más reciente, dirígelo a esa versión nativa. La documentación de Capgo sobre compatibilidad con live update explicar cómo.
Solución de problemas
Se descargan los bundles, pero la app muestra la versión anterior. Aún estás usando cordova-plugin-ionic-webview, o un esquema personalizado. Elimínalo y usa los valores por defecto.
La app hace rollback tras cada actualización. notifyAppReady() no se llama, o se llama después de un error. Revisa la consola del dispositivo y confirma que la llamada se ejecute en cada inicio.
El build de iOS falla tras actualizar la plataforma. Cordova iOS 7+ requiere un Xcode actualizado. Las subidas a la App Store requieren Xcode 26. Puedes generar assets de firma con generador de certificados iOS. Una vez que migres a Capacitor, Build de Capgo puede generar builds de iOS firmados en la nube sin un Mac local.
Updates work on Android but not iOS. Verifica que el scheme de iOS en config.xml sea el scheme app por defecto con el localhost hostname.
¿Deberías cambiarte a Capacitor en su lugar?
No es necesario. Capgo para Cordova existe para que puedas seguir publicando mientras decides. Capacitor aporta una capa nativa con mantenimiento, Swift Package Manager en iOS y un ecosistema de plugins más amplio. Cuando estés listo, mantén el mismo app ID de Capgo y los mismos canales, y solo cambia el plugin del cliente. Nuestra Guía de migración de Cordova a Capacitor te explica cómo hacerlo.