---
description: Remotely update your Cordova app in real-time with features like auto-update, rollback, and bundle management.
title: Cordova Live Update Plugin for Android & iOS - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/cordova/live-update.png
---

[ Skip to content](#capawesomecordova-live-update) 

[ 🔐 Introducing the **Capacitor Vault** plugin — store secrets behind biometrics or a device passcode.](/blog/announcing-the-capacitor-vault-plugin/) 

* [  SDKs ](/docs/sdks/)
* [  Formbricks ](/docs/sdks/capacitor/formbricks/)
* [  Geocoder ](/docs/sdks/capacitor/geocoder/)
* [  Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [  Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [  libSQL ](/docs/sdks/capacitor/libsql/)
* [  Live Update ](/docs/sdks/capacitor/live-update/)
* [  Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [  Media Session ](/docs/sdks/capacitor/media-session/)
* [  ML Kit ](/docs/sdks/capacitor/mlkit/)
* [  Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [  NFC ](/docs/sdks/capacitor/nfc/)
* [  OAuth ](/docs/sdks/capacitor/oauth/)
* [  Pedometer ](/docs/sdks/capacitor/pedometer/)
* [  Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [  PostHog ](/docs/sdks/capacitor/posthog/)
* [  Printer ](/docs/sdks/capacitor/printer/)
* [  Purchases ](/docs/sdks/capacitor/purchases/)
* [  RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [  Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [  Screenshot ](/docs/sdks/capacitor/screenshot/)
* [  Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [  Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [  Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [  Share Target ](/docs/sdks/capacitor/share-target/)
* [  Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [  SQLite ](/docs/sdks/capacitor/sqlite/)
* [  Superwall ](/docs/sdks/capacitor/superwall/)
* [  Torch ](/docs/sdks/capacitor/torch/)
* [  Vault ](/docs/sdks/capacitor/vault/)
* [  Wifi ](/docs/sdks/capacitor/wifi/)
* [  Zip ](/docs/sdks/capacitor/zip/)
* [  Cordova ](/docs/sdks/cordova/)
* [  iOS ](#ios)
* [  Plugin Variables ](#plugin-variables)
* [  Demo ](#demo)
* [  Usage ](#usage)
* [  API ](#api)
* [  Type Aliases ](#type-aliases)
* [  Changelog ](#changelog)
* [  License ](#license)
* [  Cloud ](/docs/cloud/)
* [  Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [  Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [  FAQ ](/docs/cloud/live-updates/faq/)
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Set Up Environments ](/docs/cloud/native-builds/environments/)
* [  Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [  Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [  Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [  Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [  Use pnpm or Yarn ](/docs/cloud/native-builds/package-managers/)
* [  Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [  Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [  Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [  Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [  Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [  Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  FAQ ](/docs/cloud/native-builds/faq/)
* [  App Store Publishing ](/docs/cloud/app-store-publishing/)
* [  Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [  Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [  Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [  FAQ ](/docs/cloud/app-store-publishing/faq/)
* [  Automations ](/docs/cloud/automations/)
* [  Reference ](/docs/cloud/automations/reference/)
* [  Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [  FAQ ](/docs/cloud/automations/faq/)
* [  Assist ](/docs/cloud/assist/)
* [  CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [  Webhooks ](/docs/cloud/webhooks/)
* [  Integrations ](/docs/cloud/integrations/)
* Account
* [  Organization ](/docs/cloud/organizations/)
* [  Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [  Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [  Billing ](/docs/cloud/organizations/billing/)
* [  License Keys ](/docs/cloud/license-keys/)
* [  AI ](/docs/ai/)
* [  Insiders ](/docs/insiders/)
* [  Billing & Plans ](/docs/insiders/billing-and-plans/)
* [  FAQ ](/docs/insiders/faq/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/support/)
* [  Contributing ](/docs/contributing/)
* Contributing code
* [  Code of Conduct ](/docs/contributing/code-of-conduct/)
* [  Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [  Blog ](/blog/)
* Categories

* [  iOS ](#ios)
* [  Plugin Variables ](#plugin-variables)
* [  Demo ](#demo)
* [  Usage ](#usage)
* [  API ](#api)
* [  Type Aliases ](#type-aliases)
* [  Changelog ](#changelog)
* [  License ](#license)

# @capawesome/cordova-live-update[¶](#capawesomecordova-live-update "Permanent link")

Cordova plugin that allows you to update your app remotely in real-time without requiring users to download a new version from the app store, also known as Over-the-Air (OTA) updates.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

* 🔋 Supports **Android and iOS**
* ⚡️ Works with **stock Cordova WebView** — does **not** require `cordova-plugin-ionic-webview`
* 📦 **Bundle Management** — download, set, and delete bundles
* ☁️ **Cloud Support** — manage updates via [Capawesome Cloud](https://cloud.capawesome.io/)
* 📺 **Channel Support** — set a channel for the app to manage different versions
* 🔄 **Auto Update** — background update strategy with 15-minute throttle
* 🛟 **Rollback** — automatic revert to the default bundle on failed updates
* 🔁 **Delta Updates** — manifest mode downloads only changed files
* ⚙️ **Runtime Configuration** — update plugin configuration at runtime
* 📡 **Update Lifecycle Events** — track download progress, react to bundle changes, detect reloads
* 🏷️ **Custom Properties** — associate custom key-value metadata with bundles via Capawesome Cloud
* 🔒 **Security** — verify authenticity and integrity of bundles via RSA signature
* 🌐 **Open Source** — MIT licensed

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Cordova Android Version | Cordova iOS Version | Status         |
| -------------- | ----------------------- | ------------------- | -------------- |
| 0.1.x          | \>=13.0.0               | \>=7.0.0            | Active support |

## ⚠️ WebView Scheme Requirement[¶](#webview-scheme-requirement "Permanent link")

This plugin replaces files served to the WebView by hooking into Cordova's official plugin extension points (`CordovaPluginPathHandler` on Android, `CDVPluginSchemeHandler` on iOS). These hooks only fire when the WebView is loading via a custom scheme — which is the **default** for modern Cordova:

* **Android (cordova-android ≥10):** loads from `https://localhost/` via `WebViewAssetLoader`. ✅ Supported by default.
* **iOS (cordova-ios ≥6):** loads from `app://localhost/` via `WKURLSchemeHandler`. ✅ Supported by default.

The plugin **will not work** if your app overrides these to use the legacy file scheme:

* ❌ `<preference name="AndroidInsecureFileModeEnabled" value="true" />`
* ❌ `<preference name="Scheme" value="file" />`

If you require these settings, this plugin is not for you.

## Guides[¶](#guides "Permanent link")

* [Getting Started with Capawesome Cloud Live Updates](https://capawesome.io/cloud/live-updates/setup/)
* [Migrating from Ionic Appflow to Capawesome Cloud](https://capawesome.io/blog/migrating-from-ionic-appflow-to-capawesome-cloud/)

## Installation[¶](#installation "Permanent link")

Install the plugin by running the following command and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-0-1)cordova plugin add @capawesome/cordova-live-update --variable APP_ID=<your-app-id>
`

### Android[¶](#android "Permanent link")

#### Channel[¶](#channel "Permanent link")

For a **static** default channel, use the [DEFAULT\_CHANNEL](#plugin-variables) plugin variable — no native config required.

If you are using [Versioned Channels](https://capawesome.io/cloud/live-updates/guides/best-practices/#versioned-channels), the channel value needs to be interpolated from the build's `versionCode`, which can't be expressed via a plugin variable. Use Cordova's `build-extras.gradle` mechanism instead. In your app's `config.xml`, add:

`[](#%5F%5Fcodelineno-1-1)<platform name="android">
[](#%5F%5Fcodelineno-1-2)    <resource-file src="build-extras.gradle" target="app/build-extras.gradle"/>
[](#%5F%5Fcodelineno-1-3)</platform>
`

Then create `build-extras.gradle` next to `config.xml`:

`[](#%5F%5Fcodelineno-2-1)android {
[](#%5F%5Fcodelineno-2-2)    applicationVariants.all { variant ->
[](#%5F%5Fcodelineno-2-3)        variant.resValue "string", "capawesome_live_update_default_channel", "production-${variant.versionCode}"
[](#%5F%5Fcodelineno-2-4)    }
[](#%5F%5Fcodelineno-2-5)}
`

### iOS[¶](#ios "Permanent link")

#### Channel[¶](#channel%5F1 "Permanent link")

For a **static** default channel, use the [DEFAULT\_CHANNEL](#plugin-variables) plugin variable — no native config required.

If you are using [Versioned Channels](https://capawesome.io/cloud/live-updates/guides/best-practices/#versioned-channels), use Cordova's `<config-file>` mechanism in your app's `config.xml`:

`[](#%5F%5Fcodelineno-3-1)<platform name="ios">
[](#%5F%5Fcodelineno-3-2)    <config-file target="*-Info.plist" parent="CapawesomeLiveUpdateDefaultChannel">
[](#%5F%5Fcodelineno-3-3)        <string>production-$(CURRENT_PROJECT_VERSION)</string>
[](#%5F%5Fcodelineno-3-4)    </config-file>
[](#%5F%5Fcodelineno-3-5)</platform>
`

Xcode resolves `$(CURRENT_PROJECT_VERSION)` at build time.

#### Privacy manifest[¶](#privacy-manifest "Permanent link")

Starting with [cordova-ios 7.1.0](https://cordova.apache.org/announcements/2024/04/03/cordova-ios-7.1.0.html), the iOS [Privacy Manifest](https://developer.apple.com/documentation/bundleresources/privacy%5Fmanifest%5Ffiles) is configured via a `<privacy-manifest>` element inside the `<platform name="ios">` section of your app's `config.xml`. Add an `NSPrivacyAccessedAPICategoryUserDefaults` entry for this plugin:

`[](#%5F%5Fcodelineno-4-1)<platform name="ios">
[](#%5F%5Fcodelineno-4-2)    <privacy-manifest>
[](#%5F%5Fcodelineno-4-3)        <key>NSPrivacyAccessedAPITypes</key>
[](#%5F%5Fcodelineno-4-4)        <array>
[](#%5F%5Fcodelineno-4-5)            <!-- Add this dict entry to the array if the key already exists. -->
[](#%5F%5Fcodelineno-4-6)            <dict>
[](#%5F%5Fcodelineno-4-7)                <key>NSPrivacyAccessedAPIType</key>
[](#%5F%5Fcodelineno-4-8)                <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
[](#%5F%5Fcodelineno-4-9)                <key>NSPrivacyAccessedAPITypeReasons</key>
[](#%5F%5Fcodelineno-4-10)                <array>
[](#%5F%5Fcodelineno-4-11)                    <string>CA92.1</string>
[](#%5F%5Fcodelineno-4-12)                </array>
[](#%5F%5Fcodelineno-4-13)            </dict>
[](#%5F%5Fcodelineno-4-14)        </array>
[](#%5F%5Fcodelineno-4-15)    </privacy-manifest>
[](#%5F%5Fcodelineno-4-16)</platform>
`

We recommend to declare [CA92.1](https://developer.apple.com/documentation/bundleresources/privacy%5Fmanifest%5Ffiles/describing%5Fuse%5Fof%5Frequired%5Freason%5Fapi#4278401) as the reason for accessing the [UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults) API.

## Plugin Variables[¶](#plugin-variables "Permanent link")

These map to Cordova `<preference>` entries in `config.xml`. Set them at install time with `--variable`, or edit `config.xml` directly:

| Variable                           | Default                 | Description                                                                                                           |
| ---------------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------- |
| APP\_ID                            | _(empty)_               | Capawesome Cloud app ID (a UUID).                                                                                     |
| DEFAULT\_CHANNEL                   | _(empty)_               | Default channel name. Overridden by native config or setChannel().                                                    |
| AUTO\_UPDATE\_STRATEGY             | none                    | none or background. background runs sync() on cold start and foreground (15-minute throttle).                         |
| HTTP\_TIMEOUT                      | 60000                   | HTTP request timeout in milliseconds.                                                                                 |
| PUBLIC\_KEY                        | _(empty)_               | PEM-encoded RSA public key for signature verification. When set, all bundle downloads must include a valid signature. |
| READY\_TIMEOUT                     | 0                       | Milliseconds to wait for ready() before automatic rollback. Set to e.g. 10000 to enable rollback. 0 disables it.      |
| SERVER\_DOMAIN                     | api.cloud.capawesome.io | Capawesome Cloud API host (no scheme/path).                                                                           |
| AUTO\_DELETE\_BUNDLES              | false                   | Whether to delete unused bundles when ready() is called.                                                              |
| AUTO\_BLOCK\_ROLLED\_BACK\_BUNDLES | false                   | Whether to block bundles that caused a rollback. No effect if READY\_TIMEOUT=0.                                       |

### Example[¶](#example "Permanent link")

`[](#%5F%5Fcodelineno-5-1)<plugin name="@capawesome/cordova-live-update" spec="0.1.0">
[](#%5F%5Fcodelineno-5-2)  <variable name="APP_ID" value="6e351b4f-69a7-415e-a057-4567df7ffe94" />
[](#%5F%5Fcodelineno-5-3)  <variable name="AUTO_UPDATE_STRATEGY" value="background" />
[](#%5F%5Fcodelineno-5-4)  <variable name="DEFAULT_CHANNEL" value="production" />
[](#%5F%5Fcodelineno-5-5)  <variable name="READY_TIMEOUT" value="10000" />
[](#%5F%5Fcodelineno-5-6)  <variable name="PUBLIC_KEY" value="-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDodf1SD0OOn6hIlDuKBza0Ed0OqtwyVJwiyjmE9BJaZ7y8ZUfcF+SKmd0l2cDPM45XIg2tAFux5n29uoKyHwSt+6tCi5CJA5Z1/1eZruRRqABLonV77KS3HUtvOgqRLDnKSV89dYZkM++NwmzOPgIF422mvc+VukcVOBfc8/AHQIDAQAB-----END PUBLIC KEY-----" />
[](#%5F%5Fcodelineno-5-7)</plugin>
`

## Demo[¶](#demo "Permanent link")

A working example can be found here: [capawesome-team/cordova-live-update-demo](https://github.com/capawesome-team/cordova-live-update-demo)

| Android                                                                                                                                      | iOS                                                                                                                                  |
| -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| ![Android Demo](../../../assets/external/raw.githubusercontent.com/capawesome-team/cordova-live-update/main/_github/assets/demo-android.png) | ![iOS Demo](../../../assets/external/raw.githubusercontent.com/capawesome-team/cordova-live-update/main/_github/assets/demo-ios.png) |

## Usage[¶](#usage "Permanent link")

The plugin attaches to `cordova.plugins.LiveUpdate` once `deviceready` fires.

If you use TypeScript, type definitions are available from the npm package:

`[](#%5F%5Fcodelineno-6-1)import type { LiveUpdatePlugin } from '@capawesome/cordova-live-update';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)declare const cordova: { plugins: { LiveUpdate: LiveUpdatePlugin } };
`

`` [](#%5F%5Fcodelineno-7-1)const { LiveUpdate } = cordova.plugins;
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const deleteBundle = async () => {
[](#%5F%5Fcodelineno-7-4)  await LiveUpdate.deleteBundle({ bundleId: 'my-bundle' });
[](#%5F%5Fcodelineno-7-5)};
[](#%5F%5Fcodelineno-7-6)
[](#%5F%5Fcodelineno-7-7)const downloadBundle = async () => {
[](#%5F%5Fcodelineno-7-8)  await LiveUpdate.downloadBundle({ url: 'https://example.com/1.0.0.zip', bundleId: '1.0.0' });
[](#%5F%5Fcodelineno-7-9)};
[](#%5F%5Fcodelineno-7-10)
[](#%5F%5Fcodelineno-7-11)const fetchChannels = async () => {
[](#%5F%5Fcodelineno-7-12)  const result = await LiveUpdate.fetchChannels();
[](#%5F%5Fcodelineno-7-13)  return result.channels;
[](#%5F%5Fcodelineno-7-14)};
[](#%5F%5Fcodelineno-7-15)
[](#%5F%5Fcodelineno-7-16)const fetchLatestBundle = async () => {
[](#%5F%5Fcodelineno-7-17)  await LiveUpdate.fetchLatestBundle();
[](#%5F%5Fcodelineno-7-18)};
[](#%5F%5Fcodelineno-7-19)
[](#%5F%5Fcodelineno-7-20)const getBundles = async () => {
[](#%5F%5Fcodelineno-7-21)  const result = await LiveUpdate.getBundles();
[](#%5F%5Fcodelineno-7-22)  return result.bundleIds;
[](#%5F%5Fcodelineno-7-23)};
[](#%5F%5Fcodelineno-7-24)
[](#%5F%5Fcodelineno-7-25)const getChannel = async () => {
[](#%5F%5Fcodelineno-7-26)  const result = await LiveUpdate.getChannel();
[](#%5F%5Fcodelineno-7-27)  return result.channel;
[](#%5F%5Fcodelineno-7-28)};
[](#%5F%5Fcodelineno-7-29)
[](#%5F%5Fcodelineno-7-30)const getCurrentBundle = async () => {
[](#%5F%5Fcodelineno-7-31)  const result = await LiveUpdate.getCurrentBundle();
[](#%5F%5Fcodelineno-7-32)  return result.bundleId;
[](#%5F%5Fcodelineno-7-33)};
[](#%5F%5Fcodelineno-7-34)
[](#%5F%5Fcodelineno-7-35)const getCustomId = async () => {
[](#%5F%5Fcodelineno-7-36)  const result = await LiveUpdate.getCustomId();
[](#%5F%5Fcodelineno-7-37)  return result.customId;
[](#%5F%5Fcodelineno-7-38)};
[](#%5F%5Fcodelineno-7-39)
[](#%5F%5Fcodelineno-7-40)const getDeviceId = async () => {
[](#%5F%5Fcodelineno-7-41)  const result = await LiveUpdate.getDeviceId();
[](#%5F%5Fcodelineno-7-42)  return result.deviceId;
[](#%5F%5Fcodelineno-7-43)};
[](#%5F%5Fcodelineno-7-44)
[](#%5F%5Fcodelineno-7-45)const getNextBundle = async () => {
[](#%5F%5Fcodelineno-7-46)  const result = await LiveUpdate.getNextBundle();
[](#%5F%5Fcodelineno-7-47)  return result.bundleId;
[](#%5F%5Fcodelineno-7-48)};
[](#%5F%5Fcodelineno-7-49)
[](#%5F%5Fcodelineno-7-50)const getVersionCode = async () => {
[](#%5F%5Fcodelineno-7-51)  const result = await LiveUpdate.getVersionCode();
[](#%5F%5Fcodelineno-7-52)  return result.versionCode;
[](#%5F%5Fcodelineno-7-53)};
[](#%5F%5Fcodelineno-7-54)
[](#%5F%5Fcodelineno-7-55)const getVersionName = async () => {
[](#%5F%5Fcodelineno-7-56)  const result = await LiveUpdate.getVersionName();
[](#%5F%5Fcodelineno-7-57)  return result.versionName;
[](#%5F%5Fcodelineno-7-58)};
[](#%5F%5Fcodelineno-7-59)
[](#%5F%5Fcodelineno-7-60)const ready = async () => {
[](#%5F%5Fcodelineno-7-61)  const result = await LiveUpdate.ready();
[](#%5F%5Fcodelineno-7-62)  if (result.currentBundleId) {
[](#%5F%5Fcodelineno-7-63)    console.log(`The app is now using the bundle with the identifier ${result.currentBundleId}.`);
[](#%5F%5Fcodelineno-7-64)  }
[](#%5F%5Fcodelineno-7-65)  if (result.previousBundleId) {
[](#%5F%5Fcodelineno-7-66)    console.log(`The app was using the bundle with the identifier ${result.previousBundleId}.`);
[](#%5F%5Fcodelineno-7-67)  }
[](#%5F%5Fcodelineno-7-68)  if (result.rollback) {
[](#%5F%5Fcodelineno-7-69)    console.log('The app was reset to the default bundle.');
[](#%5F%5Fcodelineno-7-70)  }
[](#%5F%5Fcodelineno-7-71)};
[](#%5F%5Fcodelineno-7-72)
[](#%5F%5Fcodelineno-7-73)const reload = async () => {
[](#%5F%5Fcodelineno-7-74)  await LiveUpdate.reload();
[](#%5F%5Fcodelineno-7-75)};
[](#%5F%5Fcodelineno-7-76)
[](#%5F%5Fcodelineno-7-77)const reset = async () => {
[](#%5F%5Fcodelineno-7-78)  await LiveUpdate.reset();
[](#%5F%5Fcodelineno-7-79)};
[](#%5F%5Fcodelineno-7-80)
[](#%5F%5Fcodelineno-7-81)const setChannel = async () => {
[](#%5F%5Fcodelineno-7-82)  await LiveUpdate.setChannel({ channel: 'production-5' });
[](#%5F%5Fcodelineno-7-83)};
[](#%5F%5Fcodelineno-7-84)
[](#%5F%5Fcodelineno-7-85)const setCustomId = async () => {
[](#%5F%5Fcodelineno-7-86)  await LiveUpdate.setCustomId({ customId: 'my-custom-id' });
[](#%5F%5Fcodelineno-7-87)};
[](#%5F%5Fcodelineno-7-88)
[](#%5F%5Fcodelineno-7-89)const setNextBundle = async () => {
[](#%5F%5Fcodelineno-7-90)  await LiveUpdate.setNextBundle({ bundleId: '7f0b9bf2-dff6-4be2-bcac-b068cc5ea756' });
[](#%5F%5Fcodelineno-7-91)};
[](#%5F%5Fcodelineno-7-92)
[](#%5F%5Fcodelineno-7-93)const sync = async () => {
[](#%5F%5Fcodelineno-7-94)  const result = await LiveUpdate.sync({
[](#%5F%5Fcodelineno-7-95)    channel: 'production-5',
[](#%5F%5Fcodelineno-7-96)  });
[](#%5F%5Fcodelineno-7-97)  return result.nextBundleId;
[](#%5F%5Fcodelineno-7-98)};
[](#%5F%5Fcodelineno-7-99)
[](#%5F%5Fcodelineno-7-100)const isNewBundleAvailable = async () => {
[](#%5F%5Fcodelineno-7-101)  const { bundleId: latestBundleId } = await LiveUpdate.fetchLatestBundle({
[](#%5F%5Fcodelineno-7-102)    channel: 'production-5',
[](#%5F%5Fcodelineno-7-103)  });
[](#%5F%5Fcodelineno-7-104)  if (latestBundleId) {
[](#%5F%5Fcodelineno-7-105)    const { bundleId: currentBundleId } = await LiveUpdate.getCurrentBundle();
[](#%5F%5Fcodelineno-7-106)    return latestBundleId !== currentBundleId;
[](#%5F%5Fcodelineno-7-107)  } else {
[](#%5F%5Fcodelineno-7-108)    return false;
[](#%5F%5Fcodelineno-7-109)  }
[](#%5F%5Fcodelineno-7-110)};
 ``

## API[¶](#api "Permanent link")

* [clearBlockedBundles()](#clearblockedbundles)
* [deleteBundle(...)](#deletebundle)
* [downloadBundle(...)](#downloadbundle)
* [fetchChannels(...)](#fetchchannels)
* [fetchLatestBundle(...)](#fetchlatestbundle)
* [getBlockedBundles()](#getblockedbundles)
* [getBundles()](#getbundles)
* [getChannel()](#getchannel)
* [getConfig()](#getconfig)
* [getDownloadedBundles()](#getdownloadedbundles)
* [getCurrentBundle()](#getcurrentbundle)
* [getCustomId()](#getcustomid)
* [getDeviceId()](#getdeviceid)
* [isSyncing()](#issyncing)
* [getNextBundle()](#getnextbundle)
* [getVersionCode()](#getversioncode)
* [getVersionName()](#getversionname)
* [ready()](#ready)
* [reload()](#reload)
* [reset()](#reset)
* [resetConfig()](#resetconfig)
* [setChannel(...)](#setchannel)
* [setConfig(...)](#setconfig)
* [setCustomId(...)](#setcustomid)
* [setNextBundle(...)](#setnextbundle)
* [sync(...)](#sync)
* [addListener('downloadBundleProgress', ...)](#addlistenerdownloadbundleprogress-)
* [addListener('nextBundleSet', ...)](#addlistenernextbundleset-)
* [removeAllListeners()](#removealllisteners)
* [Interfaces](#interfaces)
* [Type Aliases](#type-aliases)

### clearBlockedBundles()[¶](#clearblockedbundles "Permanent link")

`[](#%5F%5Fcodelineno-8-1)clearBlockedBundles() => any
`

Clear all blocked bundles from the blocked list.

This removes all bundle identifiers that were automatically blocked due to rollbacks when `autoBlockRolledBackBundles` is enabled.

**Returns:** `any`

**Since:** 0.1.0

---

### deleteBundle(...)[¶](#deletebundle "Permanent link")

`[](#%5F%5Fcodelineno-9-1)deleteBundle(options: DeleteBundleOptions) => any
`

Delete a bundle from the app.

| Param       | Type                                        |
| ----------- | ------------------------------------------- |
| **options** | [DeleteBundleOptions](#deletebundleoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### downloadBundle(...)[¶](#downloadbundle "Permanent link")

`[](#%5F%5Fcodelineno-10-1)downloadBundle(options: DownloadBundleOptions) => any
`

Download a bundle.

| Param       | Type                                            |
| ----------- | ----------------------------------------------- |
| **options** | [DownloadBundleOptions](#downloadbundleoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### fetchChannels(...)[¶](#fetchchannels "Permanent link")

`[](#%5F%5Fcodelineno-11-1)fetchChannels(options?: FetchChannelsOptions | undefined) => any
`

Fetch channels from [Capawesome Cloud](https://capawesome.io/cloud/).

This is primarily intended for development and QA purposes. It allows you to retrieve a list of available channels so you can dynamically switch between them using `setChannel(...)`.

**Attention**: Only works for apps with public channels enabled. If channels are private, they can still be set using `setChannel(...)`but won't be returned by this method.

| Param       | Type                                          |
| ----------- | --------------------------------------------- |
| **options** | [FetchChannelsOptions](#fetchchannelsoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### fetchLatestBundle(...)[¶](#fetchlatestbundle "Permanent link")

`[](#%5F%5Fcodelineno-12-1)fetchLatestBundle(options?: FetchLatestBundleOptions | undefined) => any
`

Fetch the latest bundle using the [Capawesome Cloud](https://capawesome.io/cloud/).

| Param       | Type                                                  |
| ----------- | ----------------------------------------------------- |
| **options** | [FetchLatestBundleOptions](#fetchlatestbundleoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### getBlockedBundles()[¶](#getblockedbundles "Permanent link")

`[](#%5F%5Fcodelineno-13-1)getBlockedBundles() => any
`

Get all blocked bundle identifiers.

Returns the list of bundle identifiers that were automatically blocked due to rollbacks when `autoBlockRolledBackBundles` is enabled.

**Returns:** `any`

**Since:** 0.1.0

---

### getBundles()[¶](#getbundles "Permanent link")

`[](#%5F%5Fcodelineno-14-1)getBundles() => any
`

Get all identifiers of bundles that have been downloaded.

**Returns:** `any`

**Since:** 0.1.0

---

### getChannel()[¶](#getchannel "Permanent link")

`[](#%5F%5Fcodelineno-15-1)getChannel() => any
`

Get the channel that is used for the update.

The channel is resolved in the following order (highest priority first): 1\. `setChannel()` (SharedPreferences on Android / UserDefaults on iOS) 2\. Native config (`CapawesomeLiveUpdateDefaultChannel` in `Info.plist` on iOS or`capawesome_live_update_default_channel` in `strings.xml` on Android) 3\. The `DEFAULT_CHANNEL` preference in `config.xml`

**Note**: The `channel` parameter of `sync()` takes the highest priority but is not persisted and therefore not returned by this method.

**Returns:** `any`

**Since:** 0.1.0

---

### getConfig()[¶](#getconfig "Permanent link")

`[](#%5F%5Fcodelineno-16-1)getConfig() => any
`

Get the runtime configuration.

Returns the current plugin configuration including any runtime overrides set via `setConfig()`.

**Returns:** `any`

**Since:** 0.1.0

---

### getDownloadedBundles()[¶](#getdownloadedbundles "Permanent link")

`[](#%5F%5Fcodelineno-17-1)getDownloadedBundles() => any
`

Get all identifiers of bundles that have been downloaded.

**Returns:** `any`

**Since:** 0.1.0

---

### getCurrentBundle()[¶](#getcurrentbundle "Permanent link")

`[](#%5F%5Fcodelineno-18-1)getCurrentBundle() => any
`

Get the bundle identifier of the current bundle. The current bundle is the bundle that is currently used by the app.

**Returns:** `any`

**Since:** 0.1.0

---

### getCustomId()[¶](#getcustomid "Permanent link")

`[](#%5F%5Fcodelineno-19-1)getCustomId() => any
`

Get the custom identifier of the device.

**Returns:** `any`

**Since:** 0.1.0

---

### getDeviceId()[¶](#getdeviceid "Permanent link")

`[](#%5F%5Fcodelineno-20-1)getDeviceId() => any
`

Get the unique device identifier.

**Returns:** `any`

**Since:** 0.1.0

---

### isSyncing()[¶](#issyncing "Permanent link")

`[](#%5F%5Fcodelineno-21-1)isSyncing() => any
`

Check whether a sync operation is currently in progress.

**Returns:** `any`

**Since:** 0.1.0

---

### getNextBundle()[¶](#getnextbundle "Permanent link")

`[](#%5F%5Fcodelineno-22-1)getNextBundle() => any
`

Get the bundle identifier of the next bundle. The next bundle is the bundle that will be used after calling `reload()`or restarting the app.

**Returns:** `any`

**Since:** 0.1.0

---

### getVersionCode()[¶](#getversioncode "Permanent link")

`[](#%5F%5Fcodelineno-23-1)getVersionCode() => any
`

Get the version code of the app.

On **Android**, this is the `versionCode` from `PackageInfo`. On **iOS**, this is the `CFBundleVersion` from the `Info.plist` file.

**Returns:** `any`

**Since:** 0.1.0

---

### getVersionName()[¶](#getversionname "Permanent link")

`[](#%5F%5Fcodelineno-24-1)getVersionName() => any
`

Get the version name of the app.

On **Android**, this is the `versionName` from `PackageInfo`. On **iOS**, this is the `CFBundleShortVersionString` from the `Info.plist` file.

**Returns:** `any`

**Since:** 0.1.0

---

### ready()[¶](#ready "Permanent link")

`[](#%5F%5Fcodelineno-25-1)ready() => any
`

Notify the plugin that the app is ready to use and no rollback is needed.

**Attention**: This method should be called as soon as the app is ready to use to prevent the app from being reset to the default bundle.

**Returns:** `any`

**Since:** 0.1.0

---

### reload()[¶](#reload "Permanent link")

`[](#%5F%5Fcodelineno-26-1)reload() => any
`

Reload the app to apply the new bundle.

**Returns:** `any`

**Since:** 0.1.0

---

### reset()[¶](#reset "Permanent link")

`[](#%5F%5Fcodelineno-27-1)reset() => any
`

Reset the app to the default bundle.

Call `reload()` or restart the app to apply the changes.

**Returns:** `any`

**Since:** 0.1.0

---

### resetConfig()[¶](#resetconfig "Permanent link")

`[](#%5F%5Fcodelineno-28-1)resetConfig() => any
`

Reset the runtime configuration to the values from `config.xml`.

This clears any runtime configuration set via `setConfig()`. The changes take effect immediately.

**Returns:** `any`

**Since:** 0.1.0

---

### setChannel(...)[¶](#setchannel "Permanent link")

`[](#%5F%5Fcodelineno-29-1)setChannel(options: SetChannelOptions) => any
`

Set the channel to use for the update.

| Param       | Type                                    |
| ----------- | --------------------------------------- |
| **options** | [SetChannelOptions](#setchanneloptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### setConfig(...)[¶](#setconfig "Permanent link")

`[](#%5F%5Fcodelineno-30-1)setConfig(options: SetConfigOptions) => any
`

Set the runtime configuration.

This allows updating plugin configuration options at runtime. The changes are persisted across app restarts and take effect immediately.

**Important:** Runtime configuration is automatically reset to default values whenever the native app is updated to a new version. This ensures that configuration from previous versions doesn't persist after an app update.

| Param       | Type                                  |
| ----------- | ------------------------------------- |
| **options** | [SetConfigOptions](#setconfigoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### setCustomId(...)[¶](#setcustomid "Permanent link")

`[](#%5F%5Fcodelineno-31-1)setCustomId(options: SetCustomIdOptions) => any
`

Set the custom identifier of the device.

| Param       | Type                                      |
| ----------- | ----------------------------------------- |
| **options** | [SetCustomIdOptions](#setcustomidoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### setNextBundle(...)[¶](#setnextbundle "Permanent link")

`[](#%5F%5Fcodelineno-32-1)setNextBundle(options: SetNextBundleOptions) => any
`

Set the next bundle to use for the app.

Call `reload()` or restart the app to apply the changes.

| Param       | Type                                          |
| ----------- | --------------------------------------------- |
| **options** | [SetNextBundleOptions](#setnextbundleoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### sync(...)[¶](#sync "Permanent link")

`[](#%5F%5Fcodelineno-33-1)sync(options?: SyncOptions | undefined) => any
`

Automatically download and set the latest bundle for the app using the [Capawesome Cloud](https://capawesome.io/cloud/).

Call `reload()` or restart the app to apply the changes.

| Param       | Type                        |
| ----------- | --------------------------- |
| **options** | [SyncOptions](#syncoptions) |

**Returns:** `any`

**Since:** 0.1.0

---

### addListener('downloadBundleProgress', ...)[¶](#addlistenerdownloadbundleprogress "Permanent link")

`[](#%5F%5Fcodelineno-34-1)addListener(eventName: 'downloadBundleProgress', listenerFunc: DownloadBundleProgressListener) => any
`

Listen for the download progress of a bundle.

| Param            | Type                                                              |
| ---------------- | ----------------------------------------------------------------- |
| **eventName**    | 'downloadBundleProgress'                                          |
| **listenerFunc** | [DownloadBundleProgressListener](#downloadbundleprogresslistener) |

**Returns:** `any`

**Since:** 0.1.0

---

### addListener('nextBundleSet', ...)[¶](#addlistenernextbundleset "Permanent link")

`[](#%5F%5Fcodelineno-35-1)addListener(eventName: 'nextBundleSet', listenerFunc: NextBundleSetListener) => any
`

Listen for when a bundle is set as the next bundle.

This event is triggered whenever a bundle is set to be used on the next app restart, either through automatic updates or manual calls to `setNextBundle()`.

| Param            | Type                                            |
| ---------------- | ----------------------------------------------- |
| **eventName**    | 'nextBundleSet'                                 |
| **listenerFunc** | [NextBundleSetListener](#nextbundlesetlistener) |

**Returns:** `any`

**Since:** 0.1.0

---

### removeAllListeners()[¶](#removealllisteners "Permanent link")

`[](#%5F%5Fcodelineno-36-1)removeAllListeners() => any
`

Remove all listeners for this plugin.

**Returns:** `any`

**Since:** 0.1.0

---

### Interfaces[¶](#interfaces "Permanent link")

#### DeleteBundleOptions[¶](#deletebundleoptions "Permanent link")

| Prop         | Type   | Description                                    | Since |
| ------------ | ------ | ---------------------------------------------- | ----- |
| **bundleId** | string | The unique identifier of the bundle to delete. | 0.1.0 |

#### DownloadBundleOptions[¶](#downloadbundleoptions "Permanent link")

| Prop             | Type                | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | Default | Since |
| ---------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- |
| **artifactType** | 'manifest' \| 'zip' | The artifact type of the bundle.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 'zip'   | 0.1.0 |
| **bundleId**     | string              | The unique identifier of the bundle. **Attention**: The value public is reserved and cannot be used as a bundle identifier.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 0.1.0   |       |
| **checksum**     | string              | The checksum of the self-hosted bundle as a SHA-256 hash in hex format to verify the integrity of the bundle. **Attention**: Only supported for the zip artifact type.                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 0.1.0   |       |
| **signature**    | string              | The signature of the self-hosted bundle as a signed SHA-256 hash in base64 format to verify the integrity of the bundle. **Attention**: Only supported for the zip artifact type.                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 0.1.0   |       |
| **url**          | string              | The URL of the bundle to download. For the zip artifact type, the URL must point to a ZIP file. For the manifest artifact type, the URL serves as the base URL to download the individual files. For example, if the URL is https://example.com/download, the plugin will download the file with the href index.html from https://example.com/download?href=index.html. To **verify the integrity** of the file, the server should return a X-Checksum header with the SHA-256 hash in hex format. To **verify the signature** of the file, the server should return a X-Signature header with the signed SHA-256 hash in base64 format. | 0.1.0   |       |

#### FetchChannelsOptions[¶](#fetchchannelsoptions "Permanent link")

| Prop       | Type   | Description                               | Default | Since |
| ---------- | ------ | ----------------------------------------- | ------- | ----- |
| **limit**  | number | The maximum number of channels to return. | 50      | 0.1.0 |
| **offset** | number | The number of channels to skip.           | 0       | 0.1.0 |
| **query**  | string | The query to filter channels by name.     | 0.1.0   |       |

#### FetchChannelsResult[¶](#fetchchannelsresult "Permanent link")

| Prop         | Type | Description           | Since |
| ------------ | ---- | --------------------- | ----- |
| **channels** | {}   | The list of channels. | 0.1.0 |

#### Channel[¶](#channel%5F2 "Permanent link")

| Prop     | Type   | Description                           | Since |
| -------- | ------ | ------------------------------------- | ----- |
| **id**   | string | The unique identifier of the channel. | 0.1.0 |
| **name** | string | The name of the channel.              | 0.1.0 |

#### FetchLatestBundleOptions[¶](#fetchlatestbundleoptions "Permanent link")

| Prop        | Type   | Description                                                      | Since |
| ----------- | ------ | ---------------------------------------------------------------- | ----- |
| **channel** | string | The name of the channel where the latest bundle is fetched from. | 0.1.0 |

#### FetchLatestBundleResult[¶](#fetchlatestbundleresult "Permanent link")

| Prop                 | Type                         | Description                                                                                                                                                                                  | Since |
| -------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **artifactType**     | 'manifest' \| 'zip'          | The artifact type of the bundle.                                                                                                                                                             | 0.1.0 |
| **bundleId**         | string \| null               | The unique identifier of the latest bundle. On Capawesome Cloud, this is the ID of the app build artifact. If null, no bundle is available.                                                  | 0.1.0 |
| **checksum**         | string                       | The checksum of the latest bundle if the bundle is self-hosted. If the bundle is hosted on Capawesome Cloud, the checksum will be returned as response header when downloading the bundle.   | 0.1.0 |
| **customProperties** | { \[key: string\]: string; } | Custom properties that are associated with the latest bundle.                                                                                                                                | 0.1.0 |
| **downloadUrl**      | string                       | The URL of the latest bundle to download. Pass this URL to the downloadBundle(...) method to download the bundle.                                                                            | 0.1.0 |
| **signature**        | string                       | The signature of the latest bundle if the bundle is self-hosted. If the bundle is hosted on Capawesome Cloud, the signature will be returned as response header when downloading the bundle. | 0.1.0 |

#### GetBlockedBundlesResult[¶](#getblockedbundlesresult "Permanent link")

| Prop          | Type | Description                                            | Since |
| ------------- | ---- | ------------------------------------------------------ | ----- |
| **bundleIds** | {}   | An array of unique identifiers of all blocked bundles. | 0.1.0 |

#### GetBundlesResult[¶](#getbundlesresult "Permanent link")

| Prop          | Type | Description                                              | Since |
| ------------- | ---- | -------------------------------------------------------- | ----- |
| **bundleIds** | {}   | An array of unique identifiers of all available bundles. | 0.1.0 |

#### GetChannelResult[¶](#getchannelresult "Permanent link")

| Prop        | Type           | Description                                                      | Since |
| ----------- | -------------- | ---------------------------------------------------------------- | ----- |
| **channel** | string \| null | The channel name. If null, the app is using the default channel. | 0.1.0 |

#### GetConfigResult[¶](#getconfigresult "Permanent link")

| Prop                   | Type                   | Description                                                            | Since |
| ---------------------- | ---------------------- | ---------------------------------------------------------------------- | ----- |
| **appId**              | string \| null         | The app ID used to identify the app. If null, no app ID is configured. | 0.1.0 |
| **autoUpdateStrategy** | 'none' \| 'background' | The auto-update strategy for live updates.                             | 0.1.0 |

#### GetDownloadedBundlesResult[¶](#getdownloadedbundlesresult "Permanent link")

| Prop          | Type | Description                                               | Since |
| ------------- | ---- | --------------------------------------------------------- | ----- |
| **bundleIds** | {}   | An array of unique identifiers of all downloaded bundles. | 0.1.0 |

#### GetCurrentBundleResult[¶](#getcurrentbundleresult "Permanent link")

| Prop         | Type           | Description                                                                             | Since |
| ------------ | -------------- | --------------------------------------------------------------------------------------- | ----- |
| **bundleId** | string \| null | The unique identifier of the current bundle. If null, the default bundle is being used. | 0.1.0 |

#### GetCustomIdResult[¶](#getcustomidresult "Permanent link")

| Prop         | Type           | Description                                                                | Since |
| ------------ | -------------- | -------------------------------------------------------------------------- | ----- |
| **customId** | string \| null | The custom identifier of the device. If null, no custom identifier is set. | 0.1.0 |

#### GetDeviceIdResult[¶](#getdeviceidresult "Permanent link")

| Prop         | Type   | Description                                                                                                                                                                                                                                                                  | Since |
| ------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **deviceId** | string | The unique identifier of the device. On iOS, [identifierForVendor](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor) is used. The value of this property is the same for apps that come from the same vendor running on the same device. | 0.1.0 |

#### IsSyncingResult[¶](#issyncingresult "Permanent link")

| Prop        | Type    | Description                                        | Since |
| ----------- | ------- | -------------------------------------------------- | ----- |
| **syncing** | boolean | Whether a sync operation is currently in progress. | 0.1.0 |

#### GetNextBundleResult[¶](#getnextbundleresult "Permanent link")

| Prop         | Type           | Description                                                                          | Since |
| ------------ | -------------- | ------------------------------------------------------------------------------------ | ----- |
| **bundleId** | string \| null | The unique identifier of the next bundle. If null, the default bundle is being used. | 0.1.0 |

#### GetVersionCodeResult[¶](#getversioncoderesult "Permanent link")

| Prop            | Type   | Description                                                                                                                                              | Since |
| --------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **versionCode** | string | The version code of the app. On **Android**, this is the versionCode from PackageInfo. On **iOS**, this is the CFBundleVersion from the Info.plist file. | 0.1.0 |

#### GetVersionNameResult[¶](#getversionnameresult "Permanent link")

| Prop            | Type   | Description                                                                                                                                                         | Since |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **versionName** | string | The version name of the app. On **Android**, this is the versionName from PackageInfo. On **iOS**, this is the CFBundleShortVersionString from the Info.plist file. | 0.1.0 |

#### ReadyResult[¶](#readyresult "Permanent link")

| Prop                 | Type           | Description                                                                           | Since |
| -------------------- | -------------- | ------------------------------------------------------------------------------------- | ----- |
| **previousBundleId** | string \| null | The identifier of the previous bundle used. If null, the default bundle was used.     | 0.1.0 |
| **currentBundleId**  | string \| null | The identifier of the current bundle used. If null, the default bundle is being used. | 0.1.0 |
| **rollback**         | boolean        | Whether or not the app was reset to the default bundle.                               | 0.1.0 |

#### SetChannelOptions[¶](#setchanneloptions "Permanent link")

| Prop        | Type           | Description                                       | Since |
| ----------- | -------------- | ------------------------------------------------- | ----- |
| **channel** | string \| null | The channel name. Set null to remove the channel. | 0.1.0 |

#### SetConfigOptions[¶](#setconfigoptions "Permanent link")

| Prop      | Type           | Description                                                                                                    | Since |
| --------- | -------------- | -------------------------------------------------------------------------------------------------------------- | ----- |
| **appId** | string \| null | The app ID used to identify the app. Set null to reset to the value from the APP\_ID preference in config.xml. | 0.1.0 |

#### SetCustomIdOptions[¶](#setcustomidoptions "Permanent link")

| Prop         | Type           | Description                                                                    | Since |
| ------------ | -------------- | ------------------------------------------------------------------------------ | ----- |
| **customId** | string \| null | The custom identifier of the device. Set null to remove the custom identifier. | 0.1.0 |

#### SetNextBundleOptions[¶](#setnextbundleoptions "Permanent link")

| Prop         | Type           | Description                                                                                               | Since |
| ------------ | -------------- | --------------------------------------------------------------------------------------------------------- | ----- |
| **bundleId** | string \| null | The unique identifier of the bundle to use. Set null to use the default bundle (same as calling reset()). | 0.1.0 |

#### SyncOptions[¶](#syncoptions "Permanent link")

| Prop        | Type   | Description                                                      | Since |
| ----------- | ------ | ---------------------------------------------------------------- | ----- |
| **channel** | string | The name of the channel where the latest bundle is fetched from. | 0.1.0 |

#### SyncResult[¶](#syncresult "Permanent link")

| Prop             | Type           | Description                                                                                              | Since |
| ---------------- | -------------- | -------------------------------------------------------------------------------------------------------- | ----- |
| **nextBundleId** | string \| null | The identifier of the next bundle to use. If null, the app is up-to-date and no new bundle is available. | 0.1.0 |

#### DownloadBundleProgressEvent[¶](#downloadbundleprogressevent "Permanent link")

Event that is triggered when the download progress of a bundle changes.

| Prop                | Type   | Description                                                         | Since |
| ------------------- | ------ | ------------------------------------------------------------------- | ----- |
| **bundleId**        | string | The unique identifier of the bundle that is being downloaded.       | 0.1.0 |
| **downloadedBytes** | number | The number of bytes that have been downloaded.                      | 0.1.0 |
| **progress**        | number | The progress of the download in percent as a value between 0 and 1. | 0.1.0 |
| **totalBytes**      | number | The total number of bytes to download.                              | 0.1.0 |

#### PluginListenerHandle[¶](#pluginlistenerhandle "Permanent link")

Handle returned from `addListener(...)`. Call `remove()` to detach the listener.

| Prop       | Type      |
| ---------- | --------- |
| **remove** | () => any |

#### NextBundleSetEvent[¶](#nextbundlesetevent "Permanent link")

Event that is triggered when a bundle is set as the next bundle.

| Prop         | Type           | Description                                                                                                   | Since |
| ------------ | -------------- | ------------------------------------------------------------------------------------------------------------- | ----- |
| **bundleId** | string \| null | The unique identifier of the bundle that is set as the next bundle. If null, the default bundle will be used. | 0.1.0 |

### Type Aliases[¶](#type-aliases "Permanent link")

#### DownloadBundleProgressListener[¶](#downloadbundleprogresslistener "Permanent link")

Listener for the download progress of a bundle.

`(event: [DownloadBundleProgressEvent](#downloadbundleprogressevent)): void`

#### NextBundleSetListener[¶](#nextbundlesetlistener "Permanent link")

Listener for when a bundle is set as the next bundle.

`(event: [NextBundleSetEvent](#nextbundlesetevent)): void`

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/cordova-live-update/blob/main/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/cordova-live-update/blob/main/LICENSE).

June 8, 2026 

 Back to top 