Tutorial9 min read

Live updates for Ionic apps with Capacitor and OtaKit

Ionic apps run on Capacitor, so they can update over the air. How to add live updates to an Ionic Angular, React, or Vue app with OtaKit — the affordable Appflow Live Updates alternative.

Ionic apps run on Capacitor, which means they can update over the air — ship a bug fix or a new screen straight to installed devices without a store review. Ionic's own answer is Appflow Live Updates, but it's bundled into a broader paid platform. If you just want live updates for your Ionic app, OtaKit does exactly that, for a fraction of the cost.

This guide adds live updates to an Ionic app — Angular, React, or Vue — with OtaKit.

Mental model: your Ionic app is already a Capacitor app. Adding OtaKit is a plugin install plus one CLI command, not a migration.

Confirm your Capacitor setup

Modern Ionic projects already use Capacitor. Check that you have the native platforms and know your web output directory — it's www for Ionic Angular and dist for Ionic React/Vue:

ionic build            # produces www/ (Angular) or dist/ (React/Vue)
npx cap sync

If you're still on Cordova, migrate to Capacitor first — it's the supported path and unlocks the modern plugin ecosystem.

Install OtaKit

npm install @otakit/capacitor-updater
npx cap sync
// capacitor.config.ts
import type { CapacitorConfig } from "@capacitor/cli";

const config: CapacitorConfig = {
  appId: "com.example.myapp",
  appName: "My App",
  webDir: "www", // or "dist" for Ionic React/Vue
  plugins: {
    OtaKit: { appId: "YOUR_OTAKIT_APP_ID" },
  },
};

export default config;

Signal a successful boot

Call notifyAppReady() once your app has loaded so OtaKit can roll back a broken release automatically. In Ionic Angular:

import { Component } from "@angular/core";
import { Capacitor } from "@capacitor/core";
import { OtaKit } from "@otakit/capacitor-updater";

@Component({ selector: "app-root", templateUrl: "app.component.html" })
export class AppComponent {
  constructor() {
    if (Capacitor.isNativePlatform()) OtaKit.notifyAppReady();
  }
}

In Ionic React or Vue, place the same call in your root component's mount effect.

Release your first live update

npm install -g @otakit/cli
otakit login

ionic build
otakit upload --release

Publish the app to the stores once with the plugin configured. After that, every otakit upload --release reaches installed devices on their next launch. Bundles are signed, hash-verified, CDN-delivered, and optionally end-to-end encrypted — with no monthly-active-user or bandwidth metering.

Why teams move off Appflow for this

  • Pricing. Appflow is a platform subscription; OtaKit doesn't meter MAUs or bandwidth, so most apps pay $0–25/mo.
  • No lock-in. OtaKit's stack is open source and self-hostable.
  • Same capability. Signed, rollback-safe live updates with channels and runtime versions.

Comparing options directly? See the best Appflow alternative and Capacitor + OtaKit vs Appflow.

Where to go next

Read staged rollouts to ship safely, and how OTA works for the full delivery model.

Related docs