---
description: Choose the right OTA update strategy for your Capacitor app. Compare immediate, on-resume, and background update modes with the Live Update SDK.
title: Update Strategies for Capacitor Live Updates - Capawesome
image: https://capawesome.io/docs/assets/images/social/cloud/live-updates/guides/update-strategies.png
---

[ Skip to content](#update-strategies) 

[ 🎉 Introducing **Capawesome Platform** — one platform for Live Updates, Native Builds, App Store Publishing, and Insider SDKs.](https://capawesome.io) 

* [  Formbricks ](/docs/plugins/formbricks/)
* [  Geocoder ](/docs/plugins/geocoder/)
* [  Google Sign-In ](/docs/plugins/google-sign-in/)
* [  Grafana Faro ](/docs/plugins/grafana-faro/)
* [  libSQL ](/docs/plugins/libsql/)
* [  Live Update ](/docs/plugins/live-update/)
* [  Managed Configurations ](/docs/plugins/managed-configurations/)
* [  Media Session ](/docs/plugins/media-session/)
* [  ML Kit ](/docs/plugins/mlkit/)
* [  Navigation Bar ](/docs/plugins/navigation-bar/)
* [  NFC ](/docs/plugins/nfc/)
* [  OAuth ](/docs/plugins/oauth/)
* [  Pedometer ](/docs/plugins/pedometer/)
* [  Photo Editor ](/docs/plugins/photo-editor/)
* [  PostHog ](/docs/plugins/posthog/)
* [  Printer ](/docs/plugins/printer/)
* [  Purchases ](/docs/plugins/purchases/)
* [  RealtimeKit ](/docs/plugins/realtimekit/)
* [  Screen Orientation ](/docs/plugins/screen-orientation/)
* [  Screenshot ](/docs/plugins/screenshot/)
* [  Secure Preferences ](/docs/plugins/secure-preferences/)
* [  Speech Recognition ](/docs/plugins/speech-recognition/)
* [  Speech Synthesis ](/docs/plugins/speech-synthesis/)
* [  Share Target ](/docs/plugins/share-target/)
* [  Square Mobile Payments ](/docs/plugins/square-mobile-payments/)
* [  SQLite ](/docs/plugins/sqlite/)
* [  Superwall ](/docs/plugins/superwall/)
* [  Torch ](/docs/plugins/torch/)
* [  Wifi ](/docs/plugins/wifi/)
* [  Zip ](/docs/plugins/zip/)
* [  Cloud ](/docs/cloud/)
* [  Live Updates ](/docs/cloud/live-updates/)
* Advanced
* Integrations
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Configuration ](/docs/cloud/native-builds/configuration/)
* [  Environments ](/docs/cloud/native-builds/environments/)
* Guides
* [  Sample Projects ](/docs/cloud/native-builds/sample-projects/)
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  Automations ](/docs/cloud/automations/)
* [  Assist ](/docs/cloud/assist/)
* Account
* Organizations
* [  Organization and User Management ](/docs/cloud/organizations/memberships/)
* [  Single Sign-On (SSO) ](/docs/cloud/organizations/sso/)
* [  Teams ](/docs/cloud/organizations/teams/)
* [  Two-Factor Authentication ](/docs/cloud/organizations/two-factor-authentication/)
* [  Integrations ](/docs/cloud/integrations/)
* [  License Keys ](/docs/cloud/license-keys/)
* [  Webhooks ](/docs/cloud/webhooks/)
* [  Pricing ](https://capawesome.io/pricing/)
* [  FAQ ](/docs/cloud/faq/)
* [  Support ](/docs/cloud/support/)
* [  Contributing ](/docs/contributing/)
* [  LLMs ](/docs/llms/)
* [  Insiders ](/docs/insiders/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/insiders/support/)
* [  FAQ ](/docs/insiders/faq/)
* [  Blog ](/blog/)
* Categories

# Update Strategies[¶](#update-strategies "Permanent link")

There are several ways to implement over-the-air (OTA) updates in your Capacitor app using Capawesome Cloud Live Updates. Each strategy serves different use cases and user experience requirements.

## Background[¶](#background "Permanent link")

The most basic implementation automatically checks for updates in the background. Simply set the `autoUpdateStrategy` configuration option to `background` in your Capacitor configuration file:

capacitor.config.ts

`[](#%5F%5Fcodelineno-0-1)import { CapacitorConfig } from '@capacitor/cli';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const config: CapacitorConfig = {
[](#%5F%5Fcodelineno-0-4)  plugins: {
[](#%5F%5Fcodelineno-0-5)    LiveUpdate: {
[](#%5F%5Fcodelineno-0-6)      autoBlockRolledBackBundles: true, // Recommended
[](#%5F%5Fcodelineno-0-7)      autoUpdateStrategy: 'background',
[](#%5F%5Fcodelineno-0-8)      defaultChannel: 'production-5' // Optional
[](#%5F%5Fcodelineno-0-9)    }
[](#%5F%5Fcodelineno-0-10)  }
[](#%5F%5Fcodelineno-0-11)};
[](#%5F%5Fcodelineno-0-12)
[](#%5F%5Fcodelineno-0-13)export default config;
`

This automatically checks for the latest bundle **at app startup and when the app resumes** (if the last check was **more than 15 minutes ago**), downloads it in the background, and applies it on the next app launch. You can optionally use the `defaultChannel` option to specify which channel to pull updates from. This is equivalent to calling the `sync()` method manually on app start and resume, but without needing to write any code. It's the easiest way to ensure your users receive updates without any interruptions.

Info 

The [autoUpdateStrategy](/docs/plugins/live-update/#configuration) configuration option was **introduced in version 7.3.0** of the Capacitor Live Update plugin. Make sure to update to the latest version to take advantage of this feature.

## Always Latest[¶](#always-latest "Permanent link")

If you want to ensure that your users always have the latest version immediately, you can combine the background update strategy with the [nextBundleSet](/docs/plugins/live-update/#addlistenernextbundleset) event listener to prompt users to apply updates as soon as they're downloaded.

First, enable the background update strategy by setting `autoUpdateStrategy` to `background` in your Capacitor configuration file (see [Background](#background) section). Then, add the `nextBundleSet` listener:

`[](#%5F%5Fcodelineno-1-1)import { LiveUpdate } from "@capawesome/capacitor-live-update";
[](#%5F%5Fcodelineno-1-2)
[](#%5F%5Fcodelineno-1-3)const initializeApp = async () => {
[](#%5F%5Fcodelineno-1-4)  LiveUpdate.addListener('nextBundleSet', async () => {
[](#%5F%5Fcodelineno-1-5)    const shouldReload = confirm('A new update is available. Would you like to install it now?');
[](#%5F%5Fcodelineno-1-6)    if (shouldReload) {
[](#%5F%5Fcodelineno-1-7)      // Reload the webview to apply the update immediately
[](#%5F%5Fcodelineno-1-8)      await LiveUpdate.reload();
[](#%5F%5Fcodelineno-1-9)    }
[](#%5F%5Fcodelineno-1-10)  });
[](#%5F%5Fcodelineno-1-11)};
`

The `nextBundleSet` event fires whenever a new bundle is downloaded and set as the next bundle, allowing you to provide users with the option to apply updates without restarting the app.

Info 

The [autoUpdateStrategy](/docs/plugins/live-update/#configuration) configuration option was **introduced in version 7.3.0** of the Capacitor Live Update plugin. Make sure to update to the latest version to take advantage of this feature.

## Force Update[¶](#force-update "Permanent link")

If you need to ensure that users are always on the latest version when they open the app, you can implement a strategy that forces an update check and reloads the app if a new version is available before the splash screen is hidden.

For this approach, you first need to configure the splash screen to not auto-hide using the [Capacitor Configuration](https://capacitorjs.com/docs/config) file:

TypeScriptJSON

capacitor.config.ts

`[](#%5F%5Fcodelineno-2-1)import { CapacitorConfig } from "@capacitor/cli";
[](#%5F%5Fcodelineno-2-2)
[](#%5F%5Fcodelineno-2-3)const config: CapacitorConfig = {
[](#%5F%5Fcodelineno-2-4)  plugins: {
[](#%5F%5Fcodelineno-2-5)    SplashScreen: {
[](#%5F%5Fcodelineno-2-6)      launchAutoHide: false
[](#%5F%5Fcodelineno-2-7)    }
[](#%5F%5Fcodelineno-2-8)  }
[](#%5F%5Fcodelineno-2-9)};
[](#%5F%5Fcodelineno-2-10)
[](#%5F%5Fcodelineno-2-11)export default config;
`

capacitor.config.json

`[](#%5F%5Fcodelineno-3-1){
[](#%5F%5Fcodelineno-3-2)  "plugins": {
[](#%5F%5Fcodelineno-3-3)    "SplashScreen": {
[](#%5F%5Fcodelineno-3-4)      "launchAutoHide": false
[](#%5F%5Fcodelineno-3-5)    }
[](#%5F%5Fcodelineno-3-6)  }
[](#%5F%5Fcodelineno-3-7)}
`

Then you can implement the force update strategy as follows:

`[](#%5F%5Fcodelineno-4-1)import { SplashScreen } from '@capacitor/splash-screen';
[](#%5F%5Fcodelineno-4-2)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-4-3)
[](#%5F%5Fcodelineno-4-4)const initializeApp = async () => {
[](#%5F%5Fcodelineno-4-5)  const { nextBundleId } = await LiveUpdate.sync();
[](#%5F%5Fcodelineno-4-6)  if (nextBundleId) {
[](#%5F%5Fcodelineno-4-7)    // Reload the webview to apply the update immediately
[](#%5F%5Fcodelineno-4-8)    await LiveUpdate.reload();
[](#%5F%5Fcodelineno-4-9)  } else {
[](#%5F%5Fcodelineno-4-10)    // No update available, hide the splash screen
[](#%5F%5Fcodelineno-4-11)    await SplashScreen.hide();
[](#%5F%5Fcodelineno-4-12)  }
[](#%5F%5Fcodelineno-4-13)};
`

This `initializeApp` function should be called **once at app startup**. It checks for updates and applies them immediately if available. If no updates are found, it hides the splash screen. This ensures that users always have the latest version of the app before they start using it. 

However, keep in mind that forcing updates in this way may lead to a poor user experience since users will have to wait for the update to download and apply before they can interact with the app. This can be a real problem if the update is large or the user's internet connection is slow. It's essential to balance the need for updates with the overall user experience.

Disable Automatic Updates

Since you are manually handling the update process, it is **strongly recommended** to set the [autoUpdateStrategy](/docs/plugins/live-update/#configuration) configuration option to `none` to prevent conflicts with the automatic update mechanism.

## Instant[¶](#instant "Permanent link")

For critical updates that need to be delivered immediately, you can use silent push notifications to trigger updates while users are actively using the app. Silent push notifications deliver data directly to the app without displaying a notification, so no permissions are required.

Here's an example implementation using the [Capacitor Firebase Cloud Messaging](/docs/plugins/firebase/cloud-messaging/) plugin:

`[](#%5F%5Fcodelineno-5-1)import { FirebaseMessaging } from '@capacitor-firebase/messaging';
[](#%5F%5Fcodelineno-5-2)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-5-3)
[](#%5F%5Fcodelineno-5-4)const initializeApp = async () => {
[](#%5F%5Fcodelineno-5-5)  FirebaseMessaging.addListener('notificationReceived', async (notification) => {
[](#%5F%5Fcodelineno-5-6)    if (notification.data?.type === 'live-update') {
[](#%5F%5Fcodelineno-5-7)      const { nextBundleId } = await LiveUpdate.sync();
[](#%5F%5Fcodelineno-5-8)      if (nextBundleId) {
[](#%5F%5Fcodelineno-5-9)        const shouldReload = confirm('A critical update is available. Would you like to install it now?');
[](#%5F%5Fcodelineno-5-10)        if (shouldReload) {
[](#%5F%5Fcodelineno-5-11)          // Reload the webview to apply the update immediately
[](#%5F%5Fcodelineno-5-12)          await LiveUpdate.reload();
[](#%5F%5Fcodelineno-5-13)        }
[](#%5F%5Fcodelineno-5-14)      } else {
[](#%5F%5Fcodelineno-5-15)        // Update already installed or no update available
[](#%5F%5Fcodelineno-5-16)      }
[](#%5F%5Fcodelineno-5-17)    }
[](#%5F%5Fcodelineno-5-18)  });
[](#%5F%5Fcodelineno-5-19)};
`

This strategy requires a push notification service and backend infrastructure to send notifications when new bundles are deployed. This approach is also beneficial if you want to minimize connections to Capawesome Cloud, which can save battery and data transfer.

Disable Automatic Updates

Since you are manually handling the update process, it is **strongly recommended** to set the [autoUpdateStrategy](/docs/plugins/live-update/#configuration) configuration option to `none` to prevent conflicts with the automatic update mechanism.

## Further Reading[¶](#further-reading "Permanent link")

Want to combine live updates with native app store updates for a complete update delivery strategy? Check out [Capacitor App Updates: The Complete Guide](/blog/capacitor-app-update-guide/).

May 16, 2026 

 Back to top 