unsubbed.co

Capgo

Self-hosted personal dashboards tool that provides over-the-air update solution for Capacitor apps.

Live updates for Capacitor apps, honestly reviewed. What you actually get when you self-host the Appflow replacement.

TL;DR

  • What it is: Open-source (AGPL-3.0) over-the-air update platform for CapacitorJS apps — push JavaScript bundle updates to iOS and Android devices without waiting for app store review [2].
  • Who it’s for: Mobile app teams and indie founders building with Capacitor who need to ship fixes fast, and specifically anyone currently on Ionic Appflow, which is shutting down [homepage].
  • Cost savings: Ionic Appflow ran $49–$499+/mo. Capgo self-hosted runs on a Supabase instance you control — infrastructure cost only. Capgo cloud starts with a 14-day free trial and scales on MAU/storage/bandwidth rather than per-update pricing [homepage][2].
  • Key strength: The most complete Capacitor-native OTA update stack available today. Delta updates, end-to-end encryption, real-time device logs, rollback, release channels — all in one platform used in 3,500+ production apps tracking 50M+ devices [homepage].
  • Key weakness: AGPL-3.0 license (not MIT), self-hosting requires standing up Supabase (non-trivial), and with only 185 GitHub stars the project has a small community footprint. Almost no independent third-party reviews exist — you’re largely relying on Capgo’s own documentation and claims.

What is Capgo

Capgo is an over-the-air (OTA) update platform for apps built with CapacitorJS — the hybrid mobile framework from Ionic. The core idea: your app ships once to the App Store, but the JavaScript bundle can be updated silently in the background whenever you push a new build through Capgo. No review queues, no user prompts, no waiting [2].

It positions itself as the “official Appflow alternative” and, practically speaking, it has become the default answer for Capacitor developers who needed somewhere to land when Ionic announced Appflow is shutting down [homepage README]. The GitHub README is direct about it: “Official Appflow alternative: our Capacitor updater plugin is the official alternative to Ionic Appflow.”

What distinguishes Capgo from a basic file server that serves zip bundles is the full surrounding infrastructure: release channels for staging vs. production, per-device targeting for QA, rollback when a bad bundle ships, delta updates that only download changed files (up to 90% bandwidth reduction), end-to-end encryption so even Capgo’s servers can’t read your bundles, and a real-time device log dashboard that shows exactly what happened on each device without requiring Xcode or Android Studio [homepage][2].

The project is AGPL-3.0 licensed, deployed on Cloudflare Workers and Supabase in its cloud configuration, and can be self-hosted using only Supabase. The company runs the cloud product but publishes the backend as open source [README].


Why people choose it

The honest reason most Capacitor teams land on Capgo is Appflow’s shutdown. If you were on Appflow, your choices narrow fast: Capgo, a raw CI/CD setup with manual OTA scripting, or abandoning live updates entirely. Capgo is the only project that has built a complete Capacitor-native OTA stack with channels, rollback, encryption, and analytics as a package [homepage].

Beyond the migration story, there are genuine technical reasons:

The app store review wall is the real enemy. A bug that breaks a checkout flow on iOS can cost a week in Zapier-style delays: build, submit, review, wait, wait some more. Capgo sidesteps that entirely for JavaScript layer fixes. The homepage makes this point with a comparison that’s blunt enough to be accurate: the with-Capgo path is dev → build → live, versus the without-Capgo path which adds submit → review → wait → maybe live [homepage].

Delta updates are not obvious to build yourself. Capgo’s delta/manifest mode only ships changed files, not the full bundle. A team maintaining a large Capacitor app with a significant JS footprint will notice this in bandwidth and update speed. The homepage claims up to 90% bandwidth savings [homepage].

The device log system solves a real operational problem. Without Capgo, diagnosing “why did 3% of our users not get the latest build?” requires either Crashlytics spelunking or reproducing it locally. Capgo captures the full OTA journey per device: download start, checksum verification, policy blocks, rollback events, specific failure codes like network_timeout, out_of_memory, and rateLimited. Engineering, QA, and support can look at the same timeline without anyone needing to run Xcode [homepage].

