Skip to content

Logs

The Logs page provides a detailed history of update events and diagnostic information for your application. This is crucial for monitoring the update process, troubleshooting issues, and understanding how your devices interact with Capgo. You can access it by clicking on your app and then clicking on the “Logs” tab (previously named “updates” in some older screenshots or documentation).

From there you should see a page similar to this, displaying a list of log entries:

Logs page overview showing the main interface
Logs Page Overview

The logs page interface includes:

  1. Logs Tab - The navigation tab to access the logs view
  2. Reload Button - Refresh the logs list with the latest data
  3. Time Range & Actions Filters - Filter logs by date range and action type (see sections below)

Each row shows:

  • Timestamp (UTC)
  • Device ID
  • Action code (what happened)
  • Version name (bundle or builtin)

Click a row to jump to the device detail page for the full history.

You can filter logs by a specific time period using the date picker:

Date range picker for filtering logs
Date Range Filter
  1. Quick Presets - Select common time ranges: Last 1h, 3h, 6h, or 12h
  2. Start Time - Set a custom start time for the range
  3. End Time - Set a custom end time for the range
  4. Calendar - Pick specific dates using the calendar view

Click “Select” to apply your chosen date range, or “Cancel” to dismiss the picker.

The Actions dropdown lets you filter logs by specific event types:

Actions filter dropdown for filtering logs by event type
Actions Filter

Available action filters include:

  • Device heartbeat - Periodic health checks from devices
  • Version deletion requested - When a bundle version is deleted
  • Reset to default version - When a device reverts to the builtin bundle
  • Version installed successfully - Successful bundle installation
  • New version sent to device - When Capgo sends an update to a device
  • Version installation failed - When bundle installation fails

Use the search box at the top to quickly find specific action types. You can select multiple actions to show logs matching any of the selected types.

Time (UTC)Device IDActionVersionWhat it tells you
2025-01-14 10:00:01A1B2C3get2.4.1Device asked Capgo if an update is available
2025-01-14 10:00:03A1B2C3download_manifest_start2.4.1Manifest fetch kicked off; SDK is about to download files
2025-01-14 10:00:07A1B2C3download_402.4.1Bundle download is 40% complete
2025-01-14 10:00:12A1B2C3download_zip_complete2.4.1Zip finished downloading
2025-01-14 10:00:13A1B2C3set2.4.1Bundle installed and marked as next to run
2025-01-14 10:05:00B9C8D7disableAutoUpdateToMajor1.9.0Channel policy blocked a jump to 2.x
2025-01-14 10:05:05B9C8D7rateLimitedbuiltinDevice hit the request limit; SDK backs off until restart

To help you understand what the logs tell you, here are example sequences showing real device update journeys:

This is what a healthy update looks like in your logs:

TimeDevice IDActionVersionWhat it means
10:00:01a1b2c3d4get1.2.0Device checked for updates and received version 1.2.0 info
10:00:02a1b2c3d4download_101.2.0Download started, 10% complete
10:00:03a1b2c3d4download_501.2.0Download at 50%
10:00:05a1b2c3d4download_complete1.2.0Download finished successfully
10:00:06a1b2c3d4set1.2.0Bundle installed and activated

When a device checks but already has the latest version:

TimeDevice IDActionVersionWhat it means
14:30:00e5f6g7h8noNew1.2.0Device is already on the latest version, no update needed

When an update fails and the device rolls back:

TimeDevice IDActionVersionWhat it means
11:15:00i9j0k1l2get1.3.0Device received update info
11:15:02i9j0k1l2download_complete1.3.0Download completed
11:15:03i9j0k1l2set1.3.0Bundle was set
11:15:10i9j0k1l2update_fail1.3.0App crashed or notifyAppReady() wasn’t called - rollback triggered
11:15:11i9j0k1l2resetbuiltinDevice reverted to the built-in version

Action needed: Check that your app calls notifyAppReady() after successful initialization. See the plugin documentation for details.

When network issues prevent the download:

TimeDevice IDActionVersionWhat it means
09:45:00m3n4o5p6get1.2.0Device received update info
09:45:01m3n4o5p6download_301.2.0Download started but…
09:45:15m3n4o5p6download_fail1.2.0Download failed (network timeout, connection lost, etc.)

Action needed: The device will retry automatically on next app launch. No action required unless this happens frequently.

When your account reaches its device limit:

