Brand variants multiply fast
Each customer wants its own logo, theme, feature set, content, and launch date. Separate forks turn those requests into maintenance you pay for on every release.
White-label and multi-tenant apps
Give each tenant, brand, or location its own Capgo channel. Update one tenant's web layer without touching the others, and build branded native shells with Capgo Build.
14-day unlimited free trial. No credit card required
Shell
Capacitor app
Tenants
Channels
Native
Capgo Build
The Problem
Each customer wants its own logo, theme, feature set, content, and launch date. Separate forks turn those requests into maintenance you pay for on every release.
A menu typo or onboarding fix for one tenant should not wait for a new binary and store review, often 24–48 hours, sometimes much longer.
One global update can break every brand at once. One fork per brand slows the whole team down. You need a release lane per tenant.
Common setups
Each business customer gets its own logo, theme, onboarding copy, and feature set, and receives updates on its own channel.
Each restaurant, clinic, gym, or branch gets local menus, assets, and campaign screens as live updates, without a new binary.
A host app lists workspaces or mini-apps and moves the device to the matching Capgo channel at runtime with setChannel().
The Solution
The native shell stays shared. Each tenant's web layer moves through its own channel.
Each tenant, franchise, or workspace gets a channel. Ship to one tenant or to all of them, and roll back one channel without touching the others.
Channels docsWith self-assignment on, the app calls setChannel() to put a device on its tenant's channel. Capgo still validates the channel on every update check.
setChannel() referenceTenants often run different native versions. Block major updates per channel, or set a minimum native version, so a bundle only reaches shells that can run it.
Version targeting docsBuild each Android flavor or iOS scheme in the cloud and upload it to the stores. Use live updates for the web layer that changes every week.
Build optionsHow it works
One Capacitor codebase, one channel per tenant. The commands and code are from the Capgo CLI and updater docs.
Each tenant gets a channel with its own bundle and history. Allow self-assignment so the app can move a device onto it.
npx @capgo/cli@latest channel add acme com.example.app --self-assign
npx @capgo/cli@latest channel add globex com.example.app --self-assign
Channels docs
Build the web layer with the tenant's theme and config, then upload it to that tenant's channel only. Other tenants keep their current bundle.
npx @capgo/cli@latest bundle upload --channel acme
npx @capgo/cli@latest bundle upload --channel globex
Rollback docs
After sign-in, call setChannel() with the tenant's channel. The choice is stored on the device and takes effect on the next update check.
import { CapacitorUpdater } from '@capgo/capacitor-updater'
await CapacitorUpdater.setChannel({
channel: tenant.channel,
triggerAutoUpdate: true,
})
setChannel() reference
When a tenant needs its own store listing, icon, or permissions, build that flavor or scheme with Capgo Build. No Mac of your own needed.
npx @capgo/cli@latest build request com.acme.app --platform android --android-flavor acme
npx @capgo/cli@latest build request com.acme.app --platform ios --ios-scheme Acme
Build options
Apps built with Capacitor
Regional sports, entertainment, and telecom brands can reuse one app foundation while changing schedules, campaigns, support, and market-specific content for each brand or country.
Regional sports media app where schedules and local content need market control.
Entertainment guide where content surfaces vary by market and programming window.
Carrier app where shared account patterns still need local product and support content.
Customer proof
Developer, Webincode
“Being able to add Device ID's to certain groups and push the changes to only certain groups is a life saver.”
CTO, Private
“Getting set up took less than a day. Channel-based rollouts let me test on my own device before anything hits production users.”
Lead Developer, drivolino GmbH
“The Capgo Capacitor Updater plugin completely transformed how we ship updates. What used to take days now takes just minutes.”
FAQ
What teams ask before running many brands on one Capgo setup.
Only when each brand has its own app ID in the stores. One store app that serves many tenants is one Capgo app with a channel per tenant. Separate branded store apps are separate Capgo apps, each with its own channels.
Channels docsYes. If the tenant's channel allows self-assignment, call setChannel() from the app. On current plugin versions the choice is stored on the device and used on the next update check.
setChannel() referenceUse version targeting. Block major updates on a channel, or set a minimum native version on a bundle, so older shells keep a bundle they can run.
Version targeting docsYes. Each channel keeps its own bundle history. Roll the tenant's channel back to an earlier bundle, and the other channels keep what they have.
Rollback docsApp names, icons, permissions, native plugins, and native code live in the binary. Capgo Build can build each flavor or scheme and upload it to App Store Connect and Google Play.
Capgo Build docsDuring the 14-day trial, create two tenant channels, upload a bundle to each, and switch a test device between them with setChannel().
human support from Martin
14-day unlimited free trial. No credit card required
Enterprise needs? Talk to our team