Changelog

What's new in OtaKit

New features, improvements and fixes across the Capacitor plugin, the CLI, the dashboard and the API.

Capacitor plugin

npm

3.2.0

Released September 30, 2026

npm install @otakit/capacitor-updater@latest

CLI

npm

1.9.0

Released September 30, 2026

npm install -g @otakit/cli@latest

Push SDK

npm

0.1.1

Released September 27, 2026

npm install @otakit/push@latest

Releases

Every change, newest first

Plugin features need the plugin version shown and, where noted, a native build. Server and dashboard changes are live for everyone as soon as they ship.

Plugin 3.1.0CLI 1.8.0
NewPlugin · CLI · Dashboard · API · Agents

Percentage rollouts

Release a bundle to a share of devices first, watch its health, then raise the share or complete it. Cancel, and every device returns to the previous release.

  • Start with otakit release --rollout 10, then change it with otakit rollout --percent 50, --complete or --cancel.
  • Each device draws its own stable number for every rollout. No device identifier is stored or sent.
  • Available on every plan, in the dashboard, and to agents through set_rollout_percent.
otakit release --channel production --rollout 10

Requires: Plugin 3.1+. Older plugins stay on the previous release until the rollout completes.

CLI 1.7.0Push SDK 0.1.0
NewPush · CLI · Dashboard · API

Push notifications

Send push notifications to your Capacitor app on iOS and Android with your own APNs key and Firebase project. Send from the dashboard, the CLI, your backend or an AI agent.

  • Turn it on per workspace under Settings → Add-ons. No extra native SDK: devices use the official @capacitor/push-notifications plugin.
  • Target your own user IDs, topics or OTA channels, and see delivery counts for every campaign.
  • Send with otakit push send, or call the REST API with an idempotency key so a retry never sends twice.
  • Free plan: 10,000 devices and 100,000 notifications a month.
npm install @otakit/push
Plugin 3.0.0CLI 1.6.0
ImprovedPlugin · CLI

Plugin 3.0: reliability release

A hardening release for the native updater. The last healthy bundle is always kept, update state survives crashes, downloads retry, and every failure reports a specific reason.

  • Readiness is bound to the WebView document, and appReadyTimeout counts foreground time only.
  • Downloads retry transient errors and verify integrity before a bundle is installed.
  • Device events are queued on the device and retried, with more context for failed update checks.
  • otakit upload warns about installers and very large files in the web build. --strict-artifacts fails CI instead.

Upgrade notes

  • Ship it in a native build: an OTA update cannot replace the native plugin.
  • Android needs a System WebView that supports DOCUMENT_START_SCRIPT to apply updates.
  • Encrypted bundles must fit within 128 MiB and the device's available memory.
  • manifestKeys must be an array when it is set.
  • Self-hosted: deploy the updated ingest Worker and Tinybird endpoints before releasing the native SDK.
CLI 1.5.0
NewCLI · Agents · Dashboard

MCP server and Agent Skill

Release updates from your AI coding agent. OtaKit ships an MCP server, hosted and inside the CLI, plus an Agent Skill, so agents in Claude Code, Codex, VS Code and Copilot can upload, release, check health and revert.

  • Releases take two steps: the agent prepares, you approve, then it publishes.
  • Release health, recent device events and reverts are available as tools.
  • otakit connect sets a project up for your agent, and the dashboard shows how to connect.
npx @otakit/cli connect
CLI 1.4.0
NewCLI · API

Auto-revert

A release can revert itself. Publish with --auto-revert, and OtaKit reverts the release when too many devices roll back within 24 hours.

  • By default it reverts when rollbacks reach 20% of at least 50 applied or rolled-back updates.
  • Tune it with --auto-revert-rate and --auto-revert-min-sample.
  • It also watches percentage rollouts, and returns every device to the previous release.
otakit upload --release production --auto-revert
Plugin 2.3.0CLI 1.3.0
NewPlugin · CLI

