---
description: Switch between Live Update channels at runtime to deliver different app experiences to your users, from beta testing to version-specific updates.
title: Channel Surfing with Capacitor Live Updates - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/capawesome-cloud-channel-surfing.png
---

[ Skip to content](#channel-surfing-with-capacitor-live-updates) 

[ 🎉 Introducing **Capawesome Platform** — one platform for Live Updates, Native Builds, App Store Publishing, and Insider SDKs.](https://capawesome.io) 

* [  Formbricks ](/docs/plugins/formbricks/)
* [  Geocoder ](/docs/plugins/geocoder/)
* [  Google Sign-In ](/docs/plugins/google-sign-in/)
* [  Grafana Faro ](/docs/plugins/grafana-faro/)
* [  libSQL ](/docs/plugins/libsql/)
* [  Live Update ](/docs/plugins/live-update/)
* [  Managed Configurations ](/docs/plugins/managed-configurations/)
* [  Media Session ](/docs/plugins/media-session/)
* [  ML Kit ](/docs/plugins/mlkit/)
* [  Navigation Bar ](/docs/plugins/navigation-bar/)
* [  NFC ](/docs/plugins/nfc/)
* [  OAuth ](/docs/plugins/oauth/)
* [  Pedometer ](/docs/plugins/pedometer/)
* [  Photo Editor ](/docs/plugins/photo-editor/)
* [  PostHog ](/docs/plugins/posthog/)
* [  Printer ](/docs/plugins/printer/)
* [  Purchases ](/docs/plugins/purchases/)
* [  RealtimeKit ](/docs/plugins/realtimekit/)
* [  Screen Orientation ](/docs/plugins/screen-orientation/)
* [  Screenshot ](/docs/plugins/screenshot/)
* [  Secure Preferences ](/docs/plugins/secure-preferences/)
* [  Speech Recognition ](/docs/plugins/speech-recognition/)
* [  Speech Synthesis ](/docs/plugins/speech-synthesis/)
* [  Share Target ](/docs/plugins/share-target/)
* [  Square Mobile Payments ](/docs/plugins/square-mobile-payments/)
* [  SQLite ](/docs/plugins/sqlite/)
* [  Superwall ](/docs/plugins/superwall/)
* [  Torch ](/docs/plugins/torch/)
* [  Wifi ](/docs/plugins/wifi/)
* [  Zip ](/docs/plugins/zip/)
* [  Cloud ](/docs/cloud/)
* [  Live Updates ](/docs/cloud/live-updates/)
* Advanced
* Integrations
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Configuration ](/docs/cloud/native-builds/configuration/)
* [  Environments ](/docs/cloud/native-builds/environments/)
* Guides
* [  Sample Projects ](/docs/cloud/native-builds/sample-projects/)
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  Automations ](/docs/cloud/automations/)
* [  Assist ](/docs/cloud/assist/)
* Account
* Organizations
* [  Organization and User Management ](/docs/cloud/organizations/memberships/)
* [  Single Sign-On (SSO) ](/docs/cloud/organizations/sso/)
* [  Teams ](/docs/cloud/organizations/teams/)
* [  Two-Factor Authentication ](/docs/cloud/organizations/two-factor-authentication/)
* [  Integrations ](/docs/cloud/integrations/)
* [  License Keys ](/docs/cloud/license-keys/)
* [  Webhooks ](/docs/cloud/webhooks/)
* [  Pricing ](https://capawesome.io/pricing/)
* [  FAQ ](/docs/cloud/faq/)
* [  Support ](/docs/cloud/support/)
* [  Contributing ](/docs/contributing/)
* [  LLMs ](/docs/llms/)
* [  Insiders ](/docs/insiders/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/insiders/support/)
* [  FAQ ](/docs/insiders/faq/)
* [  Blog ](/blog/)
* Categories

* [  Version-Specific Channel Surfing ](#version-specific-channel-surfing)
* [  Fetching Available Channels ](#fetching-available-channels)
* [  Try Channel Surfing Today ](#try-channel-surfing-today)
* [  Conclusion ](#conclusion)

* Related links

# Channel Surfing with Capacitor Live Updates[¶](#channel-surfing-with-capacitor-live-updates "Permanent link")

Need to deliver beta builds to testers, target updates by app version, or A/B test features — all without a new app store release? Channel surfing with the [Live Update](/docs/plugins/live-update/) plugin lets you switch between update channels on the fly and deliver different app experiences to different user segments.

[ ![Build and deploy your Capacitor app with Capawesome Cloud](../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](/) 

## What is Channel Surfing?[¶](#what-is-channel-surfing "Permanent link")

Channel surfing is the ability to dynamically switch between Live Update channels at runtime. Instead of hardcoding a single channel name in your app, you can programmatically change which channel your app receives updates from based on user preferences, app version, or other criteria.

This feature unlocks powerful use cases:

* **Beta Testing**: Let users opt-in to beta features by switching to a `beta` channel
* **Version-Specific Updates**: Automatically target the right channel based on your app's native version code
* **A/B Testing**: Deliver different experiences to different user segments
* **Rollback Strategy**: Quickly switch users back to a stable channel if issues arise

## Enabling Channel Surfing[¶](#enabling-channel-surfing "Permanent link")

Channel surfing works out of the box with the Capacitor Live Update plugin. Simply use the [setChannel(...)](/docs/plugins/live-update/#setchannel) method to switch channels, or pass the channel name directly to the [sync(...)](/docs/plugins/live-update/#sync) or [fetchLatestBundle(...)](/docs/plugins/live-update/#fetchlatestbundle) methods.

### Set a Persistent Channel[¶](#set-a-persistent-channel "Permanent link")

Use `setChannel(...)` to persistently change the channel for all future update checks:

`[](#%5F%5Fcodelineno-0-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const switchToBeta = async () => {
[](#%5F%5Fcodelineno-0-4)  await LiveUpdate.setChannel({ channel: 'beta' });
[](#%5F%5Fcodelineno-0-5)  // All future sync() calls will use the 'beta' channel
[](#%5F%5Fcodelineno-0-6)  await LiveUpdate.sync();
[](#%5F%5Fcodelineno-0-7)};
`

### Use a Channel for a Single Update[¶](#use-a-channel-for-a-single-update "Permanent link")

Alternatively, specify the channel directly when checking for updates:

`[](#%5F%5Fcodelineno-1-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-1-2)
[](#%5F%5Fcodelineno-1-3)const checkBetaUpdates = async () => {
[](#%5F%5Fcodelineno-1-4)  const result = await LiveUpdate.sync({ channel: 'beta' });
[](#%5F%5Fcodelineno-1-5)  if (result.nextBundleId) {
[](#%5F%5Fcodelineno-1-6)    console.log('Beta update available');
[](#%5F%5Fcodelineno-1-7)  }
[](#%5F%5Fcodelineno-1-8)};
`

## Version-Specific Channel Surfing[¶](#version-specific-channel-surfing "Permanent link")

A common pattern is to create channels for each native version code, then automatically switch to the correct channel at runtime. This ensures users only receive updates compatible with their installed app version:

`` [](#%5F%5Fcodelineno-2-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-2-2)
[](#%5F%5Fcodelineno-2-3)const syncWithVersionChannel = async () => {
[](#%5F%5Fcodelineno-2-4)  const { versionCode } = await LiveUpdate.getVersionCode();
[](#%5F%5Fcodelineno-2-5)  await LiveUpdate.sync({ channel: `production-${versionCode}` });
[](#%5F%5Fcodelineno-2-6)};
 ``

This approach is **recommended** for managing binary-compatible updates, as detailed in the [Best Practices](/docs/cloud/live-updates/guides/best-practices/#versioned-channels) guide.

## Fetching Available Channels[¶](#fetching-available-channels "Permanent link")

Want to let users choose from available channels? You can fetch a list of all channels for your app using the [fetchChannels()](/docs/plugins/live-update/#fetchchannels) method:

`[](#%5F%5Fcodelineno-3-1)import { LiveUpdate } from '@capawesome/capacitor-live-update';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const fetchChannels = async () => {
[](#%5F%5Fcodelineno-3-4)  const { channels } = await LiveUpdate.fetchChannels();
[](#%5F%5Fcodelineno-3-5)
[](#%5F%5Fcodelineno-3-6)  return channels.map(channel => channel.name);
[](#%5F%5Fcodelineno-3-7)};
`

This returns all channels configured in your Capawesome Cloud app, which you can display to users or use for dynamic channel selection. Please note that the `fetchChannels()` method is only available in the [Live Update SDK](/docs/plugins/live-update/) version **8.2.0** or later. Alternatively, you fetch the list of channels from the [Capawesome Cloud API](/docs/cloud/api/) or hardcode known channel names in your app.

## Try Channel Surfing Today[¶](#try-channel-surfing-today "Permanent link")

Ready to deliver the right updates to the right users? Get started with [Capawesome Cloud](/) and the Live Update SDK today.

[Book a Capawesome Cloud Demo](https://cal.com/team/capawesome/cloud-demo)

## Conclusion[¶](#conclusion "Permanent link")

Channel surfing gives you fine-grained control over how you deliver updates to your users. Whether you're managing version-specific updates, running beta programs, or implementing A/B tests, it makes it simple to deliver the right experience to the right users.

To learn more, check out the [Live Update](/docs/plugins/live-update/) plugin documentation and the [Best Practices](/docs/cloud/live-updates/guides/best-practices/) guide. If you're also interested in temporarily pausing updates for specific channels, take a look at the [Channel Pausing](/blog/capawesome-cloud-channel-pausing/) blog post. If you need per-device control over channel assignments, check out the [Forced Channel Assignments](/blog/capawesome-cloud-forced-channel-assignments/) blog post. If you have any questions, feel free to reach out on the [Capawesome Discord server](https://discord.gg/VCXxSVjefW). For the latest updates, subscribe to the [Capawesome newsletter](/newsletter/).

May 7, 2026 

 Back to top 