Capgo
Capgo Console and backend to manage Instant update for Capacitor apps
Install / Use
/learn @Cap-go/CapgoREADME
Console to manage and distribute your live update
<p align='center'> <img src='https://raw.githubusercontent.com/Cap-go/capgo/main/assets/capgo_banner.png' alt='Capgo - Instant updates for capacitor'/> </p>
<a href="#badge">
<img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg">
</a>
<a href="https://commitizen.github.io/cz-cli/"><img alt="Commitizen friendly" src="https://img.shields.io/badge/commitizen-friendly-brightgreen.svg"></a>
Features
- ☁️ Cloud / Self hosted Support: Use our Cloud to manage your app updates or yours.
- 📦 Bundle Management: Download, assign to channel, rollback.
- 📺 Channel Support: Use channels to manage different environments.
- 🎯 Set Channel to specific device to do QA or debug one user.
- 🔄 Auto Update: Automatically download and set the latest bundle for the app.
- ✅ Official Appflow alternative: our Capacitor updater plugin is the official alternative to Ionic Appflow.
- 🛟 Rollback: Reset the app to last working bundle if an incompatible bundle has been set.
- 🔁 Delta Updates: Make instant updates by only downloading changed files.
- 🔒 Security: Encrypt and sign each updates with best in class security standards.
- ⚔️ Battle-Tested: Used in more than 3000 projects.
- 📊 View your deployment statistics
- 🔋 Supports Android and iOS
- ⚡️ Capacitor 8/7/6/5 support
- 🌐 Open Source: Licensed under GNU AFFERO GENERAL PUBLIC LICENSE
- 🌐 Open Source Backend: Self install our backend in your infra
Usage
Capgo is deployed to production on Cloudflare workers and Supabase.
Cloudflare workers take 99% of the traffic. Supabase is used for internal calls, for internal tasks such as CRON jobs that call functions.
When self-hosted, installing only Supabase is sufficient.
Why Cloudflare Workers + Supabase
We support both deployments for practical reasons:
- Supabase is the legacy backend and the only required piece for self-hosting.
- Cloudflare Workers runs the same backend code (via the Hono adapter) but is much cheaper at Capgo scale. With ~50M devices, Supabase Edge Functions are cost-prohibitive because they follow AWS pricing. Cloudflare is ~10x cheaper for our traffic profile.
In production, we route most traffic through Cloudflare Workers for cost and scale, while Supabase remains the reference backend and the default for self-hosted deployments. Private endpoints and trigger/CRON workloads still run on Supabase in production.
Project structure (self-hosting map)
If you're self-hosting, the key pieces live in a few top-level directories:
supabase/- Primary backend for self-hostingsupabase/functions/- Edge functions (Deno) that power the API_backend/- Core implementation used by both Supabase and Cloudflarepublic/- Public API routes used by customers and appsprivate/- Internal API routes for the console and ops toolingplugins/- Plugin endpoints (updates, stats, channel_self, etc.)triggers/- Database triggers and CRON functions
supabase/migrations/- Database schema and RLS policiessupabase/seed.sql- Local seed data for tests/dev
supabase/schemas/prod.sql- Production schema dump (reference only)cloudflare_workers/- Optional Cloudflare Workers deployment (prod traffic)cloudflare_workers/snippet/- Geo routing for replicas- Worker entry points and deploy config live here
src/- Frontend Vue 3 web console (Vite + Tailwind + DaisyUI)src/pages/- File-based routessrc/components/- Reusable UI componentssrc/services/- API clients and integrationssrc/stores/- Pinia stores
sql/- Raw SQL helpers and maintenance scriptsscripts/- Dev/build scripts used by CI and local toolingtests/- Backend Vitest tests (run in parallel)playwright/- Frontend E2E testsdocs/- Extra documentation and guidesandroid/,ios/- Capacitor native projects (mobile builds)
Quick self-hosting path:
supabase/is enough to run the backend locally.src/is the web console you point to your own backend.cloudflare_workers/is only needed if you want to run the Workers layer instead of (or in front of) Supabase.
Backend endpoints (what lives where)
The backend is split by responsibility to keep routes clear and access scoped:
supabase/functions/_backend/public/- Public API exposed to customers. This is the documented API on the website for customers that want to interact with Capgo programmatically (apps, channels, bundles, devices, etc.).supabase/functions/_backend/private/- Private API used internally. The console (web UI) uses this heavily for admin/ops workflows. It is not publicly accessible. Some UI flows still use the public API where appropriate.supabase/functions/_backend/plugins/- Plugin API used by the@capgo/capacitor-updaterplugin running inside apps:updates- device update checks and bundle download flowstats- upload usage stats from deviceschannel_self- allow a device to opt into a channel (QA/debug)
supabase/functions/_backend/triggers/- Triggers & CRON for automated backend jobs (queue consumers, scheduled tasks, DB-triggered flows).
When self-hosting, you generally expose public + plugins. private should
stay internal and locked down. triggers runs automatically.
Production schema (prod.sql)
supabase/schemas/prod.sql is a schema dump of the production database. It is
generated via bun run schemas (or bun run schemas:local) and is meant for
reference/diffing, not as a source of truth. All actual schema changes live in
supabase/migrations/.
Documentation
https://github.com/Cap-go/capacitor-updater/wiki/Capgo-Sandbox-App
Plugins
All the following official plugins are already installed and pre-configured:
- Action Sheet - Provides access to native Action Sheets.
- App - Handles high level App state and events.
- App Launcher - Allows to check if an app can be opened and open it.
- Browser - Provides the ability to open an in-app browser and subscribe to browser events.
- Camera - Provides the ability to take a photo with the camera or choose an existing one from the photo album.
- Clipboard - Enables copy and pasting to/from the system clipboard.
- Device - Exposes internal information about the device, such as the model and operating system version, along with user information such as unique ids.
- Dialog - Provides methods for triggering native dialog windows for alerts, confirmations, and input prompts.
- [Files
