lichess • Free Online Chess
Large community app where tournaments, analysis, and social features need careful validation.
- Google Play installs
- 11.3M
- Store rating
- 4.3
Beta Testing
Testers install your app once. After that, each JavaScript, HTML, or CSS change goes to a beta channel they joined from the app, and they get it on the next update check. Changes to native code still go through TestFlight or a Play testing track.
Ship web changes to beta testers through Capgo live update channels.
14-day unlimited free trial. No credit card required
Allow self-assignment on a channel with --self-assign. Your app lists channels with listChannels() and moves the device with setChannel(), so a tester can join beta from a settings screen.
setChannel() referenceSet a device override in the Capgo console to put a single tester's phone on a channel without changing the app. Overrides are removed 90 days after they were last set.
Device overridesEnable previews for the app once. Then get-qr, or --qr-preview on upload, prints a QR code and preview links for a bundle or channel that you can post in your QA thread.
get-qr referenceLive updates change JavaScript, HTML, CSS, and assets. When you add a plugin or touch native code, send a new TestFlight or Play testing build, then keep iterating on it with channels.
What needs a native buildTesters still install the app once, from TestFlight, a Play testing track, or the store. Channels take over from there for web-layer changes. What needs a native build
How it works
One installed build, a channel testers can join, and one CLI upload per change. Every command below is from the Capgo docs.
Self-assignment lets the app move a device onto this channel. Leave it off on your production channel.
npx @capgo/cli@latest channel add beta com.example.app --self-assign
Channels docs
setChannel() asks Capgo whether the channel allows self-assignment, then stores it on the device. triggerAutoUpdate starts an update check right away.
import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Join beta and check for its bundle now
await CapacitorUpdater.setChannel({ channel: 'beta', triggerAutoUpdate: true })
// Leave beta and go back to the default channel
await CapacitorUpdater.unsetChannel({ triggerAutoUpdate: true })
setChannel() reference
Enable previews once. After that, print a QR code with every upload so testers and reviewers can open the new bundle.
# once
npx @capgo/cli@latest app set com.example.app --preview
# every change
npx @capgo/cli@latest bundle upload --channel beta --qr-preview
get-qr reference
Link the tested bundle to production, or roll it out to a share of production devices first. Testers stay on beta until they leave it.
npx @capgo/cli@latest channel set production com.example.app \
--bundle 1.4.2
# or roll it out to 10% of production first
npx @capgo/cli@latest channel set production com.example.app \
--rollout-bundle 1.4.2 --rollout-percentage 10 --rollout-enable
Progressive rollouts docs
QA keeps one installed build and moves between qa, beta, and feature channels instead of reinstalling for each JavaScript change.
Add a Join beta switch that calls setChannel(). Users who leave call unsetChannel() and go back to the default channel.
Send a QR code from get-qr so product owners can open the preview of a specific bundle or channel.
Apps built with Capacitor
High-usage consumer apps can validate game, learning, or forecast flows with a closed tester group before every user receives the new experience.
Large community app where tournaments, analysis, and social features need careful validation.
Education workflows where onboarding and practice changes should be reviewed before release.
Forecast and map interactions where product changes need confidence before expanding.
Customer proof
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.”
Developer, Webincode
“Being able to add Device ID's to certain groups and push the changes to only certain groups is a life saver.”
nethead emeritors
“Great job on the updater plugin. It works flawlessly for me, and live updates are a super accelerator for quick testing turnaround.”
FAQ
Short answers about testers, builds, and what still needs TestFlight.
Only for web-layer changes. Testers install your app once from TestFlight, a Play testing track, or the store. After that, JavaScript, HTML, CSS, and asset changes can reach them through a channel. Adding a plugin, upgrading Capacitor, or changing native code or Capacitor config needs a new binary.
What needs a native buildTurn on self-assignment for the beta channel, then call setChannel({ channel: 'beta' }) from a screen in your app. Capgo checks that the channel allows it and the device stores the choice. unsetChannel() sends the device back to the default channel. The default channel itself cannot be joined with setChannel().
setChannel() referenceYes. Open the device in the Capgo console and set a channel override. It can take up to 2 minutes to reach every edge server, and it is removed 90 days after it was last set. Channels chosen in the app with setChannel() do not appear in that list.
Device overridesIncrease CapacitorUpdater.version for every native build. With the default settings, bundles downloaded for the older build are removed when the newer one is installed. You can also turn off updates for development builds and emulators on the channel.
Test native builds without live updatesCall notifyAppReady() once your app has loaded. If a new bundle does not call it within 10 seconds, the device marks it as failed and goes back to the previous working bundle.
notifyAppReady() and automatic rollbackCreate a channel testers can join, add the switch, and send your first bundle during the 14-day free trial. No credit card needed.
Create a Capgo beta channel and push live updates to opted-in testers.
human support from Martin
14-day unlimited free trial. No credit card required