---
description: A comprehensive guide to migrating your Capacitor app from Microsoft App Center to Capawesome Cloud, replacing CodePush with modern live update capabilities.
title: Migrating from App Center to Capawesome Cloud - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/migrating-from-app-center-to-capawesome-cloud.png
---

[ Skip to content](#migrating-from-app-center-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

* [  Step 2: Installing the Capawesome Live Update SDK ](#step-2-installing-the-capawesome-live-update-sdk)
* [  Step 3: Configuring Your App ](#step-3-configuring-your-app)
* [  Step 4: Replacing App Center CodePush ](#step-4-replacing-app-center-codepush)
* [  Step 5: Building and Distributing Updates ](#step-5-building-and-distributing-updates)
* [  Step 6: Testing Your Migration ](#step-6-testing-your-migration)
* [  Best Practices ](#best-practices)
* [  Conclusion ](#conclusion)

# Migrating from App Center to Capawesome Cloud[¶](#migrating-from-app-center-to-capawesome-cloud "Permanent link")

Microsoft App Center is being retired, leaving many developers looking for alternatives to continue delivering over-the-air updates and building their mobile applications. [Capawesome Cloud](/) provides a powerful, modern solution for Capacitor apps that offers seamless Live Updates and enterprise-grade features.

This guide will walk you through migrating your Capacitor app from App Center to Capawesome Cloud, focusing on replacing App Center's CodePush functionality with Capawesome Live Updates while maintaining your existing workflow and improving your app's update delivery system.

## Why Migrate from App Center?[¶](#why-migrate-from-app-center "Permanent link")

With App Center's retirement, you need a reliable alternative that provides:

* **Continued Service**: Capawesome Cloud is actively maintained and continuously improved
* **Modern Architecture**: Built specifically for Capacitor apps with modern tooling
* **Enhanced Features**: Advanced update channels, rollback capabilities, and delta updates
* **Better Performance**: Optimized delivery network and faster update mechanisms
* **Enterprise Support**: Professional support and SLA options for critical applications
* **Open Source**: The Live Update SDK is open-source and MIT licensed

Capawesome Cloud offers equivalent functionality to App Center's CodePush with additional benefits like channel management, automatic rollbacks, and better integration with the Capacitor ecosystem.

AI-Assisted Migration

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

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

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

Before starting the migration, ensure you have:

1. **Node.js and npm**: Version 16 or higher
2. **Capacitor CLI**: Install with `npm install -g @capacitor/cli`
3. **Existing Capacitor App**: Your app should already be using Capacitor
4. **Git Repository**: Your code should be in a Git repository
5. **App Center Account**: Access to your current App Center configuration for reference

This guide focuses on Capacitor apps. If you're still on Cordova, you don't have to migrate to Capacitor to replace CodePush. See [Cordova Hot Code Push Alternative for OTA Updates](/blog/cordova-hot-code-push-alternative/) for moving off CodePush on Cordova directly, or migrate to Capacitor first using the [Capacitor migration guide](https://capacitorjs.com/docs/cordova/migrating-from-cordova-to-capacitor).

## Migration Steps Overview[¶](#migration-steps-overview "Permanent link")

The migration process involves these key steps:

1. Set up Capawesome Cloud account and create your app
2. Install and configure the Capawesome Live Update SDK
3. Configure your app with the necessary settings
4. Replace App Center CodePush implementation
5. Build and deploy your first update
6. Test the migration thoroughly

## Step 1: Setting Up Capawesome Cloud[¶](#step-1-setting-up-capawesome-cloud "Permanent link")

### Create Your Account[¶](#create-your-account "Permanent link")

1. Visit the [Capawesome Cloud Console](https://console.cloud.capawesome.io)
2. Sign up for a new account or log in if you already have one
3. Complete the onboarding process

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

1. In the Capawesome Cloud Console, click "Create App"
2. Choose a name for your app
3. Copy the App ID of the newly created app via the dropdown; you will need it later

## Step 2: Installing the Capawesome Live Update SDK[¶](#step-2-installing-the-capawesome-live-update-sdk "Permanent link")

Remove any existing App Center dependencies first. After that, install the [Capacitor Live Update plugin](/docs/sdks/capacitor/live-update/) from Capawesome:

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

## Step 3: Configuring Your App[¶](#step-3-configuring-your-app "Permanent link")

### Add Configuration[¶](#add-configuration "Permanent link")

Add the Capawesome Live Update configuration to your `capacitor.config.ts` file:

`[](#%5F%5Fcodelineno-2-1)import { CapacitorConfig } from '@capacitor/cli';
[](#%5F%5Fcodelineno-2-2)
[](#%5F%5Fcodelineno-2-3)const config: CapacitorConfig = {
[](#%5F%5Fcodelineno-2-4)  appId: 'com.yourcompany.yourapp',
[](#%5F%5Fcodelineno-2-5)  appName: 'Your App Name',
[](#%5F%5Fcodelineno-2-6)  webDir: 'dist',
[](#%5F%5Fcodelineno-2-7)  plugins: {
[](#%5F%5Fcodelineno-2-8)    LiveUpdate: {
[](#%5F%5Fcodelineno-2-9)      appId: 'YOUR_CAPAWESOME_APP_ID', // Replace with your App ID from Step 1
[](#%5F%5Fcodelineno-2-10)    },
[](#%5F%5Fcodelineno-2-11)  },
[](#%5F%5Fcodelineno-2-12)};
[](#%5F%5Fcodelineno-2-13)
[](#%5F%5Fcodelineno-2-14)export default config;
`

### Sync Configuration[¶](#sync-configuration "Permanent link")

Apply the configuration changes:

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

## Step 4: Replacing App Center CodePush[¶](#step-4-replacing-app-center-codepush "Permanent link")

### Remove App Center Code[¶](#remove-app-center-code "Permanent link")

If you have existing App Center CodePush code, remove it.

### Implement Capawesome Live Updates[¶](#implement-capawesome-live-updates "Permanent link")

Replace your App Center CodePush implementation with Capawesome Live Updates:

`[](#%5F%5Fcodelineno-4-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)// Basic sync (equivalent to CodePush.sync())
[](#%5F%5Fcodelineno-4-4)const syncUpdates = async () => {
[](#%5F%5Fcodelineno-4-5)  try {
[](#%5F%5Fcodelineno-4-6)    const result = await LiveUpdate.sync();
[](#%5F%5Fcodelineno-4-7)    if (result.nextBundleId) {
[](#%5F%5Fcodelineno-4-8)      // Update is available and downloaded
[](#%5F%5Fcodelineno-4-9)      await LiveUpdate.reload();
[](#%5F%5Fcodelineno-4-10)    }
[](#%5F%5Fcodelineno-4-11)  } catch (error) {
[](#%5F%5Fcodelineno-4-12)    console.error('Update sync failed:', error);
[](#%5F%5Fcodelineno-4-13)  }
[](#%5F%5Fcodelineno-4-14)};
[](#%5F%5Fcodelineno-4-15)
[](#%5F%5Fcodelineno-4-16)// Check for updates (equivalent to CodePush.checkForUpdate())
[](#%5F%5Fcodelineno-4-17)const checkForUpdates = async () => {
[](#%5F%5Fcodelineno-4-18)  try {
[](#%5F%5Fcodelineno-4-19)    const result = await LiveUpdate.fetchLatestBundle();
[](#%5F%5Fcodelineno-4-20)    if (result.bundleId) {
[](#%5F%5Fcodelineno-4-21)      console.log('Update available:', result.bundleId);
[](#%5F%5Fcodelineno-4-22)      return true;
[](#%5F%5Fcodelineno-4-23)    }
[](#%5F%5Fcodelineno-4-24)    return false;
[](#%5F%5Fcodelineno-4-25)  } catch (error) {
[](#%5F%5Fcodelineno-4-26)    console.error('Update check failed:', error);
[](#%5F%5Fcodelineno-4-27)    return false;
[](#%5F%5Fcodelineno-4-28)  }
[](#%5F%5Fcodelineno-4-29)};
[](#%5F%5Fcodelineno-4-30)
[](#%5F%5Fcodelineno-4-31)// Manual update download and installation
[](#%5F%5Fcodelineno-4-32)const downloadAndInstallUpdate = async () => {
[](#%5F%5Fcodelineno-4-33)  try {
[](#%5F%5Fcodelineno-4-34)    const latestBundle = await LiveUpdate.fetchLatestBundle();
[](#%5F%5Fcodelineno-4-35)    if (latestBundle.bundleId) {
[](#%5F%5Fcodelineno-4-36)      await LiveUpdate.downloadBundle({ bundleId: latestBundle.bundleId });
[](#%5F%5Fcodelineno-4-37)      await LiveUpdate.setNextBundle({ bundleId: latestBundle.bundleId });
[](#%5F%5Fcodelineno-4-38)      await LiveUpdate.reload();
[](#%5F%5Fcodelineno-4-39)    }
[](#%5F%5Fcodelineno-4-40)  } catch (error) {
[](#%5F%5Fcodelineno-4-41)    console.error('Update installation failed:', error);
[](#%5F%5Fcodelineno-4-42)  }
[](#%5F%5Fcodelineno-4-43)};
`

### Update Your App Initialization[¶](#update-your-app-initialization "Permanent link")

Add the sync call to your app initialization:

`[](#%5F%5Fcodelineno-5-1)// In your main app initialization
[](#%5F%5Fcodelineno-5-2)document.addEventListener('DOMContentLoaded', () => {
[](#%5F%5Fcodelineno-5-3)  // Sync updates when app starts
[](#%5F%5Fcodelineno-5-4)  syncUpdates();
[](#%5F%5Fcodelineno-5-5)
[](#%5F%5Fcodelineno-5-6)  // Clean up interval when needed
[](#%5F%5Fcodelineno-5-7)  window.addEventListener('beforeunload', () => {
[](#%5F%5Fcodelineno-5-8)    clearInterval(interval);
[](#%5F%5Fcodelineno-5-9)  });
[](#%5F%5Fcodelineno-5-10)});
`

## Step 5: Building and Distributing Updates[¶](#step-5-building-and-distributing-updates "Permanent link")

### Build Your App[¶](#build-your-app "Permanent link")

Create a production build of your web assets:

`[](#%5F%5Fcodelineno-6-1)npm run build
`

### Install Capawesome CLI[¶](#install-capawesome-cli "Permanent link")

Install the Capawesome CLI for managing updates:

`[](#%5F%5Fcodelineno-7-1)npm install -g @capawesome/cli@latest
`

### Create and Upload a Bundle[¶](#create-and-upload-a-bundle "Permanent link")

Create and upload your first update bundle:

`[](#%5F%5Fcodelineno-8-1)# Create a new bundle from your build
[](#%5F%5Fcodelineno-8-2)npx @capawesome/cli apps:liveupdates:upload --path dist
[](#%5F%5Fcodelineno-8-3)
[](#%5F%5Fcodelineno-8-4)# The CLI will prompt you for:
[](#%5F%5Fcodelineno-8-5)# - App ID (from your Capawesome Cloud Console)
[](#%5F%5Fcodelineno-8-6)# - Channel (e.g., 'production', 'staging')
[](#%5F%5Fcodelineno-8-7)# - Bundle directory (usually 'dist' or 'build')
`

### Verify Upload[¶](#verify-upload "Permanent link")

Check the Capawesome Cloud Console to verify your bundle was uploaded successfully. You should see your new bundle listed under your app's bundles section.

## Step 6: Testing Your Migration[¶](#step-6-testing-your-migration "Permanent link")

### Test Update Delivery[¶](#test-update-delivery "Permanent link")

1. **Install the app** with the Capawesome Live Update SDK on a test device
2. **Upload a new bundle** with a visible change (e.g., updated text or styling)
3. **Trigger an update** by calling `LiveUpdate.sync()` or restarting the app
4. **Verify the update** is applied correctly

### Test Different Scenarios[¶](#test-different-scenarios "Permanent link")

Test these scenarios to ensure robust functionality:

* **Network connectivity issues**: Ensure graceful handling of offline scenarios
* **Update failures**: Test rollback functionality
* **Channel switching**: Test different update channels if you use them
* **App backgrounding**: Ensure updates work when the app is backgrounded

## Best Practices[¶](#best-practices "Permanent link")

### Update Strategy[¶](#update-strategy "Permanent link")

* **Test thoroughly**: Always test updates in staging before production
* **Gradual rollouts**: Use channels to control update distribution
* **Monitor performance**: Track update success rates and performance impact
* **Rollback plan**: Have a rollback strategy for problematic updates

### Security[¶](#security "Permanent link")

* **Validate bundles**: Only deploy tested and validated bundles
* **Use HTTPS**: Ensure all update communications are encrypted
* **Monitor updates**: Track update installations and failures

### Performance[¶](#performance "Permanent link")

* **Optimize bundle size**: Keep updates small and focused
* **Update timing**: Schedule updates during low-usage periods
* **Network awareness**: Consider network conditions when updating

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

Migrating from App Center to Capawesome Cloud provides a modern, reliable solution for delivering over-the-air updates to your Capacitor apps. The [Capawesome Live Update](/docs/sdks/capacitor/live-update/) plugin offers enhanced features, better performance, and ongoing support that App Center can no longer provide.

With this migration complete, you now have:

* A robust update delivery system
* Modern tooling and CLI integration
* Professional support options
* Enhanced features like channels and rollbacks
* An open-source foundation you can trust

Your app is now ready to continue delivering seamless updates to your users with improved reliability and performance.

June 9, 2026 

 Back to top 