---
description: Set up Capawesome Cloud Live Updates in your Capacitor or Cordova app. Install the SDK, configure updates, and ship over-the-air updates in minutes.
title: Getting Started with Live Updates - Capawesome
image: https://capawesome.io/docs/assets/images/social/cloud/live-updates/setup.png
---

[ Skip to content](#getting-started) 

[ 🔐 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/)
* [  Make Updates Version-Compatible ](#make-updates-version-compatible)
* [  Next Steps ](#next-steps)
* [  Bonus: Video Walkthrough ](#bonus-video-walkthrough)
* Guides
* [  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, Yarn, or bun ](/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

* [  Make Updates Version-Compatible ](#make-updates-version-compatible)
* [  Next Steps ](#next-steps)
* [  Bonus: Video Walkthrough ](#bonus-video-walkthrough)

# Getting Started[¶](#getting-started "Permanent link")

In this guide, you will set up Capawesome Cloud Live Updates in your app and ship your first over-the-air update. The Live Update SDK is available for both **Capacitor** and **Cordova** with full API parity — use the runtime tabs throughout this guide to follow along with your framework.

Prefer to learn from a working example?

Clone a ready-to-run demo app with Live Updates already wired up:

* [Capacitor Live Update demo](https://github.com/capawesome-team/capacitor-live-update-demo)
* [Cordova Live Update demo](https://github.com/capawesome-team/cordova-live-update-demo)

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

Before you begin, ensure you have:

* A [Capawesome Cloud](https://console.cloud.capawesome.io) account and organization.
* A Capacitor or Cordova app project on your local machine.
* The latest version of the [Capawesome CLI](/docs/cloud/cli/) installed and [authenticated](/docs/cloud/cli/authentication/).

## AI-Assisted Setup (Recommended)[¶](#ai-assisted-setup-recommended "Permanent link")

The fastest way to get started is with an AI coding assistant. First, add the [Capawesome skills](https://github.com/capawesome-team/skills) to your project:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capawesome-cloud
`

Then use the following prompt in your preferred AI tool (e.g. [Claude Code](https://www.anthropic.com/claude-code), [Cursor](https://www.cursor.com/), or [GitHub Copilot](https://github.com/features/copilot)):

`` [](#%5F%5Fcodelineno-1-1)Use the `capawesome-cloud` skill from `capawesome-team/skills` to help me set up Live Updates in my project.
 ``

The assistant will create an app in Capawesome Cloud, install and configure the SDK, publish your first update, and verify that everything works. Once complete, continue with [Next Steps](#next-steps).

## Manual Setup[¶](#manual-setup "Permanent link")

If you prefer to set things up manually, follow the steps below.

### Step 1: Create an App[¶](#step-1-create-an-app "Permanent link")

To identify your app to Capawesome Cloud, first create an app. If you already have one, **skip to Step 2**.

CLIConsole

Use the [apps:create](/docs/cloud/cli/commands/#appscreate) command:

`[](#%5F%5Fcodelineno-2-1)npx @capawesome/cli apps:create
`

You will be prompted to select an organization and provide a name. The CLI then creates the app and prints the app ID.

Open the [Capawesome Cloud Console](https://console.cloud.capawesome.io/organizations/%5F/apps), select your organization, and click **Create App**. Provide a name and click **Create**.

Copy the app ID — you will need it in the next step.

### Step 2: Install the SDK[¶](#step-2-install-the-sdk "Permanent link")

Install the Live Update SDK in your project.

CapacitorCordova

`[](#%5F%5Fcodelineno-3-1)npm install @capawesome/capacitor-live-update
[](#%5F%5Fcodelineno-3-2)npx cap sync
`

Older Capacitor versions

For **Capacitor 7**, use `@capawesome/capacitor-live-update@v7-lts`. For **Capacitor 6**, use `@capawesome/capacitor-live-update@v6-lts`.

`[](#%5F%5Fcodelineno-4-1)cordova plugin add @capawesome/cordova-live-update --variable APP_ID=00000000-0000-0000-0000-000000000000
`

Replace the `APP_ID` value with the app ID from Step 1.

WebView scheme

The plugin requires the default custom WebView scheme. It does not work if your app sets `Scheme=file` or `AndroidInsecureFileModeEnabled=true`.

### Step 3: Configure the SDK[¶](#step-3-configure-the-sdk "Permanent link")

Configure the SDK with your app ID and the recommended settings. The `autoUpdateStrategy: background` option checks for updates on app start and resume, downloads them in the background, and applies them on the next launch — no extra code required. The `readyTimeout` and `autoBlockRolledBackBundles` options enable [automatic rollback](/docs/cloud/live-updates/rollbacks/) of a broken update.

CapacitorCordova

capacitor.config.ts

`[](#%5F%5Fcodelineno-5-1)import { CapacitorConfig } from "@capacitor/cli";
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const config: CapacitorConfig = {
[](#%5F%5Fcodelineno-5-4)  plugins: {
[](#%5F%5Fcodelineno-5-5)    LiveUpdate: {
[](#%5F%5Fcodelineno-5-6)      appId: "00000000-0000-0000-0000-000000000000",
[](#%5F%5Fcodelineno-5-7)      autoUpdateStrategy: "background",
[](#%5F%5Fcodelineno-5-8)      autoBlockRolledBackBundles: true,
[](#%5F%5Fcodelineno-5-9)      readyTimeout: 10000
[](#%5F%5Fcodelineno-5-10)    }
[](#%5F%5Fcodelineno-5-11)  }
[](#%5F%5Fcodelineno-5-12)};
[](#%5F%5Fcodelineno-5-13)
[](#%5F%5Fcodelineno-5-14)export default config;
`

Apply the configuration:

`[](#%5F%5Fcodelineno-6-1)npx cap sync
`

Configure the plugin via preferences in your `config.xml`:

config.xml

`[](#%5F%5Fcodelineno-7-1)<preference name="APP_ID" value="00000000-0000-0000-0000-000000000000" />
[](#%5F%5Fcodelineno-7-2)<preference name="AUTO_UPDATE_STRATEGY" value="background" />
[](#%5F%5Fcodelineno-7-3)<preference name="AUTO_BLOCK_ROLLED_BACK_BUNDLES" value="true" />
[](#%5F%5Fcodelineno-7-4)<preference name="READY_TIMEOUT" value="10000" />
`

Cordova only reads these preferences when a platform is added, so changes to them don't take effect until you remove and re-add the affected platforms:

`[](#%5F%5Fcodelineno-8-1)cordova platform rm android ios
[](#%5F%5Fcodelineno-8-2)cordova platform add android ios
`

For automatic rollback to work, call `ready()` as early as possible at app start to signal that the new bundle started successfully:

CapacitorCordova

`[](#%5F%5Fcodelineno-9-1)import { LiveUpdate } from "@capawesome/capacitor-live-update";
[](#%5F%5Fcodelineno-9-2)
[](#%5F%5Fcodelineno-9-3)await LiveUpdate.ready();
`

`[](#%5F%5Fcodelineno-10-1)document.addEventListener("deviceready", async () => {
[](#%5F%5Fcodelineno-10-2)  await cordova.plugins.LiveUpdate.ready();
[](#%5F%5Fcodelineno-10-3)});
`

### Step 4: Publish Your First Update[¶](#step-4-publish-your-first-update "Permanent link")

Build your web assets, then upload them as a Live Update bundle with the CLI (the same command for both runtimes):

`[](#%5F%5Fcodelineno-11-1)npm run build
[](#%5F%5Fcodelineno-11-2)npx @capawesome/cli apps:liveupdates:upload
`

You will be prompted for the path to your web assets directory (e.g. `www` or `dist`) and the target app. After the upload completes, the bundle is available to your users. Open the [Deployments](https://console.cloud.capawesome.io/apps/%5F/deployments) page in the Console to see the details.

### Step 5: Test Your Setup[¶](#step-5-test-your-setup "Permanent link")

Make a small visible change to your web assets, rebuild, and upload a new bundle with the same command. Then force-close and restart your app.

Force an update check

With an `autoUpdateStrategy`, updates are only checked on resume if the last check was more than 15 minutes ago. During development, **force-close and restart the app** to trigger a check immediately.

Wait around 15–30 seconds, then restart again to see the change take effect. 🎉

Not seeing the update? Head over to [Troubleshooting](/docs/cloud/live-updates/troubleshooting/) — it walks through the most common reasons an update doesn't reach the device and how to fix them.

## Make Updates Version-Compatible[¶](#make-updates-version-compatible "Permanent link")

Do this before shipping to production

A Live Update can only change your **web layer** — it must stay compatible with the **native binary** already installed on the device. Shipping a bundle that relies on a native feature an older app version doesn't have will **crash the app on launch**. See [Binary-Compatible Changes](/docs/cloud/live-updates/binary-compatible-changes/) for the full rules.

The safest way to prevent this is **versioned channels**: pin each native release to its own channel so a bundle only ever reaches compatible devices. Configure the channel natively at build time, derived from your version code.

CapacitorCordova

On Android, add a resource value in `android/app/build.gradle`:

android/app/build.gradle

`[](#%5F%5Fcodelineno-12-1)android {
[](#%5F%5Fcodelineno-12-2)    defaultConfig {
[](#%5F%5Fcodelineno-12-3)        resValue "string", "capawesome_live_update_default_channel",
[](#%5F%5Fcodelineno-12-4)                 "production-" + defaultConfig.versionCode
[](#%5F%5Fcodelineno-12-5)    }
[](#%5F%5Fcodelineno-12-6)}
`

On iOS, add a key to `ios/App/App/Info.plist`:

ios/App/App/Info.plist

`[](#%5F%5Fcodelineno-13-1)<key>CapawesomeLiveUpdateDefaultChannel</key>
[](#%5F%5Fcodelineno-13-2)<string>production-$(CURRENT_PROJECT_VERSION)</string>
`

On Android, set the channel via a `build-extras.gradle` file included through your `config.xml`:

build-extras.gradle

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

On iOS, add the channel key to your `Info.plist` via `config.xml`:

config.xml

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

Every native release now ships pinned to its own channel, and uploads to `production-<version>` only reach matching devices. See [Manage Channels](/docs/cloud/live-updates/channels/) for alternatives, such as selecting the channel at runtime.

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

* **Publish an Update**  
---  
The recurring workflow for shipping updates to your users.  
[ Publish an update](/docs/cloud/live-updates/publish/)
* **Sign Your Bundles**  
---  
Add code signing so only you can publish updates to your app.  
[ Sign your bundles](/docs/cloud/live-updates/code-signing/)

## Bonus: Video Walkthrough[¶](#bonus-video-walkthrough "Permanent link")

Prefer to watch the setup end-to-end? This walkthrough covers the first deployment, channel setup, and runtime behavior in a real project:

June 15, 2026 

 Back to top 