Compliance story is real. SOC 2 Type II and GDPR compliance for the cloud product is listed on the homepage. For B2B mobile apps where enterprise clients ask about data handling, this matters [homepage].

The weak spots are also honest. The community is small — 185 GitHub stars is not a number that inspires confidence if you need to hire someone to help you debug a self-hosting issue. No major tech publications have reviewed it. The support path is Discord or email [1], which is fine for a small team and insufficient if you have an incident at 2am and a 50K-user SLA.


Features

Core update delivery:

  • OTA push for iOS, Android, and Electron [README]
  • Capacitor 5/6/7/8 support [README]
  • Full bundle (entire JS bundle) or delta/manifest (only changed files) [homepage]
  • Background download, applied on next app launch; configurable: atInstall, onLaunch, always [homepage]
  • Delay conditions: wait for a specific date, background event, native version, or kill event before applying [homepage]
  • Version blocking by semver: block major, minor, patch, or metadata upgrades [homepage]

Channels and targeting:

  • Multiple release channels (prod, staging, QA) [README]
  • Assign specific devices to specific channels for per-user QA or debugging [README]
  • Rollback to the last working bundle automatically if an incompatible bundle is detected [README]

Security:

  • End-to-end encryption — bundles are encrypted before upload, only decryptable by the app using your private key; Capgo’s servers cannot read bundle contents [2][README]
  • External URL upload: store the bundle on your own server, give Capgo only the download link [2]
  • Capgo never stores your source code — only the minified/compiled output, same as what a browser receives [2]

Observability:

  • Real-time device logs showing the full OTA event timeline per device [homepage]
  • Specific error codes surfaced: update_fail, rateLimited, needPlanUpgrade, network_timeout, out_of_memory [homepage]
  • Update adoption analytics: track version distribution across active users in real time [homepage]
  • Bandwidth saved metrics [homepage]

CI/CD integration:

  • CLI for bundle upload: npx @capgo/cli@latest bundle upload [2]
  • Documented GitHub Actions and GitLab CI integration [2]
  • Native build requests via CLI for iOS/Android: npx @capgo/cli@latest build request — credentials are never stored on Capgo servers, auto-deleted after build [3]
  • Build number auto-increment configurable [3]

Infrastructure (cloud):

  • 300+ edge locations via Cloudflare Workers, 13,000+ network connections, 44ms typical latency [homepage]
  • 99.99% uptime; 95% of users on latest version within 24 hours [homepage]
  • Self-hosted path: Supabase only (no Cloudflare Workers required for self-hosting) [README]

Pricing: SaaS vs self-hosted math

The honest answer here is: the provided data does not include specific pricing tier breakdowns, and inventing numbers would be misinformation. What the homepage confirms [homepage]:

  • Free trial: 14 days, no credit card required
  • Plan limits are based on MAU (monthly active users), storage, and bandwidth — not per-update counts [2]
  • Team size is not a paid variable: all plans support unlimited developers, only app metrics are limited [2]

The unlisted pricing page would have the specific numbers. What the MAU-based model means in practice: a small app with 5,000 active users will cost materially less than a 500,000-user app, regardless of how many updates you push per week. This is a better structure than Microsoft’s CodePush (deprecated) or per-build pricing models for teams that ship frequently.

Comparison to the incumbent that matters — Ionic Appflow:

Appflow’s paid plans ran from $49/mo (Starter, limited builds) to $499/mo (Growth) to custom enterprise pricing. For a team shipping 20+ builds per month with multiple environments, Appflow costs accumulated fast and were never predictable as the app scaled. Appflow is shutting down, so this is a historical comparison — but it calibrates what Capgo’s pricing should feel like for former Appflow customers [homepage].

Self-hosted:

  • Capgo software: $0 (AGPL-3.0)
  • Supabase instance: $25/mo on Supabase cloud (Pro tier) or self-hosted on a $10–20/mo VPS
  • Your time to maintain it

The AGPL-3.0 license is the key caveat for self-hosted commercial use: if you modify Capgo’s backend and offer it as a network service, you must release your modifications as open source. If you’re running it internally for your own apps, AGPL is not a problem. If you’re building a white-label update service on top of Capgo, consult a lawyer.


