Skip to content

Document Electron support in update docs#495

Open
riderx wants to merge 1 commit intomainfrom
riderx/electron-docs
Open

Document Electron support in update docs#495
riderx wants to merge 1 commit intomainfrom
riderx/electron-docs

Conversation

@riderx
Copy link
Member

@riderx riderx commented Feb 24, 2026

This PR updates Capgo documentation to consistently treat Electron as a first-class update platform alongside iOS and Android. It updates updater API tables, troubleshooting, and public API pages with Electron-aware platform language and channel examples. It also updates live update and webapp channel documentation to cover Electron toggle and default-channel behavior. The landing pages and plugin docs now link Electron-updater messaging more explicitly. These changes are limited to docs and marketing copy; no runtime behavior was modified.

Summary by CodeRabbit

  • New Features
    • Added Electron as a fully supported platform for live updates and deployments alongside iOS and Android
    • Platform targeting and channel management now available for Electron devices
    • Updated documentation and UI to reflect comprehensive Electron support across all features

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 24, 2026

📝 Walkthrough

Walkthrough

The PR expands platform support across the project by adding Electron as a supported platform alongside iOS and Android. Changes include UI component updates to display Electron support and comprehensive documentation updates reflecting Electron compatibility across FAQs, live updates guides, plugin documentation, public API docs, and the homepage.

Changes