TimeDevice IDActionVersionWhat it means
16:00:00q7r8s9t0needPlanUpgrade-This device won’t receive updates until you upgrade or the billing cycle resets

Action needed: Upgrade your plan or wait for the next billing cycle.

When channel settings prevent an update:

TimeDevice IDActionVersionWhat it means
12:00:00u1v2w3x4disableAutoUpdateToMajor2.0.0Device on v1.x can’t auto-update to v2.x (major version jump blocked)
12:05:00y5z6a7b8disableEmulator1.2.0Emulator detected, and channel blocks emulators
12:10:00c9d0e1f2disableDevBuild1.2.0Dev build detected, and channel blocks dev builds

Action needed: These are intentional protections. If you want to allow these updates, modify your channel settings.

These codes come from the stats_action enum used by the dashboard API (capgo/src/types/supabase.types.ts). If you see a new code in the UI, it was emitted by the SDK or backend and validated against this list.

Happy path & lifecycle

Code(s)Meaning
getDevice asked Capgo for the current channel manifest
download_manifest_start, download_manifest_completeManifest download began / finished (for delta or multi-file bundles)
download_zip_start, download_zip_completeZip archive download began / finished
download_10download_90Download progress milestones
download_00% progress marker for the first progress event
download_completeEntire bundle downloaded
setBundle staged for next launch
resetDevice reverted to the builtin bundle
deleteBundle removed from local storage
uninstallApp uninstall detected
app_moved_to_foreground, app_moved_to_backgroundApp lifecycle events recorded by SDK
pingHealth/heartbeat check from device
setChannel, getChannelChannel overridden or fetched via SDK call
CodeWhy this happensWhat to do next
invalidIpCapgo detected traffic that looks like bot traffic (Google/cloud infrastructure IP).Ignore on real users; retry from real devices and normal networks, or check after some time.
needPlanUpgradeOrganization reached plan/device limit.Upgrade plan in dashboard or wait for next billing cycle.
semver_errorNative app version in config is missing or not valid semver (x.y.z).Set plugins.CapacitorUpdater.version to valid semver, then verify it in the SemVer tester and rebuild the app.
disablePlatformIosiOS is disabled in channel policy.If this was accidental, enable iOS in that channel and republish routing. If you intentionally block iOS in this track, keep it off and move iOS builds to a separate channel.
disablePlatformAndroidAndroid is disabled in channel policy.If this was accidental, enable Android in that channel and republish routing. If you intentionally block Android in this track, keep it off and move Android builds to a separate channel.
disableAutoUpdateChannel auto-update mode blocks this update style.Change channel auto-update policy (major/minor/patch/metadata/none) to allow your intended rollout.
disableAutoUpdateUnderNativeChannel is set to block updates older than the device baseline.Push a version at or above the native baseline, or disable that under-native protection.
disableAutoUpdateMetadataChannel requires min_update_version metadata and the app is older.Set min_update_version for the target bundle or release from a newer native version.
disableAutoUpdateToMajorThe channel blocks major version jumps.Keep major versions in the same channel strategy, or allow major jumps for this track.
disableAutoUpdateToMinorThe channel blocks minor version jumps.Keep minor versions in the same channel strategy, or allow minor jumps for this track.
disableAutoUpdateToPatchThe channel blocks patch-level jumps for this flow.Align your release cadence, or open patch jumps in channel policy for this track.
disableEmulatorEmulator updates are not allowed for this channel.If this was accidental, turn on emulator updates in a test channel where you validate emulators. If intentional, keep this channel emulator-blocked and use another channel for emulator builds.
disableDevBuildDev builds are blocked for this channel.If this was accidental, allow dev updates or move this device to a dev-enabled channel. If this is intentional, keep this channel locked to release builds only.
disableProdBuildA device build in production mode called /updates, while your channel blocked it.If this was accidental, allow production updates in that channel and republish. If this is intentional, keep the restriction and send production builds to the proper channel/build.
cannotGetBundleCapgo could not build a valid download URL for the selected bundle.Re-upload the bundle or regenerate manifests and check R2/public bundle settings.
cannotUpdateViaPrivateChannelApp tried to self-switch to a private channel that does not allow self-assignment.Enable allow_device_self_set on the channel or switch to a public/allowed channel.
channelMisconfiguredChannel auto-update rule is missing required data (version_number without min_update_version).Fill the missing config for that rule or switch to a simpler auto-update mode.
missingBundleBundle has no downloadable payload (missing external_url/r2_path and no manifest).Rebuild/re-upload the version and verify the bundle has real file content.
NoChannelOrOverrideNo channel matched this device (no cloud default + no config fallback + no override).Set a channel default in dashboard or keep a test defaultChannel in that build.
rateLimitedToo many update/channel calls in a short time (often render-loop setChannel/getChannel).Stop calling in render. Only call on user action. Use defaultChannel in capacitor.config.
keyMismatchThe app and bundle encryption key IDs differ (device_key_id vs bundle_key_id).In the console, compare device and bundle key IDs. If they differ, publish with the same key and matching CLI/plugin version; key encoding can differ between versions.
disableDeviceA real phone/tablet was blocked because this channel is set to block real devices.If accidental, turn on real-device updates in that channel. If intentional, keep it blocked and route real devices to another channel.
disablePlatformElectronElectron is blocked in this channel.If this was accidental, enable Electron in this channel and republish routing. If intentional, keep it blocked and send Electron users to a dedicated channel.
customIdBlockedA custom device ID was sent, but this app does not accept custom IDs.Turn off custom ID sending or enable custom IDs only if your workflow requires it.
blocked_by_server_urlThe app has server.url configured, so Capacitor serves remote URL instead of local files.Remove/clear server.url for production builds and keep update payloads local.
backend_refusalThe updater is v4, which the backend no longer accepts.Upgrade plugin/CLI to v5+ (prefer v8), with Capacitor v5+, then rebuild and republish bundle metadata.
Configuration or policy blocks
Code(s)Why the update was blocked
disableAutoUpdate, disableAutoUpdateToMajor, disableAutoUpdateToMinor, disableAutoUpdateToPatch, disableAutoUpdateMetadata, disableAutoUpdateUnderNativeChannel strategy forbids this semver jump
disablePlatformIos, disablePlatformAndroidPlatform is disabled on the channel
disableDevBuild, disableEmulatorDev builds or emulators not allowed
disableProdBuild, disableDevice, disablePlatformElectronProduction builds, real devices, or Electron are blocked for this channel.
customIdBlockedCustom device IDs are not accepted for this app.
cannotUpdateViaPrivateChannel, NoChannelOrOverride, channelMisconfiguredChannel selection or override failed
missingBundle, cannotGetBundleManifest refers to a bundle Capgo cannot serve
needPlanUpgradeOrg hit its plan/device limit
rateLimitedToo many requests; SDK throttles until restart
blocked_by_server_url, backend_refusal, invalidIpServer-side rule blocked the request