Deployment reality check

The self-hosting path is documented as Supabase-only, which is both an advantage (simpler than the full Cloudflare Workers setup) and a complexity ceiling (Supabase is not a single binary) [README].

What you need for a basic self-hosted setup:

  • A Supabase project (cloud or self-hosted)
  • The Capgo backend deployed against that Supabase instance
  • The @capgo/capacitor-updater plugin added to your Capacitor app
  • A single CapacitorUpdater.notifyAppReady() call in your app startup code [4]
  • The Capgo CLI configured to point at your self-hosted instance via --supa-host and --supa-anon flags [3]

What the docs don’t fully explain:

  • How to set up Supabase Edge Functions for the CRON jobs that Capgo uses for internal tasks [README]
  • Production hardening: reverse proxy, SSL termination, backup strategy for the Supabase instance
  • How the Cloudflare Workers layer (which handles 99% of traffic in Capgo’s own production) is optional vs. necessary for scale [README]

Practical time estimate: A developer comfortable with Supabase and Capacitor can have a working self-hosted instance in 2–4 hours. A team that has never touched Supabase should budget a full day for the initial setup plus another few hours debugging first uploads.

The iOS 18.4 Simulator issue is real: Capgo explicitly documents that it does not run reliably on the iOS 18.4 Simulator due to an upstream issue. Testing requires a real device or a different simulator version [2]. This is a meaningful friction point for developers who do all mobile testing in the simulator.

Support reality: The primary support path is Discord [1]. Email is available but described as the slowest option. For a production app with paying users, Discord-based support from a small company is a risk factor worth naming.


Pros and Cons

Pros

  • Only viable Capacitor-native OTA platform. There is no real alternative for Capacitor apps. CodePush is React Native only, Expo Updates is React Native only. If you’re building with Capacitor and need OTA updates, Capgo is the option [2][homepage].
  • End-to-end encryption that works. Bundles encrypted with your private key before upload, undecryptable by Capgo’s infrastructure [2][README]. This is better than “encrypted in transit” — it’s encrypted in storage too.
  • Delta updates. Only changed files download. 90% bandwidth reduction claimed on the homepage [homepage]. Measurably better user experience for frequent shippers.
  • Device-level observability. Per-device OTA event logs without Xcode or Android Studio. Real error codes, not just “update failed” [homepage].
  • MAU-based pricing instead of per-update. Ship 50 updates in a month or 5 — same cost. No tax on shipping velocity [2].
  • Battle-tested at scale. 3,500+ production apps, 50M+ devices tracked — not a toy project [homepage][README].
  • CI/CD-first design. GitHub Actions and GitLab CI documented; CLI is the primary interface, not a point-and-click dashboard that breaks automation [2][3].
  • Appflow migration path. The company is explicitly positioning for Appflow refugees, which means the migration story is probably more thought-through than most [homepage].

Cons

  • AGPL-3.0, not MIT. If you modify the backend and provide it as a service, you must open-source your changes. This matters for agencies or platform builders. Verify with your legal team before building commercial products on top of it [README].
  • 185 GitHub stars. This is a small number. For comparison, n8n has 100K+ stars, Activepieces has 21K+. A small star count means fewer community-contributed bug fixes, less Stack Overflow coverage, and a higher risk that the project could go quiet [merged profile].
  • Self-hosting requires Supabase. Not a single-binary deploy. You’re either paying Supabase ($25+/mo) or running your own Supabase instance, which is itself a multi-container setup [README].
  • iOS 18.4 Simulator is broken. A documented upstream issue. Testing on real devices is required [2].
  • No independent third-party reviews. Every “review” source available at time of writing is Capgo’s own documentation. You cannot find a neutral senior engineer who has run Capgo at scale and written about the sharp edges. The lack of community discourse is a yellow flag [1][2][3][4].
  • Single-company project. Actively maintained by one company. If the business model changes or the team shrinks, there’s limited community to carry it forward.
  • Discord-first support. Acceptable for hobby projects, inadequate for production apps with uptime requirements [1].
  • Cloudflare Workers complexity not documented for self-hosters. The production setup uses Cloudflare Workers for scale, but self-hosters are told to use Supabase only. What happens when the Supabase-only path hits a scale ceiling is not explained [README].

