---
title: Migrating from Ionic Appflow
description: Import your Ionic Appflow apps into Capawesome Cloud with a single CLI command and migrate live updates, native builds, and app store publishing before the 2027 shutdown.
---

# Migrating from Ionic Appflow

This guide walks you through migrating your apps from Ionic Appflow to Capawesome Cloud. Most of the work is automated: the Capawesome CLI imports your Appflow organization export — apps, signing certificates, environments, channels, configurations, store destinations, and automations — with a single command. The remaining steps are swapping the Live Update SDK in your app and reconnecting your Git provider.

!!! info "Ionic Appflow reaches end of life on December 31, 2027"

    Ionic [announced the discontinuation](https://ionic.io/blog/important-announcement-the-future-of-ionics-commercial-products){:target="_blank"} of its commercial products, including Appflow, and stopped selling to new customers in February 2025. Ionic officially recommends Capawesome as its preferred migration partner for Appflow and its Enterprise plugins. Read the [partnership announcement](../../blog/posts/announcing-partnership-with-ionic.md) and [why teams are switching to Capawesome Cloud](../../blog/posts/migrating-from-ionic-appflow-to-capawesome-cloud.md) for the background.

!!! note "Using Ionic Enterprise plugins?"

    Auth Connect, Identity Vault, and Secure Storage are discontinued along with Appflow. See [Alternatives to the Ionic Enterprise plugins](../../blog/posts/alternatives-to-ionic-enterprise-plugins.md) for drop-in replacements from Capawesome.

!!! tip "AI-Assisted Migration"

    For a guided experience, add the [Capawesome skills](../../ai/skills/index.md) to your project with `npx skills add capawesome-team/skills --skill ionic-appflow-migration` and ask your preferred AI coding assistant to use the `ionic-appflow-migration` skill.

## Prerequisites

Before you begin, make sure you have:

- A [Capawesome Cloud](https://console.cloud.capawesome.io){:target="_blank"} account and organization.
- The latest version of the Capawesome CLI [installed](../cli/installation.md) and [authenticated](../cli/authentication.md).
- Admin access to your Ionic Appflow organization.

## Step 1: Export Your Ionic Appflow Organization

Ionic Appflow can export the configurations of all apps in your organization as a zip file:

1. Open the [Ionic Appflow Dashboard](https://dashboard.ionicframework.com){:target="_blank"} and select your organization.
2. Navigate to **Settings** → **Account**.
3. In the **Organization export** section, click **Export**.
4. Once the export completes, click **Download** to save the zip file.

![Organization export in the Ionic Appflow dashboard](../../assets/images/screenshots/ionic-appflow-organization-export.png)

!!! warning "The export contains sensitive data"

    The zip file includes your environment secrets, signing certificates with their passwords, and store credentials in plain text. Store it securely and delete it after the migration.

## Step 2: Preview the Import

Use the [`apps:import`](../cli/commands.md#appsimport) command with the `--dry-run` option to preview what will be imported without creating any resources:

```bash
npx @capawesome/cli apps:import --file appflow-export.zip --dry-run
```

The CLI prints a summary table with the resources it found for each app, along with any warnings. To import only specific apps, pass the `--include` option with the app names or IDs from the export:

```bash
npx @capawesome/cli apps:import --file appflow-export.zip --include "My App" --dry-run
```

## Step 3: Run the Import

Run the same command without `--dry-run` to import the apps into your organization:

```bash
npx @capawesome/cli apps:import --file appflow-export.zip
```

The command creates the following resources in Capawesome Cloud:

| Ionic Appflow                     | Capawesome Cloud    | Notes                                                       |
| --------------------------------- | ------------------- | ----------------------------------------------------------- |
| App                               | App                 | Name conflicts are resolved with a numeric suffix           |
| Live update channel               | Channel             | Same concept, same naming freedom                           |
| Environment (variables & secrets) | Environment         | Variables and secrets are both imported                     |
| Signing certificate               | Signing certificate | Keystores, `.p12` files, and provisioning profiles          |
| Native config                     | Configuration       | App name and bundle ID overrides                            |
| Destination                       | Destination         | Store credentials incl. the Google service account key      |
| Native and web build automation   | Automation          | A web automation with multiple channels becomes one automation per channel |
| Repository association            | Git repository link | Requires a connected Git provider (see below)               |
| Latest build number               | Next build number   | New builds continue your Appflow build numbering            |

If an app was exported with the app type `ionic`, the CLI asks whether it is a Capacitor or Cordova app, since Appflow used this type for both. In non-interactive environments, pass the `--ionic-app-type` option instead.

## Step 4: Review the Import Summary

After the import, the CLI prints a summary with the created resources and any warnings. The most common warnings:

- **Automation webhooks were not imported**: Capawesome Cloud supports [webhooks](../webhooks/index.md) at the app level instead of per automation. Add them manually after the import.
- **Live Update plugin settings**: Appflow native configs can contain Live Update plugin settings. In Capawesome Cloud, this configuration lives in your app (see [Step 5](#step-5-update-your-app)).
- **Repository could not be linked**: The Git provider must be connected first (see below).
- **React Native and Flutter apps were skipped**: Support is coming soon. Re-run the import with the `--include` option once available to import the remaining apps.

## Step 5: Update Your App

The Capawesome Live Update SDK keeps Appflow's `sync()` and `reload()` API, so many teams complete this step quickly. Remove the Appflow SDK and install the Capawesome equivalent:

=== "Capacitor"

    ```bash
    npm uninstall @capacitor/live-updates
    npm install @capawesome/capacitor-live-update
    npx cap sync
    ```

    Then update your [Capacitor configuration](https://capacitorjs.com/docs/config){:target="_blank"} file:

    ```typescript title="capacitor.config.ts"
    import { CapacitorConfig } from "@capacitor/cli";

    const config: CapacitorConfig = {
      plugins: {
        LiveUpdate: {
          appId: "00000000-0000-0000-0000-000000000000", // Replace with your Capawesome app ID
          defaultChannel: "production",
          autoUpdateStrategy: "background",
          autoBlockRolledBackBundles: true,
          readyTimeout: 10000
        }
      }
    };

    export default config;
    ```

=== "Cordova"

    ```bash
    cordova plugin remove cordova-plugin-ionic
    cordova plugin add @capawesome/cordova-live-update --variable APP_ID=<your-app-id>
    ```

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

    ```xml
    <preference name="APP_ID" value="00000000-0000-0000-0000-000000000000" />
    <preference name="DEFAULT_CHANNEL" value="production" />
    <preference name="AUTO_UPDATE_STRATEGY" value="background" />
    <preference name="AUTO_BLOCK_ROLLED_BACK_BUNDLES" value="true" />
    <preference name="READY_TIMEOUT" value="10000" />
    ```

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                                |

The `readyTimeout` and `autoBlockRolledBackBundles` options enable [automatic rollback](../live-updates/rollbacks.md) of broken updates. For automatic rollback to work, call `ready()` as early as possible at app start. The SDK exposes the same `sync()` and `reload()` methods as the Appflow SDK, so most call sites change only their import — see [Update Strategies](../live-updates/update-strategies.md) for more ways to apply updates.

## Step 6: Complete the Manual Steps

A few things cannot be imported and need a one-time manual setup:

- **Connect your Git provider**: Create an organization-level [Git connection](https://console.cloud.capawesome.io/organizations/_/git){:target="_blank"} for GitHub, GitLab, Bitbucket, Azure DevOps, Gitea, or any Git server over HTTP/S (see [Integrations](../integrations/index.md)), then select the repository on the **Git repository** page of each app. If the import could not link a repository, this is why.
- **Add app-level webhooks**: If your Appflow automations used webhooks, [set them up](../webhooks/setup.md) at the app level.
- **Apple App Store API key**: The import carries over Apple ID credentials. For automated publishing, an [App Store Connect API key](../app-store-publishing/destinations/apple-app-store.md) (`.p8` file) is the more robust choice — add it to your imported destination.
- **API tokens for CI/CD**: Replace your Appflow personal access tokens with [Capawesome Cloud API tokens](../accounts/tokens.md) in your pipelines.

## Step 7: Verify the Migration

Run one build, one live update, and one submission to confirm everything works end to end:

```bash
npx @capawesome/cli apps:builds:create --platform android --git-ref main
npx @capawesome/cli apps:liveupdates:upload --channel production
npx @capawesome/cli apps:deployments:create --build-number 1 --destination "Google Play"
```

You can run Appflow and Capawesome Cloud in parallel during the transition: ship a new app release with the Capawesome Live Update SDK while older binaries keep receiving updates from Appflow — no big-bang cutover required.

## What Is Not Migrated

The following Appflow data has no equivalent in the export and is not imported: build history, live update deployment history, team and member assignments, and dependency caching settings. Your apps in Ionic Appflow remain untouched by the import.

## Get Help With Your Migration

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){ .md-button .md-button--primary }

## Next steps

- [CLI Command Reference](../cli/commands.md#appsimport) — all options of the `apps:import` command.
- [Getting Started with Live Updates](../live-updates/setup.md) — publish your first update after the SDK swap.
- [Getting Started with Native Builds](../native-builds/setup.md) — trigger your first cloud build.
- [Getting Started with App Store Publishing](../app-store-publishing/setup.md) — submit your first build to the stores.