Download / integrity / install failures

Code(s)Meaning
download_failBundle download failed (network or response error)
download_manifest_file_fail, download_manifest_checksum_fail, download_manifest_brotli_failManifest file couldn’t be retrieved or validated
checksum_fail, checksum_requiredIntegrity check failed or checksum missing
unzip_fail, directory_path_fail, canonical_path_fail, windows_path_failFile system or unzip validation failed
decrypt_failDecryption failed (encrypted bundle)
update_failBundle installed but app never called notifyAppReady(); rollback triggered
download_zip_* with no subsequent setDownload finished but install phase never completed
Code(s)Meaning
app_crash, app_crash_nativeCrash events from JavaScript or native runtime layers. Metadata often includes stack, source, and active version info.
app_anrAndroid reported an Application Not Responding.
app_killed_low_memory, app_killed_excessive_resource_usageApp process termination due to memory or resource limits.
app_initialization_failure, app_memory_warningStartup was interrupted or memory pressure was observed before normal runtime.
webview_javascript_error, webview_unhandled_rejection, webview_resource_error, webview_security_policy_violation, webview_unclean_restart, webview_render_process_gone, webview_content_process_terminatedWebView lifecycle and JS/rendering errors. Install Sentry in both JS and native layers to capture stack traces, session/device context, and URL/state for faster fixes.
os_version_changed, native_app_version_changedOS or native app version changed; this helps separate platform-level rollout effects from web bundle behavior.

➡️ Need deeper per-code guidance? See Full Log Code Reference and Debugging Guide.

If you click on a specific log entry, it will typically take you to the device’s page. This allows you to see the full history for that particular device, which can be very helpful for diagnosing device-specific issues or understanding its update journey.

If you are using Logs to plan dashboard and API operations, connect it with API Overview for the implementation detail in API Overview, Introduction for the implementation detail in Introduction, API Keys for the implementation detail in API Keys, Devices for the implementation detail in Devices, and Bundles for the implementation detail in Bundles.