Who should use this / who shouldn’t

Use Capgo if:

  • You’re currently on Ionic Appflow and need a migration path before it shuts down. This is the strongest use case — Capgo is purpose-built for exactly this migration.
  • You’re building a Capacitor app and want OTA updates from the start without betting on Appflow-era infrastructure.
  • You ship hotfixes frequently and the 2–7 day App Store review cycle is costing you real user churn or revenue.
  • Your app handles sensitive data and end-to-end encrypted updates matter for your compliance story.
  • You have at least one developer comfortable with Supabase and CLI tooling for the self-hosted path.

Skip it and roll your own if:

  • You only need basic OTA delivery and can maintain a simple file server + version-check endpoint. Capgo’s full stack is powerful but overkill for a two-engineer app with occasional updates.

Skip it entirely if:

  • You’re building with React Native. Expo Updates and the legacy CodePush ecosystem are better-documented options.
  • You need a large community forum, thousands of Stack Overflow answers, and agency partners who know the platform. Capgo is not there yet.
  • Your compliance team requires a self-hosted tool with zero SaaS dependency and a large open-source community for supply-chain audit purposes. 185 stars doesn’t clear that bar.
  • You have a 200K+ user app and need guaranteed SLA support with a phone number to call. Discord isn’t it.

Alternatives worth considering

  • Expo EAS Update — The best-documented OTA update platform, but React Native only. If you’re building with Expo/RN, this is your option, not Capgo.
  • AppCenter (Microsoft) — Microsoft’s CodePush is effectively deprecated for React Native and never supported Capacitor. Not a real option.
  • Manual OTA via your own CDN — A version-check endpoint + S3/Cloudflare R2 + the @capgo/capacitor-updater plugin pointing at your server. Technically viable, misses channels/rollback/analytics/encryption. Recommended only if you need to minimize vendor dependency and have the engineering time.
  • Capawesome Cloud — A less well-known Capacitor live update alternative. Smaller still than Capgo.
  • Staying on Appflow until forced off — Not a long-term strategy given the announced shutdown, but some teams are taking this path and migrating later.

There is genuinely no well-established, widely-reviewed open-source Capacitor OTA update alternative to Capgo. The category is thin.


Bottom line

Capgo fills a specific, real gap: OTA updates for Capacitor apps. The technical execution is solid — delta updates, end-to-end encryption, per-device logs, release channels, rollback — and the production metrics (3,500+ apps, 50M+ devices, 99.9% uptime) suggest it runs at meaningful scale. The timing couldn’t be more relevant given Appflow’s shutdown.

The honest reservations are not about the product’s features but about its community footprint. 185 GitHub stars, no independent reviews, Discord-only support, and a single-company AGPL codebase all mean you’re betting on a smaller, less tested ecosystem than the tooling complexity probably warrants. For a Capacitor team that needs OTA updates and can’t maintain a bespoke CDN pipeline, Capgo is the right answer despite those reservations. For a team evaluating whether to invest in OTA updates at all, factor in the thin community as real risk.

If the Supabase setup is the blocker, that’s exactly the kind of one-time deployment unsubbed.co’s parent studio upready.dev handles for clients.


Sources

  1. Capgo Documentation — Tech Support — Getting Help. https://capgo.app/docs/getting-help/
  2. Capgo Documentation — FAQ — Capacitor Live Updates FAQ (code push, bundles, CI integration, encryption). https://capgo.app/docs/faq/
  3. Capgo Documentation — CLI Build Reference — Native iOS/Android build management via Capgo Cloud CLI. https://capgo.app/docs/cli/reference/build/
  4. Capgo Documentation — Manual Update — Capacitor plugin self-hosted manual update configuration and usage examples. https://capgo.app/docs/plugins/updater/self-hosted/manual-update/

Primary sources:

Features

Integrations & APIs

  • Plugin / Extension System
  • REST API

Security & Privacy

  • Encryption

Mobile & Desktop

  • Mobile App