Delta updates

Devices download only the files that changed. Upload with --strategy deltas, and OtaKit stores each file once by its content hash, so devices reuse unchanged images, fonts and chunks.

  • Opt in per upload. A single zip stays the default.
  • Every file is verified by its hash before the bundle is assembled.
  • Keep build output deterministic so unchanged files stay unchanged.
otakit upload --strategy deltas --release
Plugin 2.2.0CLI 1.2.0
NewPlugin · CLI

End-to-end bundle encryption

Encrypt bundles before they leave your machine. OtaKit and the CDN only ever store ciphertext, and the app decrypts with a key that ships inside your native build.

  • Run otakit generate-encryption-key, then upload with OTAKIT_ENCRYPTION_KEY set. Encryption turns on automatically.
  • AES-256-GCM with key IDs, so old and new keys can ship side by side during a rotation.
otakit generate-encryption-key

Requires: Plugin 2.2+ with bundleKeys in the plugin config.

Plugin 2.2.0
NewPlugin

Update listeners and in-app channel switching

React to updates from JavaScript, and move a device between channels at runtime, for example to let internal users opt into a beta channel.

  • Listen for updateAvailable, updateStaged, updateApplied, downloadFailed and rollback.
  • setChannel() and getChannel() switch channels without a new native build.
OtaKit.addListener('updateApplied', ({ bundle }) => {});
Plugin 2.2.0CLI 1.2.0
NewCLI · Plugin

Native compatibility check and emergency releases

Uploads compare your native plugins with the ones the channel's current release was built with, and warn when a change needs a store build. For urgent fixes, --force-immediate makes devices apply a release on their next check.

  • otakit compatibility runs the same check without uploading.
  • --fail-on-incompatible blocks the upload in CI.
  • The force flag is part of the signed manifest, so it cannot be added in transit.
otakit upload --release production --force-immediate
Plugin 2.1.1CLI 1.1.1
ImprovedPlugin · CLI

Update policies

Choose exactly when updates apply with launchPolicy, resumePolicy and runtimePolicy: off, shadow, apply-staged or immediate.

  • By default, staged bundles apply on the next cold start and resumes download in the background.
  • After a native update, the first launch can apply the latest bundle right away with runtimePolicy.
launchPolicy: 'apply-staged', resumePolicy: 'shadow', runtimePolicy: 'immediate'
Plugin 2.0.1
NewPlugin · Dashboard

Device events and release analytics

Devices report downloads, applies and rollbacks to an edge ingest service, and the dashboard shows an events timeline with counts for every release.

  • Events are validated and rate-limited at the edge before they reach analytics.
ImprovedDashboard

Self-hosting

Run OtaKit on your own infrastructure. The dashboard needs only Postgres, S3-compatible storage and authentication; billing, email and analytics switch off when they are not configured.

Plugin 2.0.0
NewPlugin · CLI

Signed manifests on the CDN

Update checks no longer reach an app server. Every release is a signed, static manifest on Cloudflare's CDN, and bundles download from public CDN URLs, so checks stay fast at any scale.

Upgrade notes

  • Plugin 2.0 uses the new manifest protocol: update the plugin in a native build.
Plugin 1.2.0CLI 1.1.0
NewPlugin · CLI

Runtime versions

Set runtimeVersion in the plugin config to keep web bundles matched to native builds. Each native build only receives bundles uploaded for its runtime version.

runtimeVersion: '2026.04'
Plugin 1.0.0CLI 1.0.0
LaunchPlugin · CLI · Dashboard

OtaKit 1.0

Over-the-air updates for Capacitor apps. Upload a web build with the CLI, release it to a channel, and devices download it in the background.

  • A new bundle runs on trial: if the app does not call notifyAppReady() in time, the device rolls back automatically.
  • Open source under the MIT license.
npm install @otakit/capacitor-updater