---
description: A complete tour of the Capacitor Live Update plugin API — every method, event, and config option, with code samples for each.
title: Exploring the Capacitor Live Update API - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/exploring-the-capacitor-live-update-api.png
---

[ Skip to content](#exploring-the-capacitor-live-update-api) 

[ 🔐 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/)
* [  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

* [  Best Practices ](#best-practices)
* [  Next steps ](#next-steps)
* [  Conclusion ](#conclusion)

* Related links

# Exploring the Capacitor Live Update API[¶](#exploring-the-capacitor-live-update-api "Permanent link")

This post is a tour of the [Capacitor Live Update plugin](/docs/sdks/capacitor/live-update/) API. We'll walk through every method, event, and configuration option the plugin exposes — what each one does, when to reach for it, and a working code snippet you can copy. The goal is breadth: by the end, you should have a clear map of the entire API surface and know exactly which call to make for any given situation.

If you're new to live updates and want strategy, setup, and a real-world end-to-end example first, start with [Capacitor Live Updates: A Complete Guide to OTA Updates](/blog/capacitor-live-updates-guide/) and come back here when you want the API reference.

## Video Tutorial[¶](#video-tutorial "Permanent link")

This step-by-step walkthrough complements the API reference by showing a full Live Updates setup, first deployment, and practical runtime behavior in a real Capacitor app workflow.

## Prerequisites[¶](#prerequisites "Permanent link")

Before diving into the Capacitor Live Update API, ensure you have a [Capawesome Cloud](/) account. This is essential for managing your live updates and deploying them seamlessly to your applications.

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

To install the Capacitor Live Update plugin, please refer to the [Installation](/docs/sdks/capacitor/live-update/#installation) section in the plugin documentation.

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

Let's explore the core functionality of the Capacitor Live Update API and how to implement seamless OTA updates in your Ionic applications.

### Syncing Updates[¶](#syncing-updates "Permanent link")

The primary method for delivering updates to your application is through the [sync(...)](/docs/sdks/capacitor/live-update/#sync) method. This method checks for available updates and downloads them if necessary:

`[](#%5F%5Fcodelineno-0-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const syncUpdate = async () => {
[](#%5F%5Fcodelineno-0-4)  const result = await LiveUpdate.sync({
[](#%5F%5Fcodelineno-0-5)    channel: 'production-5'
[](#%5F%5Fcodelineno-0-6)  });
[](#%5F%5Fcodelineno-0-7)  if (result.nextBundleId) {
[](#%5F%5Fcodelineno-0-8)    console.log('New bundle downloaded:', result.nextBundleId);
[](#%5F%5Fcodelineno-0-9)    // Restart the app to apply the update
[](#%5F%5Fcodelineno-0-10)    await LiveUpdate.reload();
[](#%5F%5Fcodelineno-0-11)  } else {
[](#%5F%5Fcodelineno-0-12)    console.log('No updates available');
[](#%5F%5Fcodelineno-0-13)  }
[](#%5F%5Fcodelineno-0-14)};
`

The `sync(...)` method is designed to be non-blocking and will only download updates when they are available. It returns information about the next bundle ID that will be applied, allowing you to control when and how updates are implemented in your application. If you just want to check for updates without downloading them, you can use the [fetchLatestBundle(...)](/docs/sdks/capacitor/live-update/#fetchlatestbundle) method:

`[](#%5F%5Fcodelineno-1-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-1-2)
[](#%5F%5Fcodelineno-1-3)const checkForUpdates = async () => {
[](#%5F%5Fcodelineno-1-4)  const result = await LiveUpdate.fetchLatestBundle({
[](#%5F%5Fcodelineno-1-5)    channel: 'production-5'
[](#%5F%5Fcodelineno-1-6)  });
[](#%5F%5Fcodelineno-1-7)
[](#%5F%5Fcodelineno-1-8)  if (result.nextBundleId) {
[](#%5F%5Fcodelineno-1-9)    console.log('Latest bundle available:', result.nextBundleId);
[](#%5F%5Fcodelineno-1-10)  } else {
[](#%5F%5Fcodelineno-1-11)    console.log('No updates available');
[](#%5F%5Fcodelineno-1-12)  }
[](#%5F%5Fcodelineno-1-13)};
`

### Managing Update Channels[¶](#managing-update-channels "Permanent link")

Update channels provide a powerful way to manage different versions of your application for different audiences. You can set the current channel using the [setChannel(...)](/docs/sdks/capacitor/live-update/#setchannel) method:

`[](#%5F%5Fcodelineno-2-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-2-2)
[](#%5F%5Fcodelineno-2-3)const setChannel = async () => {
[](#%5F%5Fcodelineno-2-4)  await LiveUpdate.setChannel({
[](#%5F%5Fcodelineno-2-5)    channel: 'production-5'. // Specify the channel name
[](#%5F%5Fcodelineno-2-6)  });
[](#%5F%5Fcodelineno-2-7)};
`

This allows you to deliver different versions of your app to different user groups, such as beta testers receiving experimental features while production users get stable releases. Alternatively, you can pass the channel name as an option to the `sync(...)` or `fetchLatestBundle(...)` methods:

`[](#%5F%5Fcodelineno-3-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const syncWithChannel = async (channelName: string) => {
[](#%5F%5Fcodelineno-3-4)  const result = await LiveUpdate.sync({
[](#%5F%5Fcodelineno-3-5)    channel: channelName
[](#%5F%5Fcodelineno-3-6)  });
[](#%5F%5Fcodelineno-3-7)  // Handle the result as needed
[](#%5F%5Fcodelineno-3-8)};
`

### Retrieving Bundle Information[¶](#retrieving-bundle-information "Permanent link")

To understand what bundles are available and currently active, use the [getBundle(...)](/docs/sdks/capacitor/live-update/#getbundle) method:

`[](#%5F%5Fcodelineno-4-1)const getCurrentBundle = async () => {
[](#%5F%5Fcodelineno-4-2)  const { bundleId } = await LiveUpdate.getCurrentBundle();
[](#%5F%5Fcodelineno-4-3)  console.log('Current bundle ID:', bundleId);
[](#%5F%5Fcodelineno-4-4)  return bundleId;
[](#%5F%5Fcodelineno-4-5)};
`

This method provides detailed information about the currently active bundle, including its ID, version, and status, helping you track which version of your app is running.

### Downloading Updates[¶](#downloading-updates "Permanent link")

For more control over the update process, you can manually download updates using the [downloadBundle(...)](/docs/sdks/capacitor/live-update/#downloadbundle) method. This is useful if you first want to check for updates using the `fetchLatestBundle(...)` method and then decide when to download them:

`[](#%5F%5Fcodelineno-5-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const downloadBundle = async (bundleId: string) => {
[](#%5F%5Fcodelineno-5-4)  await LiveUpdate.downloadBundle({
[](#%5F%5Fcodelineno-5-5)    bundleId: bundleId
[](#%5F%5Fcodelineno-5-6)  });
[](#%5F%5Fcodelineno-5-7)};
`

### Setting Active Bundles[¶](#setting-active-bundles "Permanent link")

Once a bundle is downloaded, you can set it as the next bundle using the [setNextBundle(...)](/docs/sdks/capacitor/live-update/#setnextbundle) method. This way, the bundle will be used the next time the app is restarted:

`[](#%5F%5Fcodelineno-6-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)const setNextBundle = async (bundleId: string) => {
[](#%5F%5Fcodelineno-6-4)  await LiveUpdate.setNextBundle({
[](#%5F%5Fcodelineno-6-5)    bundleId: bundleId
[](#%5F%5Fcodelineno-6-6)  });
[](#%5F%5Fcodelineno-6-7)};
`

If you want to apply the downloaded bundle immediately, you can use the [reload(...)](/docs/sdks/capacitor/live-update/#reload) method:

`[](#%5F%5Fcodelineno-7-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const applyUpdate = async () => {
[](#%5F%5Fcodelineno-7-4)  await LiveUpdate.reload();
[](#%5F%5Fcodelineno-7-5)};
`

### Monitoring Download Progress[¶](#monitoring-download-progress "Permanent link")

For large updates, you can monitor download progress using the [downloadProgress](/docs/sdks/capacitor/live-update/#addlistenerdownloadprogress) event listener:

`` [](#%5F%5Fcodelineno-8-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-8-2)
[](#%5F%5Fcodelineno-8-3)const addDownloadProgressListener = () => {
[](#%5F%5Fcodelineno-8-4)  LiveUpdate.addListener('downloadProgress', (event) => {
[](#%5F%5Fcodelineno-8-5)    console.log(`Download progress: ${event.progress * 100}%`);
[](#%5F%5Fcodelineno-8-6)  });
[](#%5F%5Fcodelineno-8-7)};
 ``

This enables you to provide real-time feedback to users about update downloads, enhancing the user experience during the update process.

### Managing Local Bundles[¶](#managing-local-bundles "Permanent link")

You can retrieve a list of all locally stored bundles using the [getBundles(...)](/docs/sdks/capacitor/live-update/#getbundles) method:

`` [](#%5F%5Fcodelineno-9-1)const listLocalBundles = async () => {
[](#%5F%5Fcodelineno-9-2)  const bundles = await LiveUpdate.getBundles();
[](#%5F%5Fcodelineno-9-3)
[](#%5F%5Fcodelineno-9-4)  bundles.forEach(bundle => {
[](#%5F%5Fcodelineno-9-5)    console.log(`Bundle ID: ${bundle.bundleId}, Status: ${bundle.status}`);
[](#%5F%5Fcodelineno-9-6)  });
[](#%5F%5Fcodelineno-9-7)
[](#%5F%5Fcodelineno-9-8)  return bundles;
[](#%5F%5Fcodelineno-9-9)};
 ``

To clean up storage space, you can delete unused bundles with the [deleteBundle(...)](/docs/sdks/capacitor/live-update/#deletebundle) method:

`` [](#%5F%5Fcodelineno-10-1)const cleanupOldBundles = async (bundleId: string) => {
[](#%5F%5Fcodelineno-10-2)  await LiveUpdate.deleteBundle({
[](#%5F%5Fcodelineno-10-3)    bundleId: bundleId
[](#%5F%5Fcodelineno-10-4)  });
[](#%5F%5Fcodelineno-10-5)
[](#%5F%5Fcodelineno-10-6)  console.log(`Bundle ${bundleId} deleted`);
[](#%5F%5Fcodelineno-10-7)};
 ``

There is also a configuration option called `autoDeleteBundles` to automatically delete old bundles when a new one is applied. Just set it to `true` in your Capacitor configuration file:

`[](#%5F%5Fcodelineno-11-1){
[](#%5F%5Fcodelineno-11-2)  "plugins": {
[](#%5F%5Fcodelineno-11-3)    "LiveUpdate": {
[](#%5F%5Fcodelineno-11-4)      "autoDeleteBundles": true
[](#%5F%5Fcodelineno-11-5)    }
[](#%5F%5Fcodelineno-11-6)  }
[](#%5F%5Fcodelineno-11-7)}
`

## Best Practices[¶](#best-practices "Permanent link")

When implementing live updates with the Capacitor Live Update API, consider these best practices:

1. **Enable Automatic Rollback**: Set the `readyTimeout` option to automatically roll back to the previous bundle if the new one fails to load within a specified time. This ensures a smooth user experience even if an update has issues. Make sure to call the `ready()` method directly at app startup to notify the plugin that no rollback is needed.
2. **Fetch Updates Efficiently**: Do not call the `sync(...)` or `fetchLatestBundle(...)` methods too frequently. Instead, implement a strategy to check for updates periodically or based on user actions, such as app startup or specific user interactions. The very best way is to notify devices about new updates via silent push notifications.
3. **Ask for User Consent**: Before applying updates, consider prompting users to confirm the update, especially for significant changes. This can help manage user expectations and ensure they are aware of the changes being made.

## Next steps[¶](#next-steps "Permanent link")

For deeper rollout and channel management strategies, see [Managing Channels and Rollouts for Live Updates](https://www.youtube.com/watch?v=Hg0ObWno3Zc). For bundle integrity and security, see [Secure Your Live Updates with Code Signing](https://www.youtube.com/watch?v=Z-Qu2f-ODv8).

[Try Capawesome Cloud Free](https://capawesome.io)

## Conclusion[¶](#conclusion "Permanent link")

That's the full surface of the Capacitor Live Update API — `sync()` and `fetchLatestBundle()` to check for new bundles, `downloadBundle()` and `setNextBundle()` for fine-grained control, `reload()` to apply, `ready()` to signal a successful start, plus the listeners and bundle-management helpers around them. Most apps only need `sync()`, `ready()`, and a `nextBundleSet` listener; the rest of the API is there for the cases where you need it.

For the bigger picture — update strategies, versioning, code signing, best practices, and a complete real-world example — see [Capacitor Live Updates: A Complete Guide to OTA Updates](/blog/capacitor-live-updates-guide/). If you have questions or want to share how you're using the plugin, join us in the [Capawesome Discord server](https://discord.gg/VCXxSVjefW) or subscribe to the [Capawesome newsletter](https://capawesome.io/newsletter/) for new posts in your inbox.

June 8, 2026 

 Back to top 