Compared to previous updates, the transition from Capacitor 4 to Capacitor 5 involves minimal breaking changes. This guide provides step-by-step instructions for updating your project to Capacitor 5, as well as a list of breaking changes for official plugins.
Note: Capacitor 5 requires NodeJS 16 or higher, as Node 12 has reached end-of-life and Node 14 will reach end-of-life on April 30th, 2023. It is recommended to use the latest LTS version of NodeJS.
- 
Install the
latestversion of the Capacitor CLI in your project:npm i -D @capacitor/cli@latest - 
Run the following command to let the CLI handle the migration:
npx cap migrateIf any migration steps cannot be achieved, additional information will be provided in the terminal output. Manual migration steps are listed below.
 - 
If you have the VS Code extension installed, check the recommendations section of the extension to find the option to migrate your project to Capacitor 5.
 
Upgrading Capacitor 4 iOS Project to Capacitor 5
- 
Upgrade Xcode: Capacitor 5 requires Xcode 14.1+.
 - 
Update .gitignore: Make the following changes to your
.gitignorefile:- App/Podfile.lock+ App/output - 
Update Assets to use a single app icon: Xcode 14 supports a single app icon of 1024x1024. Clean up your AppIcon.appiconset by removing all unnecessary sizes.
 
Upgrading Capacitor 4 Android Project to Capacitor 5
- 
Upgrade Android Studio: Capacitor 5 requires Android Studio Flamingo | 2022.2.1 or newer due to the usage of Gradle 8, which requires Java JDK 17. Java 17 ships with Android Studio Flamingo, so no additional downloads are needed.
 - 
Run AGP Upgrade Assistant: Android Studio can help with some updates related to Gradle and moving packages into build files. To start, run
Tools -> AGP Upgrade Assistant. - 
Update Android Project Variables: In your
variables.gradlefile, update your values to the following new minimums:minSdkVersion = 22compileSdkVersion = 33targetSdkVersion = 33androidxActivityVersion = '1.7.0'androidxAppCompatVersion = '1.6.1'androidxCoordinatorLayoutVersion = '1.2.0'androidxCoreVersion = '1.10.0'androidxFragmentVersion = '1.5.6'coreSplashScreenVersion = '1.0.0'androidxWebkitVersion = '1.6.1'junitVersion = '4.13.2'androidxJunitVersion = '1.1.5'androidxEspressoCoreVersion = '3.5.1'cordovaAndroidVersion = '10.1.1' - 
Update Google Services:
build.gradle dependencies {- classpath 'com.google.gms:google-services:4.3.13'+ classpath 'com.google.gms:google-services:4.3.15'} - 
Update Gradle plugin to 8.0.0:
build.gradle dependencies {- classpath 'com.android.tools.build:gradle:7.2.1'+ classpath 'com.android.tools.build:gradle:8.0.0'} - 
Update Gradle wrapper to 8.0.2:
gradle-wrapper.properties distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/dists- distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zipzipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/dists - 
Disable Jetifier:
gradle.properties android.useAndroidX=true- android.enableJetifier=true - 
Move package to
build.gradle:AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?>- <manifest xmlns:android="http://schemas.android.com/apk/res/android"- package="[YOUR_PACKAGE_ID]">+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">build.gradle android {+ namespace "[YOUR_PACKAGE_ID]"compileSdkVersion rootProject.ext.compileSdkVersion - 
Update androidScheme: In Capacitor 6,
httpswill be the default setting forandroidSchemefor existing apps to better enable Capacitor applications to use the system Autofill feature. To avoid data loss as a result of this change, set the scheme tohttpnow, even if it’s the current default.{server: {androidScheme: "http"}} - 
Update Kotlin version: If your project uses Kotlin, update the
kotlin_versionvariable to'1.8.20'. 
Plugin Functionality Changes
The following plugin functionality has been modified or removed. Update your code accordingly:
- Action Sheet
 - Browser
 - Camera
 - Device
 - Geolocation
 - Google Maps
 - Local Notifications
 - Push Notifications
 - Status Bar
 
Action Sheet
- Update the 
androidxMaterialVersionvariable to1.8.0. 
Browser
- Update the 
androidxBrowserVersionvariable to1.5.0. 
Camera
- For Android 13, add the read media images permission (
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>) inAndroidManifest.xml. - Update the 
androidxMaterialVersionvariable to1.8.0. - Update the 
androidxExifInterfaceVersionvariable to1.3.6. 
Device
- Change 
DeviceId.uuidtoDeviceId.identifier. - On iOS 16+, 
DeviceInfo.namewill return a generic device name unless you add the appropriate entitlements. 
Geolocation
- Update the 
playServicesLocationVersionto21.0.1. 
Google Maps
- Update the following variables:
googleMapsPlayServicesVersionto18.1.0.googleMapsUtilsVersionto3.4.0.googleMapsKtxVersionto3.4.0.googleMapsUtilsKtxVersionto3.4.0.kotlinxCoroutinesVersionto1.6.4.androidxCoreKTXVersionto1.10.0.kotlin_versionto1.8.20.
 
Local Notifications
- For Android 13, a new runtime permission check is required to schedule local notifications when targeting SDK 33. Call 
checkPermissions()andrequestPermissions()accordingly. 
Push Notifications
- For Android 13, a new runtime permission check is required to receive push notifications when targeting SDK 33. Call 
checkPermissions()andrequestPermissions()accordingly. - Update the 
firebaseMessagingVersionvariable to23.1.2. 
Status Bar
- On iOS, the default status bar animation has been changed to 
FADE. 
By following these steps and updating your code accordingly, you should now have successfully updated your project from Capacitor 4 to Capacitor 5. Make sure to test your application thoroughly to ensure that all features and plugins are working as expected.