---
description: Capacitor plugin that allows you to check for app updates and prompt users to update the app on Android and iOS.
title: Capacitor App Update Plugin for Android & iOS - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/app-update.png
---

<!doctype html> 

[Skip to content ](#capacitor-app-update-plugin) 

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

* [ SDKs ](/docs/sdks/)
* [ Configuration ](#configuration)
* [ Demo ](#demo)
* [ Usage ](#usage)
* [ API ](#api)
* [ Enums ](#enums)
* [ Test with internal app-sharing ](#test-with-internal-app-sharing)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ Credits ](#credits)
* [ Apple Sign-In ](/docs/sdks/capacitor/apple-sign-in/)
* [ Asset Manager ](/docs/sdks/capacitor/asset-manager/)
* [ Audio Player ](/docs/sdks/capacitor/audio-player/)
* [ Audio Recorder ](/docs/sdks/capacitor/audio-recorder/)
* [ Audio Session ](/docs/sdks/capacitor/audio-session/)
* [ Background Task ](/docs/sdks/capacitor/background-task/)
* [ Badge ](/docs/sdks/capacitor/badge/)
* [ Barometer ](/docs/sdks/capacitor/barometer/)
* [ Battery ](/docs/sdks/capacitor/battery/)
* [ Biometrics ](/docs/sdks/capacitor/biometrics/)
* [ Bluetooth Low Energy ](/docs/sdks/capacitor/bluetooth-low-energy/)
* [ Clipboard ](/docs/sdks/capacitor/clipboard/)
* [ Cloudinary ](/docs/sdks/capacitor/cloudinary/)
* [ Compass ](/docs/sdks/capacitor/compass/)
* [ Contacts ](/docs/sdks/capacitor/contacts/)
* [ Datetime Picker ](/docs/sdks/capacitor/datetime-picker/)
* [ Device Info ](/docs/sdks/capacitor/device-info/)
* [ Dialog ](/docs/sdks/capacitor/dialog/)
* [ Exif ](/docs/sdks/capacitor/exif/)
* [ Facebook Sign-In ](/docs/sdks/capacitor/facebook-sign-in/)
* [ File Compressor ](/docs/sdks/capacitor/file-compressor/)
* [ File Opener ](/docs/sdks/capacitor/file-opener/)
* [ File Picker ](/docs/sdks/capacitor/file-picker/)
* [ Firebase ](/docs/sdks/capacitor/firebase/)
* [ 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/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ 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/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ 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, 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

* [ Configuration ](#configuration)
* [ Demo ](#demo)
* [ Usage ](#usage)
* [ API ](#api)
* [ Enums ](#enums)
* [ Test with internal app-sharing ](#test-with-internal-app-sharing)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ Credits ](#credits)

# Capacitor App Update Plugin[¶](#capacitor-app-update-plugin "Permanent link")

Capacitor plugin that assists with native app updates. It supports retrieving app update information on **Android** and **iOS** and supports [in-app updates](https://developer.android.com/guide/playcore/in-app-updates) on **Android**.

> Check out the [Capacitor Live Update](https://capawesome.io/docs/sdks/capacitor/live-update/) plugin to update your app remotely in real-time without submitting a new version to the app store. 🚀

[ ![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")

The Capacitor App Update plugin is one of the most complete native app update solutions for Capacitor apps. Here are some of the key features:

* 🖥️ **Cross-platform**: Supports Android and iOS.
* 📱 **App update information**: Retrieves current and available app versions.
* ⚡ **Immediate in-app updates**: Performs immediate updates on Android.
* 📲 **Flexible in-app updates**: Supports flexible update flows on Android.
* 📈 **Update priority**: Supports update priority levels on Android.
* 🏪 **App store navigation**: Opens the app store entry for manual updates.
* 📊 **Update state tracking**: Monitors flexible update progress with listeners.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Use Cases[¶](#use-cases "Permanent link")

The App Update plugin is typically used to make sure users are running a recent version of your app, for example:

* **Force updates**: Perform an immediate in-app update on Android when a critical new version must be installed before the app can be used.
* **Optional update prompts**: Start a flexible in-app update on Android that downloads in the background and track its progress with the state change listener.
* **Version checks**: Compare the current app version with the version available in the Play Store or App Store to decide whether to inform the user.
* **Store redirects**: Open the app's Play Store or App Store entry so the user can update the app manually, for example on iOS where in-app updates are not available.

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

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 8.x.x          | \>=8.x.x          | Active support |
| 7.x.x          | 7.x.x             | Deprecated     |
| 6.x.x          | 6.x.x             | Deprecated     |
| 5.x.x          | 5.x.x             | Deprecated     |

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

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

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

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-app-update` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

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

### Android Variables[¶](#android-variables "Permanent link")

If needed, you can define the following project variable in your app’s `variables.gradle` file to change the default version of the dependency:

* `$androidPlayAppUpdateVersion` version of `com.google.android.play:app-update` (default: `2.1.0`)
* `$androidPlayServicesBaseVersion` version of `com.google.android.gms:play-services-base` (default: `18.9.0`)

This can be useful if you encounter dependency conflicts with other plugins in your project.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

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

A working example can be found here: [robingenz/capacitor-plugin-demo](https://github.com/robingenz/capacitor-plugin-demo)

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

The following examples show how to get app update information, open the app store entry, and perform immediate and flexible in-app updates.

### Get app update information[¶](#get-app-update-information "Permanent link")

Use `getAppUpdateInfo()` to retrieve the current and available app versions. On Android, versions are identified by the version code; on iOS, by the version name. Only available on Android and iOS:

`[](#%5F%5Fcodelineno-3-1)import { AppUpdate } from '@capawesome/capacitor-app-update';
[](#%5F%5Fcodelineno-3-2)import { Capacitor } from '@capacitor/core';
[](#%5F%5Fcodelineno-3-3)
[](#%5F%5Fcodelineno-3-4)const getCurrentAppVersion = async () => {
[](#%5F%5Fcodelineno-3-5)  const result = await AppUpdate.getAppUpdateInfo();
[](#%5F%5Fcodelineno-3-6)  if (Capacitor.getPlatform() === 'android') {
[](#%5F%5Fcodelineno-3-7)    return result.currentVersionCode;
[](#%5F%5Fcodelineno-3-8)  } else {
[](#%5F%5Fcodelineno-3-9)    return result.currentVersionName;
[](#%5F%5Fcodelineno-3-10)  }
[](#%5F%5Fcodelineno-3-11)};
[](#%5F%5Fcodelineno-3-12)
[](#%5F%5Fcodelineno-3-13)const getAvailableAppVersion = async () => {
[](#%5F%5Fcodelineno-3-14)  const result = await AppUpdate.getAppUpdateInfo();
[](#%5F%5Fcodelineno-3-15)  if (Capacitor.getPlatform() === 'android') {
[](#%5F%5Fcodelineno-3-16)    return result.availableVersionCode;
[](#%5F%5Fcodelineno-3-17)  } else {
[](#%5F%5Fcodelineno-3-18)    return result.availableVersionName;
[](#%5F%5Fcodelineno-3-19)  }
[](#%5F%5Fcodelineno-3-20)};
`

### Open the app store entry[¶](#open-the-app-store-entry "Permanent link")

Open the app's page in the Play Store (Android) or App Store (iOS) so the user can update the app manually. Only available on Android and iOS:

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

### Perform an immediate update[¶](#perform-an-immediate-update "Permanent link")

Perform an immediate in-app update if an update is available and an immediate update is allowed. Only available on Android:

`[](#%5F%5Fcodelineno-5-1)import { AppUpdate, AppUpdateAvailability } from '@capawesome/capacitor-app-update';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const performImmediateUpdate = async () => {
[](#%5F%5Fcodelineno-5-4)  const result = await AppUpdate.getAppUpdateInfo();
[](#%5F%5Fcodelineno-5-5)  if (result.updateAvailability !== AppUpdateAvailability.UPDATE_AVAILABLE) {
[](#%5F%5Fcodelineno-5-6)    return;
[](#%5F%5Fcodelineno-5-7)  }
[](#%5F%5Fcodelineno-5-8)  if (result.immediateUpdateAllowed) {
[](#%5F%5Fcodelineno-5-9)    await AppUpdate.performImmediateUpdate();
[](#%5F%5Fcodelineno-5-10)  }
[](#%5F%5Fcodelineno-5-11)};
`

### Start a flexible update[¶](#start-a-flexible-update "Permanent link")

Start a flexible in-app update if an update is available and a flexible update is allowed. You can monitor the download progress with the `onFlexibleUpdateStateChange` listener. Only available on Android:

`[](#%5F%5Fcodelineno-6-1)import { AppUpdate, AppUpdateAvailability } from '@capawesome/capacitor-app-update';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)const startFlexibleUpdate = async () => {
[](#%5F%5Fcodelineno-6-4)  const result = await AppUpdate.getAppUpdateInfo();
[](#%5F%5Fcodelineno-6-5)  if (result.updateAvailability !== AppUpdateAvailability.UPDATE_AVAILABLE) {
[](#%5F%5Fcodelineno-6-6)    return;
[](#%5F%5Fcodelineno-6-7)  }
[](#%5F%5Fcodelineno-6-8)  if (result.flexibleUpdateAllowed) {
[](#%5F%5Fcodelineno-6-9)    await AppUpdate.startFlexibleUpdate();
[](#%5F%5Fcodelineno-6-10)  }
[](#%5F%5Fcodelineno-6-11)};
`

### Complete a flexible update[¶](#complete-a-flexible-update "Permanent link")

Complete a flexible in-app update by restarting the app. Only available on Android:

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

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

* [getAppUpdateInfo(...)](#getappupdateinfo)
* [openAppStore(...)](#openappstore)
* [performImmediateUpdate()](#performimmediateupdate)
* [startFlexibleUpdate()](#startflexibleupdate)
* [completeFlexibleUpdate()](#completeflexibleupdate)
* [addListener('onFlexibleUpdateStateChange', ...)](#addlisteneronflexibleupdatestatechange-)
* [removeAllListeners()](#removealllisteners)
* [Interfaces](#interfaces)
* [Enums](#enums)

### getAppUpdateInfo(...)[¶](#getappupdateinfo "Permanent link")

`[](#%5F%5Fcodelineno-8-1)getAppUpdateInfo(options?: GetAppUpdateInfoOptions | undefined) => Promise<AppUpdateInfo>
`

Returns app update informations.

Only available on Android and iOS.

| Param       | Type                                                |
| ----------- | --------------------------------------------------- |
| **options** | [GetAppUpdateInfoOptions](#getappupdateinfooptions) |

**Returns:** `Promise<[AppUpdateInfo](#appupdateinfo)>`

---

### openAppStore(...)[¶](#openappstore "Permanent link")

`[](#%5F%5Fcodelineno-9-1)openAppStore(options?: OpenAppStoreOptions | undefined) => Promise<void>
`

Opens the app store entry of the app in the Play Store (Android) or App Store (iOS).

Only available on Android and iOS.

| Param       | Type                                        |
| ----------- | ------------------------------------------- |
| **options** | [OpenAppStoreOptions](#openappstoreoptions) |

---

### performImmediateUpdate()[¶](#performimmediateupdate "Permanent link")

`[](#%5F%5Fcodelineno-10-1)performImmediateUpdate() => Promise<AppUpdateResult>
`

Performs an immediate in-app update.

Only available on Android.

**Returns:** `Promise<[AppUpdateResult](#appupdateresult)>`

---

### startFlexibleUpdate()[¶](#startflexibleupdate "Permanent link")

`[](#%5F%5Fcodelineno-11-1)startFlexibleUpdate() => Promise<AppUpdateResult>
`

Starts a flexible in-app update.

Only available on Android.

**Returns:** `Promise<[AppUpdateResult](#appupdateresult)>`

---

### completeFlexibleUpdate()[¶](#completeflexibleupdate "Permanent link")

`[](#%5F%5Fcodelineno-12-1)completeFlexibleUpdate() => Promise<void>
`

Completes a flexible in-app update by restarting the app.

Only available on Android.

---

### addListener('onFlexibleUpdateStateChange', ...)[¶](#addlisteneronflexibleupdatestatechange "Permanent link")

`[](#%5F%5Fcodelineno-13-1)addListener(eventName: 'onFlexibleUpdateStateChange', listenerFunc: (state: FlexibleUpdateState) => void) => Promise<PluginListenerHandle>
`

Adds a flexbile in-app update state change listener.

Only available on Android.

| Param            | Type                                                         |
| ---------------- | ------------------------------------------------------------ |
| **eventName**    | 'onFlexibleUpdateStateChange'                                |
| **listenerFunc** | (state: [FlexibleUpdateState](#flexibleupdatestate)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

---

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

`[](#%5F%5Fcodelineno-14-1)removeAllListeners() => Promise<void>
`

Remove all listeners for this plugin.

---

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

#### AppUpdateInfo[¶](#appupdateinfo "Permanent link")

| Prop                            | Type                                                        | Description                                                                                                                                                                                                                          | Since |
| ------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **currentVersionName**          | string                                                      | The current version name of the app. On **Android**, this is the versionName from the android/app/build.gradle file. On **iOS**, this is the CFBundleShortVersionString from the Info.plist file. Only available on Android and iOS. | 5.1.0 |
| **availableVersionName**        | string                                                      | The available version name of the update. On **iOS**, this is the CFBundleShortVersionString from the Info.plist file. Only available on iOS.                                                                                        | 5.1.0 |
| **currentVersionCode**          | string                                                      | The current version code of the app. On **Android**, this is the versionCode from the android/app/build.gradle file. On **iOS**, this is the CFBundleVersion from the Info.plist file. Only available on Android and iOS.            | 5.1.0 |
| **availableVersionCode**        | string                                                      | The available version code of the update. On **Android**, this is the versionCode from the android/app/build.gradle file. Only available on Android.                                                                                 | 5.1.0 |
| **availableVersionReleaseDate** | string                                                      | Release date of the update in ISO 8601 (UTC) format. Only available on iOS.                                                                                                                                                          |       |
| **updateAvailability**          | [AppUpdateAvailability](#appupdateavailability)             | The app update availability. Only available on Android and iOS.                                                                                                                                                                      |       |
| **updatePriority**              | number                                                      | In-app update priority for this update, as defined by the developer in the Google Play Developer API. Only available on Android.                                                                                                     |       |
| **immediateUpdateAllowed**      | boolean                                                     | true if an immediate update is allowed, otherwise false. Only available on Android.                                                                                                                                                  |       |
| **flexibleUpdateAllowed**       | boolean                                                     | true if a flexible update is allowed, otherwise false. Only available on Android.                                                                                                                                                    |       |
| **clientVersionStalenessDays**  | number                                                      | Number of days since the Google Play Store app on the user's device has learnt about an available update if an update is available or in progress. Only available on Android.                                                        |       |
| **installStatus**               | [FlexibleUpdateInstallStatus](#flexibleupdateinstallstatus) | Flexible in-app update install status. Only available on Android.                                                                                                                                                                    |       |
| **minimumOsVersion**            | string                                                      | The minimum version of the operating system required for the app to run in iOS. Only available on iOS.                                                                                                                               |       |

#### GetAppUpdateInfoOptions[¶](#getappupdateinfooptions "Permanent link")

| Prop        | Type   | Description                                                                                                                                                                 |
| ----------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **country** | string | The two-letter country code for the store you want to search. See http://en.wikipedia.org/wiki/ISO\_3166-1\_alpha-2 for a list of ISO Country Codes. Only available on iOS. |

#### OpenAppStoreOptions[¶](#openappstoreoptions "Permanent link")

| Prop                   | Type   | Description                                                                                                                                                                                                                                                                              | Since |
| ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **androidPackageName** | string | The package name of the app to open in the Play Store. On **Android**, this is the application ID of your app (e.g. com.example.app). You can find the ID in the android/app/build.gradle file. If not provided, the current app's package name will be used. Only available on Android. | 7.2.0 |
| **appId**              | string | The app ID of the app to open in the App Store. On **iOS**, this is the Apple ID of your app (e.g. 123456789). You can find the ID in the URL of your app store entry (e.g. https://apps.apple.com/app/id123456789). Only available on iOS.                                              | 6.1.0 |

#### AppUpdateResult[¶](#appupdateresult "Permanent link")

| Prop     | Type                                        |
| -------- | ------------------------------------------- |
| **code** | [AppUpdateResultCode](#appupdateresultcode) |

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

| Prop       | Type                |
| ---------- | ------------------- |
| **remove** | () => Promise<void> |

#### FlexibleUpdateState[¶](#flexibleupdatestate "Permanent link")

| Prop                     | Type                                                        | Description                                                                                                                    |
| ------------------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **installStatus**        | [FlexibleUpdateInstallStatus](#flexibleupdateinstallstatus) | Flexible in-app update install status.                                                                                         |
| **bytesDownloaded**      | number                                                      | Returns the number of bytes downloaded so far. undefined if the install status is other than DOWNLOADING.                      |
| **totalBytesToDownload** | number                                                      | Returns the total number of bytes to be downloaded for this update. undefined if the install status is other than DOWNLOADING. |

### Enums[¶](#enums "Permanent link")

#### AppUpdateAvailability[¶](#appupdateavailability "Permanent link")

| Members                    | Value |
| -------------------------- | ----- |
| **UNKNOWN**                | 0     |
| **UPDATE\_NOT\_AVAILABLE** | 1     |
| **UPDATE\_AVAILABLE**      | 2     |
| **UPDATE\_IN\_PROGRESS**   | 3     |

#### FlexibleUpdateInstallStatus[¶](#flexibleupdateinstallstatus "Permanent link")

| Members         | Value |
| --------------- | ----- |
| **UNKNOWN**     | 0     |
| **PENDING**     | 1     |
| **DOWNLOADING** | 2     |
| **INSTALLING**  | 3     |
| **INSTALLED**   | 4     |
| **FAILED**      | 5     |
| **CANCELED**    | 6     |
| **DOWNLOADED**  | 11    |

#### AppUpdateResultCode[¶](#appupdateresultcode "Permanent link")

| Members            | Value | Description                                                                                 |
| ------------------ | ----- | ------------------------------------------------------------------------------------------- |
| **OK**             | 0     | The user has accepted the update.                                                           |
| **CANCELED**       | 1     | The user has denied or cancelled the update.                                                |
| **FAILED**         | 2     | Some other error prevented either the user from providing consent or the update to proceed. |
| **NOT\_AVAILABLE** | 3     | No update available.                                                                        |
| **NOT\_ALLOWED**   | 4     | Update type not allowed.                                                                    |
| **INFO\_MISSING**  | 5     | App update info missing. You must call getAppUpdateInfo() before requesting an update.      |

## Test with internal app-sharing[¶](#test-with-internal-app-sharing "Permanent link")

The Android Developers documentation describes how to test [in-app updates](https://developer.android.com/guide/playcore/in-app-updates) using [internal app sharing](https://developer.android.com/guide/playcore/in-app-updates/test).

## FAQ[¶](#faq "Permanent link")

### What is the difference between this plugin and the Live Update plugin?[¶](#what-is-the-difference-between-this-plugin-and-the-live-update-plugin "Permanent link")

The App Update plugin assists with native app updates that are distributed through the Play Store or App Store, for example by retrieving update information or performing in-app updates on Android. The [Capacitor Live Update](https://capawesome.io/docs/sdks/capacitor/live-update/) plugin, on the other hand, updates your app remotely in real-time without submitting a new version to the app store.

### Are in-app updates available on iOS?[¶](#are-in-app-updates-available-on-ios "Permanent link")

No, in-app updates are a feature of the Google Play Store and are therefore only available on Android. On iOS, you can use `getAppUpdateInfo(...)` to check whether an update is available and then call `openAppStore(...)` to open the app's App Store entry so the user can update manually.

### What is the difference between an immediate and a flexible update?[¶](#what-is-the-difference-between-an-immediate-and-a-flexible-update "Permanent link")

An immediate update is performed in one step with `performImmediateUpdate()`. A flexible update is started with `startFlexibleUpdate()`, its download progress can be monitored with the `onFlexibleUpdateStateChange` listener, and it is completed by calling `completeFlexibleUpdate()`, which restarts the app. Both update types are only available on Android.

### Why does the update fail with the INFO\_MISSING result code?[¶](#why-does-the-update-fail-with-the-info%5Fmissing-result-code "Permanent link")

The `INFO_MISSING` result code means that the app update information is missing. You must call `getAppUpdateInfo(...)` before requesting an update with `performImmediateUpdate()` or `startFlexibleUpdate()`.

### How can I test in-app updates on Android?[¶](#how-can-i-test-in-app-updates-on-android "Permanent link")

The Android Developers documentation describes how to test in-app updates using internal app sharing. See the [Test with internal app-sharing](#test-with-internal-app-sharing) section for the relevant links.

### Can I use this plugin with Ionic, React, Vue or Angular?[¶](#can-i-use-this-plugin-with-ionic-react-vue-or-angular "Permanent link")

Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.

## Related Plugins[¶](#related-plugins "Permanent link")

* [Live Update](https://capawesome.io/docs/sdks/capacitor/live-update/): Update your app remotely in real-time without requiring users to download a new version from the app store.
* [App Review](https://capawesome.io/docs/sdks/capacitor/app-review/): Let users submit app store reviews and ratings.

## 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/).

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

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-update/CHANGELOG.md).

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

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-update/LICENSE).

## Credits[¶](#credits "Permanent link")

This plugin is based on the [Capacitor App Update](https://github.com/capawesome-team/capacitor-app-update) plugin. Thanks to everyone who contributed to the project!

July 8, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/app-update/#article", "headline": "Capacitor App Update Plugin for Android & iOS", "name": "Capacitor App Update Plugin for Android & iOS", "description": "Capacitor plugin that allows you to check for app updates and prompt users to update the app on Android and iOS.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/app-update/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/app-update/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/app-update/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/app-update/#software", "name": "Capacitor App Update Plugin for Android & iOS", "description": "Capacitor plugin that allows you to check for app updates and prompt users to update the app on Android and iOS.", "url": "https://capawesome.io/docs/sdks/capacitor/app-update/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What is the difference between this plugin and the Live Update plugin?", "acceptedAnswer": {"@type": "Answer", "text": "The App Update plugin assists with native app updates that are distributed through the Play Store or App Store, for example by retrieving update information or performing in-app updates on Android. The Capacitor Live Update plugin, on the other hand, updates your app remotely in real-time without submitting a new version to the app store."}}, {"@type": "Question", "name": "Are in-app updates available on iOS?", "acceptedAnswer": {"@type": "Answer", "text": "No, in-app updates are a feature of the Google Play Store and are therefore only available on Android. On iOS, you can use getAppUpdateInfo(...) to check whether an update is available and then call openAppStore(...) to open the app's App Store entry so the user can update manually."}}, {"@type": "Question", "name": "What is the difference between an immediate and a flexible update?", "acceptedAnswer": {"@type": "Answer", "text": "An immediate update is performed in one step with performImmediateUpdate(). A flexible update is started with startFlexibleUpdate(), its download progress can be monitored with the onFlexibleUpdateStateChange listener, and it is completed by calling completeFlexibleUpdate(), which restarts the app. Both update types are only available on Android."}}, {"@type": "Question", "name": "Why does the update fail with the INFO_MISSING result code?", "acceptedAnswer": {"@type": "Answer", "text": "The INFO_MISSING result code means that the app update information is missing. You must call getAppUpdateInfo(...) before requesting an update with performImmediateUpdate() or startFlexibleUpdate()."}}, {"@type": "Question", "name": "How can I test in-app updates on Android?", "acceptedAnswer": {"@type": "Answer", "text": "The Android Developers documentation describes how to test in-app updates using internal app sharing. See the Test with internal app-sharing section for the relevant links."}}, {"@type": "Question", "name": "Can I use this plugin with Ionic, React, Vue or Angular?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects."}}], "url": "https://capawesome.io/docs/sdks/capacitor/app-update/"}
```
