---
title: "Capawesome October 2026 Update: Electron Live Updates & More"
description: The Capawesome October 2026 update brings Live Updates for Electron and Ionic Portals, multi-channel automations, a new Tab Bar plugin and more.
date:
  created: 2026-11-03
  updated: 2026-11-03
authors:
  - robingenz
categories:
  - Updates
---

# Capawesome October 2026 Update

The Capawesome October update is here! Live Updates now reach Electron desktop apps and Ionic Portals apps, automations publish a web build to several channels at once, the `macos-golden-gate` build stack became the default, and the new Tab Bar plugin brings the Liquid Glass tab bar of iOS 26 to Capacitor apps. This update includes new features and improvements for [Capawesome Cloud](../../cloud/index.md) and our [Plugins](../../sdks/capacitor/index.md). Let's take a look at the most important changes.

<!-- more -->

<div class="capawesome-z29o10a">
  <a href="https://capawesome.io/" target="_blank">
    <img alt="Thousands of teams ship faster with Capawesome Cloud Native Builds and Live Updates" src="https://capawesome.io/assets/banners/cloud-teams-ship-faster-with-capacitor.png" />
  </a>
</div>

## Blog

October brought a long list of guides to the blog. Here are the highlights:

- [Google Play DEX Code Optimization in Capacitor Apps](./google-play-dex-code-optimization-in-capacitor-apps.md), the fix for the Play Console finding that becomes a requirement in February 2027.
- [Auto-Submit a Capacitor App to TestFlight and Google Play](./auto-submit-capacitor-app-to-testflight-and-google-play.md), which wires a Git push to a store submission with one automation.
- Everything about location in the background: [How to Track Location in the Background with Capacitor](./how-to-track-location-in-the-background-with-capacitor.md), [Android Foreground Services for Location in Capacitor](./android-foreground-service-for-location-in-capacitor.md), [How to Add Geofencing to an Ionic App](./how-to-add-geofencing-to-an-ionic-app.md) and [Working Around the 20-Geofence Limit on iOS](./how-to-work-around-the-ios-geofence-limit.md).
- Two guides for the File Transfer plugin: [Downloading Files in the Background in Capacitor](./how-to-download-files-in-the-background-in-capacitor.md) and [Pause and Resume Downloads in Capacitor](./how-to-pause-and-resume-downloads-in-capacitor.md).
- Barcode scanning beyond the basics: [Batch Barcode Scanning in a Capacitor App](./capacitor-batch-barcode-scanning.md) and [Capacitor Barcode Scanning Without Google Play Services](./capacitor-barcode-scanning-without-google-play-services.md).
- Health data on both platforms: [Reading Step Counts on iOS and Android with Capacitor](./how-to-read-step-counts-in-a-capacitor-app.md) and [How to Check HealthKit Read Permission Status in Capacitor](./how-to-check-healthkit-read-permission-status.md).
- [MapLibre vs. Google Maps: Which Map SDK to Use?](./maplibre-vs-google-maps.md), [Persistent Folder Access in Capacitor Apps](./capacitor-persistent-folder-access.md) and [Reading Large Files in Capacitor Without base64](./reading-large-files-in-capacitor-without-base64.md).

## Cloud

### Live Updates for Electron

Live Updates now work for desktop apps built with the [Capacitor Electron platform](../../sdks/capacitor/electron.md). A desktop app uses the same Capawesome Cloud app and app ID as your mobile app, so nothing changes in the Console: the Live Update SDK downloads the new web bundle, the platform serves it, and the packaged Electron binary stays untouched. Versioned channels work the same way as on mobile, and the `--electron-min`, `--electron-max` and `--electron-eq` flags of `apps:liveupdates:create` pin a bundle to an Electron app version. Delta updates are not available on the desktop, so Electron apps always receive `zip` bundles. You need `@capawesome/capacitor-live-update` 8.5.0 and `@capawesome/capacitor-electron` 0.2.0 or later. [Update Electron Apps](../../cloud/live-updates/electron.md) covers the setup and the differences to mobile.

### Live Updates for Ionic Portals

Ionic Portals 0.14 is the first release built on the Ionic Live Update Provider SDK, and version 8.7.0 of the Live Update SDK ships the matching `LiveUpdateIonicManager`. A native Portals host constructs one manager per Portal, Portals reads the bundle directory from that manager when it loads the web view, and the manager keeps the bundle current by syncing with Capawesome Cloud. Each web app that you ship in a Portal uses its own Capawesome Cloud app, with channels and code signing included, while the native host app stays untouched. [Update Ionic Portals Apps](../../cloud/live-updates/ionic-portals.md) lists the prerequisites and the per-platform setup, and [Migrating Ionic Portals Live Updates to Capawesome Cloud](./migrating-ionic-portals-live-updates-from-appflow-to-capawesome.md) walks through the reference app if you come from Appflow.