Cohort / File(s) Summary
UI Components
src/components/landing/AutomationFeatures.astro, src/components/landing/MonitoringFeatures.astro
Updated labels and added new Electron sub-card with progress metrics to reflect Electron as a supported platform option.
General Documentation
src/content/docs/docs/faq.mdx, src/content/docs/docs/getting-started/troubleshooting.mdx
Expanded platform references from Android/iOS to include Electron in FAQ sections and troubleshooting guidance.
Live Updates Documentation
src/content/docs/docs/live-updates/*.mdx
Updated channel examples, compliance notes, custom storage guidance, feature documentation, and main index to include Electron as a target platform alongside iOS and Android.
Plugin Documentation
src/content/docs/docs/plugin/api.md, src/content/docs/docs/plugins/updater/.../*
Expanded platform availability notes and added Electron support to CapacitorUpdater options, settings, and self-hosted API documentation. Updated type signatures for platform unions to include "electron".
Public API Documentation
src/content/docs/docs/public-api/channels.mdx, src/content/docs/docs/public-api/devices.mdx
Added electron flag to ChannelSet interface and expanded Device.platform type from "ios" | "android" to "ios" | "android" | "electron".
Web App Documentation
src/content/docs/docs/webapp/channels.mdx, src/content/docs/docs/webapp/main-app-page.mdx
Updated toggle descriptions and default channel configuration examples to include Electron platform controls and behavior.
Homepage & Metadata
src/pages/index.astro
Updated LD+JSON structured data to mention Electron support in service and software descriptions.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

💰 Rewarded

Poem

🐰 Hops with delight through docs so fine,
Electron joins iOS, Android in line,
Desktop and mobile, now unified,
Three platforms dancing side by side!
The web hops on with joy today,
More platforms mean more plans to sway!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely summarizes the main change: documenting Electron as a supported platform across the update documentation. All file modifications confirm this is the primary objective.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch riderx/electron-docs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud
Copy link

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f0f481bbec

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

| **`publicKey`** | `string` | Configure the public key for end to end live update encryption Version 2. Available on Android, iOS, and Electron. | `undefined` | 6.2.0 |
| **`version`** | `string` | Configure the current version of the app. This will be used for the first update request. If not set, the plugin will get the version from the native code. Available on Android, iOS, and Electron. | `undefined` | 4.17.48 |
| **`directUpdate`** | `boolean | 'always' | 'atInstall' | 'onLaunch'` | Configure when the plugin should direct install updates. Only for autoUpdate mode. Works well for apps less than 10MB and with uploads done using --delta flag. Zip or apps more than 10MB will be relatively slow for users to update. - false: Never do direct updates (use default behavior: download at start, set when backgrounded) - atInstall: Direct update only when app is installed, updated from store, otherwise act as directUpdate = false - onLaunch: Direct update only on app installed, updated from store or after app kill, otherwise act as directUpdate = false - always: Direct update in all previous cases (app installed, updated from store, after app kill or app resume), never act as directUpdate = false - true: (deprecated) Same as "always" for backward compatibility Activate this flag will automatically make the CLI upload delta in CICD envs and will ask for confirmation in local uploads. Available on Android, iOS, and Electron. | `false` | 5.1.0 |
| **`autoSplashscreen`** | `boolean` | Automatically handle splashscreen hiding when using directUpdate. When enabled, the plugin will automatically hide the splashscreen after updates are applied or when no update is needed. This removes the need to manually listen for appReady events and call SplashScreen.hide(). Only works when directUpdate is set to "atInstall", "always", "onLaunch", or true. Requires the @capacitor/splash-screen plugin to be installed and configured with launchAutoHide: false. Requires autoUpdate and directUpdate to be enabled. Available on Android, iOS, and Electron. | `false` | 7.6.0 |

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove Electron support claim from splashscreen options

This table now says autoSplashscreen is available on Electron, but Electron updates are documented in this repo under the separate @capgo/electron-updater package, whose option list does not include splashscreen settings. Marking this as Electron-supported will cause desktop users to add unsupported config keys and expect splash behavior that never runs, leading to misconfigured update flows and hard-to-diagnose rollout issues.

Useful? React with 👍 / 👎.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
src/content/docs/docs/webapp/main-app-page.mdx (1)

85-91: ⚠️ Potential issue | 🟡 Minor

"both channels" is stale and Electron is missing from the device-update behavior list.

Two related issues introduced by the Electron addition:

  1. Line 87 still says "Mark both channels as 'Default'" but the step above now creates three channels (production-ios, production-android, production-electron). This will confuse readers.

  2. Lines 89–91 list only iOS and Android in the device-update behavior, omitting Electron despite having just added it as a third platform on lines 85–86.

✏️ Proposed fix
-3. Mark both channels as "Default" - Capgo allows this when channels target different platforms
+3. Mark each channel as "Default" - Capgo allows this when channels target different platforms

 When a device requests an update:
 - iOS devices will receive updates from the iOS-enabled default channel
 - Android devices will receive updates from the Android-enabled default channel
+- Electron devices will receive updates from the Electron-enabled default channel
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/webapp/main-app-page.mdx` around lines 85 - 91, Update
the wording that currently reads "Mark both channels as 'Default'" to reflect
three channels (e.g., "Mark each channel as 'Default'") and add Electron to the
device-update behavior list; specifically, adjust the steps that create channels
`production-ios`, `production-android`, and `production-electron` and replace
the stale "both channels" text with "each channel" (or "all channels") and
append a third bullet so the behavior list reads: iOS devices → iOS-enabled
default channel, Android devices → Android-enabled default channel, Electron
devices → Electron-enabled default channel.
src/content/docs/docs/public-api/channels.mdx (1)

122-138: ⚠️ Potential issue | 🟡 Minor

GET response type missing platform fields (ios, android, electron).

The Channel response interface doesn't include ios, android, or electron boolean fields, even though these are settable via the POST endpoint's ChannelSet. If the API actually returns these fields, the response type should be updated for accuracy. This appears to be a pre-existing gap, but since the PR is documenting Electron support, it's a good opportunity to make the response type complete.

#!/bin/bash
# Check if other API docs or channel-related files document the response shape more completely
rg -n 'ios.*android.*electron|Channel.*interface' --type mdx --type md -g '!node_modules' || \
  rg -n 'ios.*android.*electron|Channel.*interface' -g '*.mdx' -g '*.md' -g '!node_modules'
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/public-api/channels.mdx` around lines 122 - 138, The
Channel response interface is missing the boolean platform fields that the API
can return; update the Channel interface to include ios, android, and electron
boolean properties (matching the POST/ChannelSet shape) so responses are
accurately typed—locate the Channel interface declaration and add ios: boolean;
android: boolean; electron: boolean; ensuring naming matches existing fields
(public, disableAutoUpdate, etc.).
src/content/docs/docs/plugins/updater/settings.mdx (1)

345-360: ⚠️ Potential issue | 🟠 Major

Correct platform availability claims in shakeMenu and other settings—they apply only to @capgo/capacitor-updater (iOS & Android), not Electron.

The current documentation claims "Available on Android, iOS, and Electron" for settings like shakeMenu (line 347), but @capgo/capacitor-updater is an iOS and Android native plugin only. Electron uses a separate @capgo/electron-updater plugin with different implementations and settings. For example, shakeMenu relies on device accelerometer input and has no equivalent on desktop Electron—instead, Electron uses a keyboard shortcut (Ctrl+Shift+D / Cmd+Shift+D).

Update the availability statements for platform-specific settings to accurately reflect that they apply to iOS and Android only, and add a note explaining that Electron uses a separate plugin.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/plugins/updater/settings.mdx` around lines 345 - 360,
Update the platform availability text for settings like shakeMenu to state they
apply only to the mobile plugin `@capgo/capacitor-updater` (iOS & Android) rather
than Electron; locate the section mentioning "Available on Android, iOS, and
Electron" and change it to indicate iOS and Android only for the shakeMenu and
other native settings (referencing the shakeMenu setting name), and add a short
note that Electron uses the separate `@capgo/electron-updater` plugin with a
different mechanism (e.g., keyboard shortcut Ctrl+Shift+D / Cmd+Shift+D) instead
of shake gestures.
src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx (1)

272-277: ⚠️ Potential issue | 🟡 Minor

Validate and constrain platform in the runtime handler.

setDeviceChannel() still accepts platform: string. At runtime, invalid values can slip through and still result in assignment. Tighten the type and add an explicit guard for unsupported values.

🔒 Suggested hardening
 async function setDeviceChannel(
   deviceId: string, 
   appId: string, 
   channel: string, 
-  platform: string
+  platform: "ios" | "android" | "electron"
 ): Promise<ChannelResponse> {
+  if (!["ios", "android", "electron"].includes(platform)) {
+    return {
+      status: "error",
+      error: "invalid_platform"
+    }
+  }

Also applies to: 310-315

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx`
around lines 272 - 277, setDeviceChannel currently accepts platform: string
which allows invalid platforms at runtime; change the platform parameter type to
a strict union of supported values (e.g., "ios" | "android" | "web" or your
app's allowed platforms) and add an explicit guard at the start of
setDeviceChannel that checks the platform against the allowed set and
returns/throws a clear error (or ChannelResponse indicating unsupported
platform) if it is invalid; apply the same tightening and guard to the other
handler that mirrors this function (the block referenced around the second
occurrence) so runtime callers cannot assign unsupported platforms.
🧹 Nitpick comments (2)
src/content/docs/docs/live-updates/features.mdx (1)

428-434: Nit: "NEW in 2025" may age quickly.

Since it's now February 2026, the "NEW in 2025" label will increasingly feel outdated. Consider removing the year annotation or updating it to something like "Electron" without the qualifier, to avoid documentation staleness.

Suggested change
-- Electron (NEW in 2025)
+- Electron
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/live-updates/features.mdx` around lines 428 - 434, The
"Electron (NEW in 2025)" label under the "### Multi-Platform Support" section is
time-sensitive and should be updated to avoid aging; edit the "Multi-Platform
Support" block and change the list item "Electron (NEW in 2025)" to a neutral
label like "Electron" (or "Electron (supported)") so the docs remain evergreen —
locate the heading "### Multi-Platform Support" and the bullet "- Electron (NEW
in 2025)" and replace that text accordingly.
src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx (1)

414-425: Add an upgrade migration note for existing databases.

The new electron column is documented in CREATE TABLE, but existing self-hosted deployments also need an ALTER TABLE path to adopt this safely.

🗄️ Suggested migration snippet
 CREATE TABLE channels (
   id SERIAL PRIMARY KEY,
   name VARCHAR(255) NOT NULL,
   app_id VARCHAR(255) NOT NULL,
@@
   ios BOOLEAN DEFAULT true,
   android BOOLEAN DEFAULT true,
   electron BOOLEAN DEFAULT true,
@@
 );
+
+-- For existing deployments upgrading to Electron support:
+ALTER TABLE channels
+  ADD COLUMN IF NOT EXISTS electron BOOLEAN DEFAULT true;
+
+UPDATE channels
+SET electron = true
+WHERE electron IS NULL;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx`
around lines 414 - 425, Add a brief upgrade migration note explaining how
existing self-hosted deployments should add the new electron column to the
channels table; instruct maintainers to run an ALTER TABLE on channels to ADD
COLUMN electron BOOLEAN with DEFAULT true (or NULL then backfill and set NOT
NULL) as part of a transactional migration, include a short suggested SQL
snippet and mention running the migration before updating instances so the
documented CREATE TABLE and existing DBs stay in sync.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/content/docs/docs/faq.mdx`:
- Line 12: Update the user-facing copy to hyphenate compound modifiers: replace
the phrase "over the air updates" in the sentence containing 'Code push, also
referred to as "over the air updates" (OTA)' with "over-the-air updates", and
replace "production ready" wherever it appears (notably in the sentence
mentioning production at or near the content around line 297) with
"production-ready" to follow standard style and improve readability.

In `@src/content/docs/docs/getting-started/troubleshooting.mdx`:
- Line 80: Add a new "Electron Logs" subsection in the troubleshooting doc next
to the existing "Android Logs" and "iOS Logs" sections; mention where native
Electron logs appear (main-process console, renderer DevTools console, and
OS-level crash/console logs), include brief commands/locations to view them
(e.g., main process stdout/stderr, opening DevTools in renderer, and using
system crash log viewers), and recommend checking both main and renderer process
output when debugging updates so Electron users have parity with the Android/iOS
guidance.

In `@src/content/docs/docs/plugin/api.md`:
- Line 22: Update the documentation string for the resetWhenUpdate option to use
the hyphenated form "auto-update flow" instead of "auto update flow"; locate the
table row for the **`resetWhenUpdate`** property in
src/content/docs/docs/plugin/api.md and change the phrase within the description
text to "auto-update flow" to fix the grammar.
- Line 28: The table row for the plugin option directUpdate contains unescaped
pipe characters which break Markdown table cells; update the table entry for
directUpdate so all literal '|' characters inside the Type column and
description are either escaped (use \|) or replaced with HTML entity &#124; or
enclosed in inline code spans to prevent Markdown from treating them as column
separators; ensure the Type cell value (currently `boolean | 'always' |
'atInstall' | 'onLaunch'`) and every occurrence of pipes in the description text
are sanitized while preserving the same wording and backticks around code
values.

In `@src/content/docs/docs/plugins/updater/api.md`:
- Line 20: The docs for the responseTimeout option are inconsistent: the field
is documented as "milliseconds" but the example default shows "20 // (20
second)"; update the API docs entry for responseTimeout to clearly state the
unit as milliseconds and correct the example default to a millisecond value for
20 seconds (e.g., 20000) and adjust the inline comment to match (e.g., 20000 //
(20 seconds)) so the responseTimeout example and description are consistent.

---

Outside diff comments:
In `@src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx`:
- Around line 272-277: setDeviceChannel currently accepts platform: string which
allows invalid platforms at runtime; change the platform parameter type to a
strict union of supported values (e.g., "ios" | "android" | "web" or your app's
allowed platforms) and add an explicit guard at the start of setDeviceChannel
that checks the platform against the allowed set and returns/throws a clear
error (or ChannelResponse indicating unsupported platform) if it is invalid;
apply the same tightening and guard to the other handler that mirrors this
function (the block referenced around the second occurrence) so runtime callers
cannot assign unsupported platforms.

In `@src/content/docs/docs/plugins/updater/settings.mdx`:
- Around line 345-360: Update the platform availability text for settings like
shakeMenu to state they apply only to the mobile plugin `@capgo/capacitor-updater`
(iOS & Android) rather than Electron; locate the section mentioning "Available
on Android, iOS, and Electron" and change it to indicate iOS and Android only
for the shakeMenu and other native settings (referencing the shakeMenu setting
name), and add a short note that Electron uses the separate
`@capgo/electron-updater` plugin with a different mechanism (e.g., keyboard
shortcut Ctrl+Shift+D / Cmd+Shift+D) instead of shake gestures.

In `@src/content/docs/docs/public-api/channels.mdx`:
- Around line 122-138: The Channel response interface is missing the boolean
platform fields that the API can return; update the Channel interface to include
ios, android, and electron boolean properties (matching the POST/ChannelSet
shape) so responses are accurately typed—locate the Channel interface
declaration and add ios: boolean; android: boolean; electron: boolean; ensuring
naming matches existing fields (public, disableAutoUpdate, etc.).

In `@src/content/docs/docs/webapp/main-app-page.mdx`:
- Around line 85-91: Update the wording that currently reads "Mark both channels
as 'Default'" to reflect three channels (e.g., "Mark each channel as 'Default'")
and add Electron to the device-update behavior list; specifically, adjust the
steps that create channels `production-ios`, `production-android`, and
`production-electron` and replace the stale "both channels" text with "each
channel" (or "all channels") and append a third bullet so the behavior list
reads: iOS devices → iOS-enabled default channel, Android devices →
Android-enabled default channel, Electron devices → Electron-enabled default
channel.

---

Nitpick comments:
In `@src/content/docs/docs/live-updates/features.mdx`:
- Around line 428-434: The "Electron (NEW in 2025)" label under the "###
Multi-Platform Support" section is time-sensitive and should be updated to avoid
aging; edit the "Multi-Platform Support" block and change the list item
"Electron (NEW in 2025)" to a neutral label like "Electron" (or "Electron
(supported)") so the docs remain evergreen — locate the heading "###
Multi-Platform Support" and the bullet "- Electron (NEW in 2025)" and replace
that text accordingly.

In `@src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx`:
- Around line 414-425: Add a brief upgrade migration note explaining how
existing self-hosted deployments should add the new electron column to the
channels table; instruct maintainers to run an ALTER TABLE on channels to ADD
COLUMN electron BOOLEAN with DEFAULT true (or NULL then backfill and set NOT
NULL) as part of a transactional migration, include a short suggested SQL
snippet and mention running the migration before updating instances so the
documented CREATE TABLE and existing DBs stay in sync.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c8ba744 and f0f481b.

📒 Files selected for processing (22)
  • src/components/landing/AutomationFeatures.astro
  • src/components/landing/MonitoringFeatures.astro
  • src/content/docs/docs/faq.mdx
  • src/content/docs/docs/getting-started/troubleshooting.mdx
  • src/content/docs/docs/live-updates/channels.mdx
  • src/content/docs/docs/live-updates/compliance.mdx
  • src/content/docs/docs/live-updates/custom-storage.mdx
  • src/content/docs/docs/live-updates/features.mdx
  • src/content/docs/docs/live-updates/index.mdx
  • src/content/docs/docs/plugin/api.md
  • src/content/docs/docs/plugins/updater/api.md
  • src/content/docs/docs/plugins/updater/index.mdx
  • src/content/docs/docs/plugins/updater/local-dev/capacitor-updater.mdx
  • src/content/docs/docs/plugins/updater/self-hosted/auto-update.mdx
  • src/content/docs/docs/plugins/updater/self-hosted/handling-channels.mdx
  • src/content/docs/docs/plugins/updater/self-hosted/handling-stats.mdx
  • src/content/docs/docs/plugins/updater/settings.mdx
  • src/content/docs/docs/public-api/channels.mdx
  • src/content/docs/docs/public-api/devices.mdx
  • src/content/docs/docs/webapp/channels.mdx
  • src/content/docs/docs/webapp/main-app-page.mdx
  • src/pages/index.astro

### What is "code push"?[](https://capgo.app/docs/#what-is-code-push "Direct link to What is \"code push\"?")

Code push, also referred to as "over the air updates" (OTA) is a cloud service enabling Capacitor developers to deploy updates to their apps in production. Capgo currently works on Android and iOS and will eventually work everywhere Capacitor works.
Code push, also referred to as "over the air updates" (OTA) is a cloud service enabling Capacitor developers to deploy updates to their apps in production. Capgo currently works on Android, iOS, and Electron.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hyphenate compound modifiers in user-facing copy.

At Line 12, use “over-the-air updates”. At Line 297, use “production-ready” for standard style and readability.

✏️ Proposed wording fix
-Code push, also referred to as "over the air updates" (OTA) is a cloud service enabling Capacitor developers to deploy updates to their apps in production. Capgo currently works on Android, iOS, and Electron.
+Code push, also referred to as "over-the-air updates" (OTA) is a cloud service enabling Capacitor developers to deploy updates to their apps in production. Capgo currently works on Android, iOS, and Electron.

-Currently, Capgo supports Android, iOS, and Electron. All are production ready.
+Currently, Capgo supports Android, iOS, and Electron. All are production-ready.

Also applies to: 297-297

🧰 Tools
🪛 LanguageTool

[grammar] ~12-~12: Use a hyphen to join words.
Context: ...") Code push, also referred to as "over the air updates" (OTA) is a cloud servic...

(QB_NEW_EN_HYPHEN)


[grammar] ~12-~12: Use a hyphen to join words.
Context: ...Code push, also referred to as "over the air updates" (OTA) is a cloud service en...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/faq.mdx` at line 12, Update the user-facing copy to
hyphenate compound modifiers: replace the phrase "over the air updates" in the
sentence containing 'Code push, also referred to as "over the air updates"
(OTA)' with "over-the-air updates", and replace "production ready" wherever it
appears (notably in the sentence mentioning production at or near the content
around line 297) with "production-ready" to follow standard style and improve
readability.

### Debugging with Native Logs

In addition to the Capgo debug command, the native logs on Android and iOS can provide valuable troubleshooting information, especially for issues on the native side of the update process.
In addition to the Capgo debug command, the native logs on Android, iOS, and Electron can provide valuable troubleshooting information, especially for issues on the native side of the update process.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Missing Electron-specific logging section.

Line 80 now mentions Electron alongside Android and iOS, and there are dedicated subsections for "Android Logs" (line 82) and "iOS Logs" (line 106), but no corresponding "Electron Logs" section. Users on Electron won't know where to find native logs (e.g., Electron main-process console, DevTools, or OS-level logging). Consider adding a brief Electron Logs subsection for completeness.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/getting-started/troubleshooting.mdx` at line 80, Add a
new "Electron Logs" subsection in the troubleshooting doc next to the existing
"Android Logs" and "iOS Logs" sections; mention where native Electron logs
appear (main-process console, renderer DevTools console, and OS-level
crash/console logs), include brief commands/locations to view them (e.g., main
process stdout/stderr, opening DevTools in renderer, and using system crash log
viewers), and recommend checking both main and renderer process output when
debugging updates so Electron users have parity with the Android/iOS guidance.

| **`autoDeleteFailed`** | `boolean` | Configure whether the plugin should use automatically delete failed bundles. Available on Android, iOS, and Electron. | `true` | |
| **`autoDeletePrevious`** | `boolean` | Configure whether the plugin should use automatically delete previous bundles after a successful update. Available on Android, iOS, and Electron. | `true` | |
| **`autoUpdate`** | `boolean` | Configure whether the plugin should use Auto Update via an update server. Available on Android, iOS, and Electron. | `true` | |
| **`resetWhenUpdate`** | `boolean` | Automatically delete previous downloaded bundles when a newer native app bundle is installed to the device. Setting this to false can broke the auto update flow if the user download from the store a native app bundle that is older than the current downloaded bundle. Upload will be prevented by channel setting downgrade_under_native. Available on Android, iOS, and Electron. | `true` | |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Minor grammar nit: "auto update" should be hyphenated.

Per static analysis (LanguageTool), line 22 contains "auto update flow" which should be "auto-update flow". This is on a changed line.

✏️ Proposed fix
-Setting this to false can broke the auto update flow if the user download from the store...
+Setting this to false can broke the auto-update flow if the user download from the store...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| **`resetWhenUpdate`** | `boolean` | Automatically delete previous downloaded bundles when a newer native app bundle is installed to the device. Setting this to false can broke the auto update flow if the user download from the store a native app bundle that is older than the current downloaded bundle. Upload will be prevented by channel setting downgrade_under_native. Available on Android, iOS, and Electron. | `true` | |
| **`resetWhenUpdate`** | `boolean` | Automatically delete previous downloaded bundles when a newer native app bundle is installed to the device. Setting this to false can broke the auto-update flow if the user download from the store a native app bundle that is older than the current downloaded bundle. Upload will be prevented by channel setting downgrade_under_native. Available on Android, iOS, and Electron. | `true` | |
🧰 Tools
🪛 LanguageTool

[grammar] ~22-~22: Use a hyphen to join words.
Context: ...Setting this to false can broke the auto update flow if the user download from th...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/plugin/api.md` at line 22, Update the documentation
string for the resetWhenUpdate option to use the hyphenated form "auto-update
flow" instead of "auto update flow"; locate the table row for the
**`resetWhenUpdate`** property in src/content/docs/docs/plugin/api.md and change
the phrase within the description text to "auto-update flow" to fix the grammar.

| **`statsUrl`** | `string` | Configure the URL / endpoint to which update statistics are sent. Available on Android, iOS, and Electron. Set to "" to disable stats reporting. | `https://plugin.capgo.app/stats` | |
| **`publicKey`** | `string` | Configure the public key for end to end live update encryption Version 2. Available on Android, iOS, and Electron. | `undefined` | 6.2.0 |
| **`version`** | `string` | Configure the current version of the app. This will be used for the first update request. If not set, the plugin will get the version from the native code. Available on Android, iOS, and Electron. | `undefined` | 4.17.48 |
| **`directUpdate`** | `boolean | 'always' | 'atInstall' | 'onLaunch'` | Configure when the plugin should direct install updates. Only for autoUpdate mode. Works well for apps less than 10MB and with uploads done using --delta flag. Zip or apps more than 10MB will be relatively slow for users to update. - false: Never do direct updates (use default behavior: download at start, set when backgrounded) - atInstall: Direct update only when app is installed, updated from store, otherwise act as directUpdate = false - onLaunch: Direct update only on app installed, updated from store or after app kill, otherwise act as directUpdate = false - always: Direct update in all previous cases (app installed, updated from store, after app kill or app resume), never act as directUpdate = false - true: (deprecated) Same as "always" for backward compatibility Activate this flag will automatically make the CLI upload delta in CICD envs and will ask for confirmation in local uploads. Available on Android, iOS, and Electron. | `false` | 5.1.0 |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

MD056: directUpdate row has unescaped | characters breaking the Markdown table.

The description for directUpdate contains literal pipe characters (e.g., boolean | 'always' | ...) inside a Markdown table cell. These are interpreted as additional column separators, causing the markdownlint MD056 violation and likely breaking table rendering.

Escape the pipes in the Type column and within the description text:

✏️ Proposed fix (excerpt)
-| **`directUpdate`** | `boolean | 'always' | 'atInstall' | 'onLaunch'` | Configure when ...
+| **`directUpdate`** | `boolean \| 'always' \| 'atInstall' \| 'onLaunch'` | Configure when ...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| **`directUpdate`** | `boolean | 'always' | 'atInstall' | 'onLaunch'` | Configure when the plugin should direct install updates. Only for autoUpdate mode. Works well for apps less than 10MB and with uploads done using --delta flag. Zip or apps more than 10MB will be relatively slow for users to update. - false: Never do direct updates (use default behavior: download at start, set when backgrounded) - atInstall: Direct update only when app is installed, updated from store, otherwise act as directUpdate = false - onLaunch: Direct update only on app installed, updated from store or after app kill, otherwise act as directUpdate = false - always: Direct update in all previous cases (app installed, updated from store, after app kill or app resume), never act as directUpdate = false - true: (deprecated) Same as "always" for backward compatibility Activate this flag will automatically make the CLI upload delta in CICD envs and will ask for confirmation in local uploads. Available on Android, iOS, and Electron. | `false` | 5.1.0 |
| **`directUpdate`** | `boolean \| 'always' \| 'atInstall' \| 'onLaunch'` | Configure when the plugin should direct install updates. Only for autoUpdate mode. Works well for apps less than 10MB and with uploads done using --delta flag. Zip or apps more than 10MB will be relatively slow for users to update. - false: Never do direct updates (use default behavior: download at start, set when backgrounded) - atInstall: Direct update only when app is installed, updated from store, otherwise act as directUpdate = false - onLaunch: Direct update only on app installed, updated from store or after app kill, otherwise act as directUpdate = false - always: Direct update in all previous cases (app installed, updated from store, after app kill or app resume), never act as directUpdate = false - true: (deprecated) Same as "always" for backward compatibility Activate this flag will automatically make the CLI upload delta in CICD envs and will ask for confirmation in local uploads. Available on Android, iOS, and Electron. | `false` | 5.1.0 |
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 28-28: Table column count
Expected: 5; Actual: 8; Too many cells, extra data will be missing

(MD056, table-column-count)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/plugin/api.md` at line 28, The table row for the plugin
option directUpdate contains unescaped pipe characters which break Markdown
table cells; update the table entry for directUpdate so all literal '|'
characters inside the Type column and description are either escaped (use \|) or
replaced with HTML entity &#124; or enclosed in inline code spans to prevent
Markdown from treating them as column separators; ensure the Type cell value
(currently `boolean | 'always' | 'atInstall' | 'onLaunch'`) and every occurrence
of pipes in the description text are sanitized while preserving the same wording
and backticks around code values.

| **`autoSplashscreen`** | <code>boolean</code> | Automatically handle splashscreen hiding when using directUpdate. When enabled, the plugin will automatically hide the splashscreen after updates are applied or when no update is needed. This removes the need to manually listen for appReady events and call SplashScreen.hide(). Only works when directUpdate is set to "atInstall", "always", or true. Requires the @capacitor/splash-screen plugin to be installed and configured with launchAutoHide: false. Requires autoUpdate and directUpdate to be enabled. Only available for Android and iOS. | <code>false</code> | 7.6.0 |
| **`periodCheckDelay`** | <code>number</code> | Configure the delay period for period update check. the unit is in seconds. Only available for Android and iOS. Cannot be less than 600 seconds (10 minutes). | <code>600 // (10 minutes)</code> | |
| **`appReadyTimeout`** | <code>number</code> | Configure the number of milliseconds the native plugin should wait before considering an update 'failed'. Available on Android, iOS, and Electron. | <code>10000 // (10 seconds)</code> | |
| **`responseTimeout`** | <code>number</code> | Configure the number of milliseconds the native plugin should wait before considering API timeout. Available on Android, iOS, and Electron. | <code>20 // (20 second)</code> | |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Clarify responseTimeout unit/default to avoid misconfiguration.

Line 20 says the value is in milliseconds, but the default shown is 20 // (20 second), which reads as 20ms. Please make the unit and default consistent (for example, 20000 for 20 seconds).

🛠️ Suggested correction
-| **`responseTimeout`**        | <code>number</code>                             | Configure the number of milliseconds the native plugin should wait before considering API timeout. Available on Android, iOS, and Electron.                                                                                                                                                                                                                                                                                                                                                                                                                                            | <code>20 // (20 second)</code>                     |         |
+| **`responseTimeout`**        | <code>number</code>                             | Configure the number of milliseconds the native plugin should wait before considering API timeout. Available on Android, iOS, and Electron.                                                                                                                                                                                                                                                                                                                                                                                                                                            | <code>20000 // (20 seconds)</code>                 |         |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| **`responseTimeout`** | <code>number</code> | Configure the number of milliseconds the native plugin should wait before considering API timeout. Available on Android, iOS, and Electron. | <code>20 // (20 second)</code> | |
| **`responseTimeout`** | <code>number</code> | Configure the number of milliseconds the native plugin should wait before considering API timeout. Available on Android, iOS, and Electron. | <code>20000 // (20 seconds)</code> | |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/docs/docs/plugins/updater/api.md` at line 20, The docs for the
responseTimeout option are inconsistent: the field is documented as
"milliseconds" but the example default shows "20 // (20 second)"; update the API
docs entry for responseTimeout to clearly state the unit as milliseconds and
correct the example default to a millisecond value for 20 seconds (e.g., 20000)
and adjust the inline comment to match (e.g., 20000 // (20 seconds)) so the
responseTimeout example and description are consistent.

@riderx
Copy link
Member Author

riderx commented Feb 27, 2026

@copilot fix conflicts

Copy link
Contributor

Copilot AI commented Feb 27, 2026

@riderx I've opened a new pull request, #504, to work on those changes. Once the pull request is ready, I'll request review from you.

@riderx
Copy link
Member Author

riderx commented Feb 28, 2026

@copilot fix the conflict of your PR

Copy link
Contributor

Copilot AI commented Feb 28, 2026

@riderx I've opened a new pull request, #506, to work on those changes. Once the pull request is ready, I'll request review from you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants