---
description: Complete guide to migrating live updates, native builds, and app store publishing from Ionic Appflow to Capawesome Cloud for Capacitor and Cordova apps.
title: Migrating from Ionic Appflow to Capawesome Cloud - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/migrating-from-ionic-appflow-to-capawesome-cloud.png
---

[ Skip to content](#migrating-from-ionic-appflow-to-capawesome-cloud) 

[ 🔐 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

* [  Part 2: Migrate Native Builds ](#part-2-migrate-native-builds)
* [  Part 3: Migrate App Store Publishing ](#part-3-migrate-app-store-publishing)
* [  Migration Timeline ](#migration-timeline)
* [  Get Help With Your Migration ](#get-help-with-your-migration)
* [  Conclusion ](#conclusion)

# Migrating from Ionic Appflow to Capawesome Cloud[¶](#migrating-from-ionic-appflow-to-capawesome-cloud "Permanent link")

With Ionic's announcement that it will discontinue its commercial products, including Appflow, by December 31, 2027, many teams are looking for an alternative. Capawesome Cloud is a **drop-in replacement** for Ionic Appflow, covering the same three areas you rely on today: live updates, native builds, and app store publishing. And like Appflow, it works with **Capacitor, Cordova, and native iOS and Android** apps.

This guide walks through migrating each of the three areas. Migrate them in any order, or only the ones you use.

AI-Assisted Migration

For a guided experience, add the [Capawesome skills](https://github.com/capawesome-team/skills) to your project with `npx skills add capawesome-team/skills --skill ionic-appflow-migration` and use the following prompt with your preferred AI coding assistant:

`` [](#%5F%5Fcodelineno-0-1)Use the `ionic-appflow-migration` skill from `capawesome-team/skills` to help me migrate from Ionic Appflow to Capawesome Cloud.
 ``

## Why Migrate from Ionic Appflow?[¶](#why-migrate-from-ionic-appflow "Permanent link")

Ionic [announced the discontinuation of their commercial products](https://ionic.io/blog/important-announcement-the-future-of-ionics-commercial-products), including Appflow, as part of their transition after being acquired by OutSystems. Existing users have access through December 2027, but it's worth planning your migration early.

Capawesome Cloud offers transparent, scalable pricing, delta updates that reduce data transfer, native builds that run 3-5x faster on M4 hardware, and a secure zero-trust architecture. The platform is actively maintained, and most teams complete the live update migration in under an hour.

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

Before you begin, make sure you have:

* A Capacitor, Cordova, or native app in a Git repository.
* A [Capawesome Cloud](https://console.cloud.capawesome.io) account and organization.
* The latest version of the [Capawesome CLI](/docs/cloud/cli/) installed and authenticated.
* Access to your Ionic Appflow configuration and signing credentials.

## Create Your App[¶](#create-your-app "Permanent link")

Everything in Capawesome Cloud is organized around an **app**, which is the equivalent of an Appflow app. Create one first, then use its app ID throughout the migration.

CLIConsole

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

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

You'll 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**. The console generates a unique app ID you'll use in the steps below.

Note the app ID. You'll also want to create your channels (for example `development`, `staging`, and `production`) the same way you did in Appflow.

## Part 1: Migrate Live Updates[¶](#part-1-migrate-live-updates "Permanent link")

Appflow live updates map directly to [Capawesome Cloud Live Updates](/docs/cloud/live-updates/). The Live Update SDK is available for both Capacitor and Cordova with full API parity, so the migration is mostly a SDK swap plus a configuration change.

### Install the Live Update SDK[¶](#install-the-live-update-sdk "Permanent link")

Remove the Appflow live update SDK and install the Capawesome equivalent for your framework:

CapacitorCordova

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

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

Both plugins are open source and actively maintained, and provide everything you need for over-the-air updates.

### Configure Your App[¶](#configure-your-app "Permanent link")

Next, replace your Appflow configuration with the Capawesome configuration.

CapacitorCordova

Update your [Capacitor configuration](https://capacitorjs.com/docs/config) file:

capacitor.config.ts

`[](#%5F%5Fcodelineno-4-1)import { CapacitorConfig } from "@capacitor/cli";
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const config: CapacitorConfig = {
[](#%5F%5Fcodelineno-4-4)  plugins: {
[](#%5F%5Fcodelineno-4-5)    LiveUpdate: {
[](#%5F%5Fcodelineno-4-6)      appId: "00000000-0000-0000-0000-000000000000", // Replace with your Capawesome app ID
[](#%5F%5Fcodelineno-4-7)      defaultChannel: "production" // Optional
[](#%5F%5Fcodelineno-4-8)    }
[](#%5F%5Fcodelineno-4-9)  }
[](#%5F%5Fcodelineno-4-10)};
[](#%5F%5Fcodelineno-4-11)
[](#%5F%5Fcodelineno-4-12)export default config;
`

Set the plugin variables as `<preference>` entries in your `config.xml`:

`[](#%5F%5Fcodelineno-5-1)<preference name="APP_ID" value="00000000-0000-0000-0000-000000000000" />
[](#%5F%5Fcodelineno-5-2)<preference name="DEFAULT_CHANNEL" value="production" />
`

The options mirror what you used in Appflow. The `appId` is the identifier from your Capawesome app, and the default channel determines which channel the app checks for updates.

Here's how the most common configuration options map between the two platforms:

| Ionic Appflow    | Capawesome Cloud   | Notes                                        |
| ---------------- | ------------------ | -------------------------------------------- |
| appId            | appId              | Same purpose, different value                |
| channel          | defaultChannel     | Same purpose, renamed                        |
| autoUpdateMethod | autoUpdateStrategy | Set to background, or handle updates in code |
| maxVersions      | autoDeleteBundles  | A boolean instead of a number                |
| enabled          | Not needed         | Handled in code                              |

### Replace the SDK Calls[¶](#replace-the-sdk-calls "Permanent link")

The Capawesome Live Update SDK exposes the same `sync()` and `reload()` methods as the Appflow SDK, so most call sites change only their import.

CapacitorCordova

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

`[](#%5F%5Fcodelineno-7-1)const { LiveUpdate } = cordova.plugins;
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const applyUpdate = async () => {
[](#%5F%5Fcodelineno-7-4)  const { nextBundleId } = await LiveUpdate.sync();
[](#%5F%5Fcodelineno-7-5)  if (nextBundleId) {
[](#%5F%5Fcodelineno-7-6)    await LiveUpdate.reload();
[](#%5F%5Fcodelineno-7-7)  }
[](#%5F%5Fcodelineno-7-8)};
`

For the full list of methods and the extra options Capawesome adds, see the [Update Strategies](/docs/cloud/live-updates/update-strategies/) guide.

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

With the SDK in place, build your web assets and upload them with the CLI. This is the same command for Capacitor and Cordova:

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

You'll be prompted for the path to your web assets (typically `www` or `dist`) and the target app. Once the upload completes, the bundle is delivered to your users according to your update strategy. You can drop the same command into your CI/CD pipeline exactly as you did with Appflow.

## Part 2: Migrate Native Builds[¶](#part-2-migrate-native-builds "Permanent link")

Appflow's native builds map to [Capawesome Cloud Native Builds](/docs/cloud/native-builds/), which compiles your Capacitor, Cordova, or native app for Android and iOS in the cloud. There are no YAML pipelines to maintain and no runners to manage.

### Connect Your Git Repository[¶](#connect-your-git-repository "Permanent link")

Open the [Git](https://console.cloud.capawesome.io/apps/%5F/git) page of your app, connect your Git provider (GitHub, GitLab, Bitbucket, or Azure DevOps, including self-hosted instances), and select the repository to build. This replaces the repository connection you configured in Appflow.

### Add Your Signing Credentials[¶](#add-your-signing-credentials "Permanent link")

Upload the same credentials you used with Appflow: an Android keystore and your iOS certificate and provisioning profile. See [Signing certificates](/docs/cloud/native-builds/certificates/) for the details. Credentials are encrypted at rest and never exposed in build logs.

### Trigger a Build[¶](#trigger-a-build "Permanent link")

Where Appflow used a build configuration in the dashboard, Capawesome Cloud uses an optional `capawesome.config.json` file in your repository for build settings (monorepo paths, custom commands, package managers). Trigger a build from any machine, including Windows and Linux:

`[](#%5F%5Fcodelineno-9-1)npx @capawesome/cli apps:builds:create --platform ios --git-ref main
`

Add the `--apk` or `--ipa` flag to download the artifact automatically once the build finishes. For the full setup, see [Getting Started with Native Builds](/docs/cloud/native-builds/setup/).

## Part 3: Migrate App Store Publishing[¶](#part-3-migrate-app-store-publishing "Permanent link")

Appflow's "Deploy to App Store" feature maps to [Capawesome Cloud App Store Publishing](/docs/cloud/app-store-publishing/), which submits builds to TestFlight, the Apple App Store, and Google Play.

### Create a Store Destination[¶](#create-a-store-destination "Permanent link")

A **destination** holds the store credentials and target track, similar to an Appflow destination. Create one for each store:

`[](#%5F%5Fcodelineno-10-1)npx @capawesome/cli apps:destinations:create --name "Google Play" --platform android
`

You'll provide your App Store Connect or Google Play credentials once. See [Destinations](/docs/cloud/app-store-publishing/destinations/) for the per-store setup.

### Deploy a Build[¶](#deploy-a-build "Permanent link")

With a destination configured, submit any successful build to it:

`[](#%5F%5Fcodelineno-11-1)npx @capawesome/cli apps:deployments:create --build-number 42 --destination "Google Play"
`

iOS builds upload to TestFlight automatically, and Android builds can target Internal, Alpha, Beta, or Production tracks. You can also trigger deployments automatically after every build with [Automations](/docs/cloud/automations/).

## Migration Timeline[¶](#migration-timeline "Permanent link")

You have until December 31, 2027, so you can take a measured approach. A practical plan:

1. Set up Capawesome Cloud and test live updates in a development environment (1-2 days).
2. Implement the SDK swap in a feature branch and test all update strategies (3-5 days, including QA).
3. Connect native builds and app store publishing, and verify a full build-and-submit run.
4. Roll out to a subset of users and monitor for 1-2 weeks. You can run Appflow and Capawesome Cloud in parallel during this phase.
5. Update all users to the Capawesome Cloud version, monitor for another week, then retire Appflow.

## Get Help With Your Migration[¶](#get-help-with-your-migration "Permanent link")

Want a hand moving off Appflow? Our team can walk you through the migration and answer questions specific to your Capacitor, Cordova, or native setup.

[Book an Ionic Appflow Migration Demo](https://cal.com/team/capawesome/ionic-appflow-migration)

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

Migrating from Ionic Appflow to Capawesome Cloud keeps your live update, native build, and app store publishing infrastructure on a platform that's actively maintained and built for the long term. The similar APIs and configuration mean minimal code changes, while delta updates, faster builds, and transparent pricing add value on top.

If you're on Cordova, read [Announcing Cordova Support in Capawesome Cloud](/blog/announcing-cordova-support-in-capawesome-cloud/) for a closer look at what's now available. Have questions or want to share how your migration went? Join us on the [Capawesome Discord server](https://discord.gg/VCXxSVjefW), and [subscribe to the Capawesome newsletter](https://capawesome.io/newsletter/) to stay up to date.

June 8, 2026 

 Back to top 