### Multi-Channel Automations

An automation that creates a web build can now [publish it to several channels](../../cloud/automations/auto-publish-live-update.md#publish-to-multiple-channels) at once. Select each channel in the **Channels** field of the automation dialog, or repeat the `--channel` option when you create the automation with the CLI:

```bash
npx @capawesome/cli apps:automations:create \
  --name web-release \
  --platform web \
  --trigger-type branch \
  --trigger-pattern main \
  --channel production \
  --channel staging
```

This completes the multi-channel deployments from September: one Git push can now feed a staging channel and a production rollout channel without a second automation.

### Default Build Stack

The [`macos-golden-gate` build stack](../../cloud/native-builds/build-stacks.md) is now the default for every build that does not select a stack, and since October 31 it runs Xcode 27.2. If you want to stay on `macos-tahoe` for a while, for example until your app is ready for Xcode 27, set it as the [default build stack](../../cloud/native-builds/build-stacks.md#set-a-default-build-stack) of your app in the Console or with [`apps:update`](../../cloud/cli/commands.md#appsupdate), instead of passing `--stack` on every build. The CLI also accepts the default channel, configuration and environment of an app by name, so you no longer need to look up their IDs.

### Devices Filtered by Channel

The [devices list](../../cloud/live-updates/devices.md) in the Console and the API can now be filtered by channel. This makes it easy to see how many devices have already moved to a new channel, for example during a staged rollout, or to check that a QA device is pinned to the channel you expect.

### End of OAuth Git Connections

Support for Git connections with the personal account (OAuth) method ended on November 1, 2026, and all remaining OAuth connections are removed on December 31, 2026. Signing in to Capawesome Cloud no longer requests access to your repositories. Repositories are connected per organization via [Git connections](../../cloud/integrations/index.md). If you connected GitHub with your personal account, an organization owner or admin can [upgrade the connection to the GitHub App](../../cloud/integrations/github.md#upgrade-from-personal-account-oauth) in place. The connection keeps its ID, so all apps linked to it, their builds and their automations keep working. For Bitbucket and Azure DevOps, edit the connection and switch to one of the other authentication methods.

## Plugins

### Tab Bar

We are excited to announce the initial release of the [Capacitor Tab Bar plugin](../../sdks/capacitor/tab-bar.md)! It displays a native iOS tab bar over the web view: the Liquid Glass tab bar on iOS 26 and the classic tab bar on earlier versions. Tabs use SF Symbols or images from your asset catalog as icons and can show badges, [`setColors(...)`](../../sdks/capacitor/tab-bar.md#setcolors) customizes the selected and unselected tabs, and the plugin extends the bottom safe area inset of the web view so your content is never covered. A launch configuration in your Capacitor configuration shows the tab bar from the first frame, before your web app has loaded. Set the tabs with [`setTabs(...)`](../../sdks/capacitor/tab-bar.md#settabs) and react to taps with the `tabSelected` event:

```typescript
import { TabBar } from '@capawesome/capacitor-tab-bar';

const showTabBar = async () => {
  await TabBar.setTabs({
    tabs: [
      { id: 'home', title: 'Home', systemImage: 'house.fill' },
      { id: 'inbox', title: 'Inbox', systemImage: 'tray.fill', badge: '3' },
      { id: 'profile', title: 'Profile', image: 'profile-icon' },
    ],
    selectedTabId: 'home',
  });
  await TabBar.show();
  await TabBar.addListener('tabSelected', event => {
    console.log('Tab selected:', event.id);
  });
};
```

The plugin is available on iOS and supports CocoaPods and Swift Package Manager.

### File Transfer

Version 0.2.0 of the [Capacitor File Transfer plugin](../../sdks/capacitor/file-transfer.md) changes how transfers that the system stops are reported. Instead of `failed`, such a transfer ends in the new `interrupted` state with an `interruptionReason` of `appTerminated` or `timeLimitReached`, and the plugin emits a `transferInterrupted` event. Interrupted transfers are not failures: resume them with [`resumeTransferById(...)`](../../sdks/capacitor/file-transfer.md#resumetransferbyid). On Android, all running transfers now share one notification that you configure with the new [`setConfig(...)`](../../sdks/capacitor/file-transfer.md#setconfig) method, and the foreground service stops cleanly when Android 15 reaches its daily `dataSync` time limit instead of crashing. Both changes are breaking and documented in the plugin's `BREAKING.md`. Version 0.2.1 keeps the foreground service running when the next transfer starts right after the last one finished.

### SQLite

Version 0.5.0 of the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md) makes value handling consistent across all platforms. Whole numbers are bound as `INTEGER` and booleans as `1` and `0` in [`query(...)`](../../sdks/capacitor/sqlite.md#query) and [`execute(...)`](../../sdks/capacitor/sqlite.md#execute), integers outside the safe range come back as `number` instead of `bigint` on the web, and BLOB values are returned and accepted as `number[]` everywhere. On Electron, the plugin migrated to the `@capawesome/capacitor-electron` platform contract and requires Electron 39 or later, and the documentation explains how to keep the `userData` directory when you migrate. Most of these changes are breaking, so check the `BREAKING.md` before you upgrade.

### Haptics

Version 0.2.0 of the [Capacitor Haptics plugin](../../sdks/capacitor/haptics.md) adds [`playAndroidComposition(...)`](../../sdks/capacitor/haptics.md#playandroidcomposition), which plays a composition of haptic primitives on Android 12 and newer, for example the double click that Android uses for toggles:

```typescript
import {
  AndroidHapticPrimitiveType,
  Haptics,
} from '@capawesome/capacitor-haptics';

const playToggleOn = async () => {
  await Haptics.playAndroidComposition({
    primitives: [
      { type: AndroidHapticPrimitiveType.Tick, scale: 0.5 },
      { type: AndroidHapticPrimitiveType.Click, delay: 50 },
    ],
  });
};
```

On iOS, the new `parameterCurves` option of [`playPattern(...)`](../../sdks/capacitor/haptics.md#playpattern) shapes intensity and sharpness over time. All times and durations of `playPattern(...)` are now milliseconds, `performAndroidHaptic(...)` was renamed to [`performAndroidHapticFeedback(...)`](../../sdks/capacitor/haptics.md#performandroidhapticfeedback) and now respects the system touch feedback setting, and the `PATTERN_PLAYBACK_FAILED` error code is now `PLAYBACK_FAILED`. These renames are breaking changes.

### Live Update

The [Capacitor Live Update plugin](../../sdks/capacitor/live-update.md) shipped four releases in October. Version 8.5.0 adds the Electron platform and 8.7.0 the Ionic Live Update Provider SDK integration described in the Cloud section. Version 8.6.0 uses one device ID per installation across all app IDs on Android, so an app that switches app IDs no longer counts as a new device. On iOS, [`fetchLatestBundle(...)`](../../sdks/capacitor/live-update.md#fetchlatestbundle) now rejects on network failures and invalid responses instead of resolving with no update. And version 8.7.1 pauses the `readyTimeout` rollback timer while the app is in the background, so an app that is sent to the background right after an update no longer rolls back by mistake.

### Liquid Glass on iOS 26

Several plugins adopted the Liquid Glass design of iOS 26: the [Capacitor Toast plugin](../../sdks/capacitor/toast.md), [Capacitor Option Picker plugin](../../sdks/capacitor/option-picker.md) and [Capacitor Datetime Picker plugin](../../sdks/capacitor/datetime-picker.md) render their native UI in the new style without any change to your code. The [Capacitor Action Sheet plugin](../../sdks/capacitor/action-sheet.md) shows the native action sheet with its cancel button again on iPhone with iOS 26, and the [Capacitor In-App Browser plugin](../../sdks/capacitor/in-app-browser.md) lets content scroll under the navigation bar and applies `toolbar.color` to the toolbar buttons.

### MapLibre

The [Capacitor MapLibre plugin](../../sdks/capacitor/maplibre.md) gained a heatmap layer type, expressions for layer paint properties, the `circleBlur` paint property and a `filter` option for layers, and a `point` property on `MarkerClickEvent`. On iOS, the plugin now forwards touches to the map view and reattaches it when WebKit recreates its container, and the Swift package was renamed to `CapawesomeCapacitorMaplibre` so that the `Package.swift` generated by `npx cap sync` resolves.

### App Update and App Review

[`openAppStore(...)`](../../sdks/capacitor/app-update.md#openappstore) of the [Capacitor App Update plugin](../../sdks/capacitor/app-update.md) and [`openAppStore(...)`](../../sdks/capacitor/app-review.md#openappstore) of the [Capacitor App Review plugin](../../sdks/capacitor/app-review.md) accept the new `androidStorePackageName` option, which opens the store listing in a specific store app, for example the Samsung Galaxy Store or the Huawei AppGallery. The App Update plugin also rejects [`completeFlexibleUpdate()`](../../sdks/capacitor/app-update.md#completeflexibleupdate) when the installation fails and keeps emitting `onFlexibleUpdateStateChange` until a final install status.

### File Opener

[`openFile(...)`](../../sdks/capacitor/file-opener.md#openfile) of the [Capacitor File Opener plugin](../../sdks/capacitor/file-opener.md) now rejects with the error codes `FILE_NOT_FOUND`, `OPEN_FAILED` and `FILE_ALREADY_OPEN`, so your app can tell a missing file from a failed handoff. On iOS, the plugin rejects while a file preview is already open instead of stacking a second preview.

### Node.js

Version 0.2.0 of the [Capacitor Node.js plugin](../../sdks/capacitor/nodejs.md) supports all `TextDecoder` encodings and `Intl` locales in the Node.js runtime. On Android, the `nodejsMobileVersion` variable was replaced by `nodejsMobileAndroidUrl` and `nodejsMobileAndroidSha256`, which is a breaking change documented in the plugin's `BREAKING.md`.

### YouTube Player

The [Capacitor YouTube Player plugin](../../sdks/capacitor/youtube-player.md) accepts the new `host` option in [`createPlayer(...)`](../../sdks/capacitor/youtube-player.md#createplayer) on iOS and web, which enables YouTube's privacy-enhanced mode via `youtube-nocookie.com`. On iOS, the plugin replaced the `YoutubePlayerView` dependency with a built-in player view.

### Speech Recognition

Version 8.1.4 of the [Capacitor Speech Recognition plugin](../../sdks/capacitor/speech-recognition.md) fixes three iOS issues: text is no longer duplicated in `partialResult` and `result` when the recognizer revises earlier words, a late result or error of a stopped session no longer leaks into the next session, and a session no longer ends after the first finalized segment when `useSpeechTranscriber` is enabled.

### Vault and Secure Preferences

The [Capacitor Vault plugin](../../sdks/capacitor/vault.md) and [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md) now persist writes synchronously on Android, so a value survives the app process being killed right after [`setValue(...)`](../../sdks/capacitor/vault.md#setvalue) or [`set(...)`](../../sdks/capacitor/secure-preferences.md#set) resolves.

### Firebase

Version 8.6.0 of the [Capacitor Firebase](../../sdks/capacitor/firebase/index.md) plugins ships the following changes.

#### Authentication

The `PhoneVerificationFailedEvent` of the [Capacitor Firebase Authentication plugin](../../sdks/capacitor/firebase/authentication.md) carries a new `code` property, and [`useEmulator(...)`](../../sdks/capacitor/firebase/authentication.md#useemulator) accepts a `disableWarnings` option on the web. On iOS, a cancelled Facebook Limited Login flow rejects with `Sign in canceled.` or `Link canceled.`, and on Android, failed `applyActionCode`, `confirmPasswordReset`, `deleteUser`, `reload`, `sendSignInLinkToEmail`, `updateEmail`, `updatePassword` and `updateProfile` calls now reject instead of resolving.

#### Cloud Messaging

The [Capacitor Firebase Cloud Messaging plugin](../../sdks/capacitor/firebase/cloud-messaging.md) delivers every data message received before the plugin was loaded on Android instead of only the last one. On iOS, the deprecated `alert` presentation option was replaced with `banner` and `list`.

### ML Kit

#### Document Scanner

The [Capacitor ML Kit Document Scanner plugin](../../sdks/capacitor/mlkit/document-scanner.md) delivers the result of [`scanDocument(...)`](../../sdks/capacitor/mlkit/document-scanner.md#scandocument) via the `appRestoredResult` event if Android destroyed the app while the scanner was open.

#### Barcode Scanning

The [Capacitor ML Kit Barcode Scanning plugin](../../sdks/capacitor/mlkit/barcode-scanning.md) restores the original WebView background after [`stopScan()`](../../sdks/capacitor/mlkit/barcode-scanning.md#stopscan) instead of forcing a white background.

## Try Capawesome Cloud

Live Updates for Electron and Ionic Portals, multi-channel automations and the default build stack are live today. [Capawesome Cloud](../../cloud/index.md) builds, signs, publishes and updates your Capacitor apps from one place, and the 14-day trial needs no credit card.

[Try Capawesome Cloud Free](https://console.cloud.capawesome.io){ .md-button .md-button--primary }

## Conclusion

If you ship a desktop or Ionic Portals app, set up Live Updates for it this month, and if you still connect Git with a personal account, upgrade the connection before it is removed on December 31. On the plugin side, read the `BREAKING.md` of File Transfer, SQLite and Haptics before you upgrade. If you missed the last update, catch up with the [September 2026 update](./2026-september-update.md).

If you have any questions or need help, feel free to join the [Capawesome Discord server](https://discord.gg/VCXxSVjefW){:target="_blank"}. And don't forget to subscribe to the [Capawesome newsletter](https://capawesome.io/newsletter/){:target="_blank"} to stay updated on the latest news and updates.
