Brand variants multiply fast
Every customer wants its own logo, theme, feature flags, content, compliance text, and launch timing. Separate forks turn those requests into permanent maintenance debt.
White-label app operations
The business promise is simple: sell many branded apps without maintaining many apps. Capgo makes that operationally realistic with channels for tenant-specific bundles, Builder for native shells, and rollback when one brand needs a fast fix.
Shell
Capacitor app
Tenants
Channels
Safety
Rollback
The Problem
Every customer wants its own logo, theme, feature flags, content, compliance text, and launch timing. Separate forks turn those requests into permanent maintenance debt.
A menu typo, onboarding fix, or customer-only feature should not force every tenant through a binary release and app store review.
One global update can break every brand at once. One fork per brand makes the team slow. The release model needs a middle path.
Concrete models
A B2B SaaS customer gets its own logo, theme, onboarding copy, and feature flags without forcing every other customer onto the same update.
Each restaurant, clinic, gym, or local branch can receive local menus, assets, campaign screens, and content updates without a new binary.
A host app can list approved mini-apps or customer workspaces and switch the device to the matching Capgo channel at runtime.
Implementation example
Use the same Capacitor shell for every tenant. Publish tenant-specific web bundles to Capgo channels, then let the app switch to the right channel from login, organization selection, or an internal admin screen.
# Publish tenant-specific web bundles from the same app
npx @capgo/cli@latest bundle upload --channel acme
npx @capgo/cli@latest bundle upload --channel globex
npx @capgo/cli@latest bundle upload --channel north-branch import { CapacitorUpdater } from '@capgo/capacitor-updater'
export async function switchTenant(channel: string) {
await CapacitorUpdater.setChannel({ channel })
const latest = await CapacitorUpdater.getLatest()
const bundle = await CapacitorUpdater.download({
url: latest.url,
version: latest.version,
})
await CapacitorUpdater.set({ id: bundle.id })
} The Solution
The Capgo model keeps the native app stable and moves brand-specific web experiences through controlled channels.
Create a channel for each tenant, franchise, workspace, customer, or app variant. Push only the bundle that brand should receive.
Promote a shared fix to every channel when it is safe, or isolate a release to one customer when the change is specific.
If a tenant-specific bundle breaks, roll that channel back without disturbing every other branded app.
Use Builder for a new native shell when icons, permissions, plugins, or store metadata change. Use OTA for the brand content that changes weekly.
Release model
White-label operations become manageable when every tenant has a clear release lane and every lane can be monitored independently.
Keep shared auth, analytics, billing, navigation, and native plugins in one Capacitor app instead of rebuilding them per customer.
Map each customer, franchise, location, or workspace to a Capgo channel with its own update history and release cadence.
Ship customer-specific JavaScript, CSS, assets, config, copy, and experiments without app store review.
Promote proven changes wider, pause risky rollouts, or roll back only the tenant that needs it.
User signal
The point users repeat is control. They want tenant 42 to get its urgent fix today without moving tenant 1, tenant 7, and every app store listing at the same time.
Common white-label customer feedback
Real app examples
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.
Separate channels by brand or region
Reuse one release workflow
Patch market-specific content fast
SPORTS
Regional sports media app where schedules and local content need market control.
View Google Play listingENTERTAINMENT
Entertainment guide where content surfaces vary by market and programming window.
View Google Play listingTOOLS
Carrier app where shared account patterns still need local product and support content.
View Google Play listingPublic app store data is used as an example only. This is not a Capgo customer claim.
Build the app shell once, map every tenant to a controlled Capgo channel, and keep each brand moving without a separate codebase.