Release v0.49.0#561
Merged
Merged
Conversation
Merge main back into dev after v0.48.1
Serve the matching Capacitor web bundle from the backend so the native
app stays in sync with whatever server it connects to, replacing the
need to reinstall the APK every release (and avoiding paid live-update
services like Capgo/Capawesome cloud).
Backend:
- New /api/v1/native/bundle/{manifest,download} endpoints serving the
bundle zipped into the image at /app/ota, with a sha256 checksum.
- MIN_NATIVE_VERSION file (read like VERSION) gates web bundles that
need a newer native shell than the installed APK/IPA.
Native:
- @capgo/capacitor-updater (manual/self-hosted mode) downloads the
bundle and prompts Reload Now / Later; notifyAppReady() arms the
failed-boot auto-rollback. The native-compat gate compares
current().native to minNativeVersion (no custom native plugin).
Release/CI:
- promote.sh auto-bumps MIN_NATIVE_VERSION when the native shell
changes (capacitor config, android/ios, or @capacitor/@Capgo deps).
- docker-publish.yml skips the Android build for web-only releases;
they ship Docker-only and update over the air.
Also fixes the root .dockerignore to exclude node_modules/dist so
local image builds don't overlay host modules.
- native.py: use NativeMessages.OTA_BUNDLE_NOT_AVAILABLE constant instead of inline HTTPException detail strings; assert it in tests; map the code in errors.json (en/es/fr). - useNativeUpdate: set handledVersionRef in the native-required branch so the 'App update required' dialog doesn't re-fire on every foreground. - docker-publish.yml: release job now also requires needs.build-android.result != 'failure', so a broken native build is a hard failure rather than a publish with misleading OTA messaging.
If CapacitorUpdater.set() throws (e.g. the OS evicted the downloaded bundle), leave the reload dialog open so the user can retry instead of silently hiding it with no reload.
Filter CapacitorUpdater.list() to status 'success' so a retained error/partial bundle isn't reused (which would make set() throw and, since we'd keep finding it, never re-download — leaving the user stuck on that version).
Self-hosted OTA live updates for the native app
Contributor
|
PR has a label that disables reviews. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changelog
[0.49.0] - 2026-06-01
Added
Post-merge
Tag
v0.49.0will be created automatically, triggering Docker build + GitHub Release.