The Capacitor 9 Beta is here
Capacitor 9 Beta was published today, and headline items from The Road to Capacitor 9 are now available for testing. Cordova compatibility is now optional and only added when using Cordova plugins, iOS is now a source-first Swift package, and core support for foldables and multi-window scenarios has been added (with APIs for things like fold and posture coming soon!).
In addition, this Beta contains three changes that deserve some elaboration: how we are handling Google Play’s optimization requirement, what changes we made in response to npm 12’s install-script policy, and why we now boot iOS through SwiftUI.
R8 is on by default
Starting February 2027, Google Play requires at least 25% optimization, obfuscation, and shrinking for apps larger than 10MB. Failure to comply with this threshold will reduce your app’s visibility in Play search. In response, starting with this Beta, new Capacitor 9 projects have R8 (Google’s shrinker) enabled in release builds, and cap migrate enables it on existing projects.
In most scenarios, this is a largely invisible change; you get the same release build with a smaller binary.
However, plugins that haven’t been updated for R8 can fail silently in release builds. To test, build a release APK/AAB against the beta and check every plugin feature. If something fails in release that worked in debug, open an issue against the plugin’s repo.
If you are a plugin author
Verify your plugin is R8-safe. The core keep rules cover Capacitor APIs transitively; you don’t need to ship your own rules for them.
But if your plugin uses Room, Gson, Retrofit or similar, you own the keep rules for those libraries. Add a consumer-rules.pro file and wire it through consumerProguardFiles in your build.gradle (not proguardFiles which only scopes to your plugin’s test app). @capacitor/health-fitness is the pattern to copy.
Install scripts are off by default in npm 12
Minimum Node support for Capacitor 9 is Node 24, which supports npm 12. This means lifecycle scripts—preinstall, install, and postinstall—don’t run anymore unless the user opts in.
We’ve updated cap doctor and cap migrate to flag plugins whose install scripts npm 12 will skip.
For most apps, nothing changes. The place to pay attention is plugins that run any of those lifecycle scripts because they will break under npm 12 unless you opt in. If a plugin stops working after you upgrade npm, run cap doctor. It will tell you if a plugin’s install script was skipped.
If you are a plugin author
If your plugin’s install flow depends on an npm lifecycle script modifying files outside your package, move that work into Capacitor’s native integration path or document the step as something the consumer must do on their own.
SwiftUI is the iOS entry point
We are on a multi-step journey to update Capacitor’s iOS code base. We started that journey with UIScene adoption in 8.5. In this Beta, Capacitor’s iOS project now boots through SwiftUI instead of the legacy AppDelegate entry point. We’re looking to modernize further, with a migration to Swift 6 planned for Capacitor 10.
For existing projects, cap migrate rewrites the entry point. If you’ve customized AppDelegate.swift beyond the Capacitor defaults, review the migrated code to confirm your customizations carried over.
Capacitor 8 isn’t getting left behind
Not every team can take a major-version jump in a release cycle, so we’re backporting critical pieces of Capacitor 9 to make sure you don’t miss Play Store deadlines and can stay compatible with npm 12:
- The R8 keep rules ship in Capacitor 8.6.0 and the latest 8.x official plugin versions. Flip R8 on in a Capacitor 8 app and get the same optimization options.
- The npm 12 compatibility check in
cap doctorandcap migrateis also available as of Capacitor 8.6.0. UIScenesupport shipped in Capacitor 8.5.0 back in July with a migrator in the CLI.
Try the beta
Install the beta by running the following commands:
npm install @capacitor/core@9.0.0-beta.0 @capacitor/cli@9.0.0-beta.0
npx cap migrate
Please give it a run and report any issues on GitHub.
We are on-track to release Capacitor 9 general availability at the end of November.
As always, a huge thanks to the Capacitor community, especially those who helped test, submitted Pull Requests, and filed Issues during Capacitor 9’s alpha cycle. Please keep it coming during the beta!


