Last updated
Update the Cordova CLI with npm install -g cordova@latest. Update a platform by removing and re-adding it with an explicit version, such as cordova platform add [email protected], because cordova platform update is rejected by current cordova-android and cordova-ios. Update a plugin by removing it and adding it back at the new version.
Updating Cordova means three separate upgrades: the global CLI, each native platform package (cordova-android, cordova-ios), and every plugin in the project. They version independently, and each has its own Node.js, Xcode or Android SDK floor. Upgrade the CLI first, then platforms, then plugins, and rebuild after each step so you know which one broke the build.
| Package | Latest | Released | Main requirements |
|---|---|---|---|
cordova (CLI) | 13.0.0 | 2025-11-25 | Node.js 20.17.0+ or 22.9.0+ |
cordova-android | 15.1.0 | 2026-07-22 | JDK 17, Build Tools 36, API 24 to 36, Gradle 8.14.2 |
cordova-ios | 8.1.1 | 2026-07-07 | Xcode 15+, deploys to iOS 13+ |
How do you update the Cordova CLI with npm?
The Cordova CLI is an npm package, so you update it with npm: run npm install -g cordova@latest, or npm update -g cordova, then confirm with cordova -v. Cordova CLI 13.0.0 requires Node.js 20.17.0 or newer, so upgrade Node.js first if node -v prints an older version.
node -v # must be 20.17.0+ (or 22.9.0+) for CLI 13
npm uninstall -g cordova # optional clean slate, as the 13.0.0 release notes suggest
npm install -g cordova@latest
cordova -v # prints 13.0.0
On macOS and Linux a global install may fail with a permissions error. The Cordova installation guide allows sudo but recommends against it, and points to a Node version manager such as nvm instead, which installs global packages into your home directory. To pin the CLI per project, install it as a dev dependency with npm install --save-dev cordova and run it through npx cordova, so every developer and CI job builds with the same version.
How do you check which Cordova versions you have?
Run cordova -v for the CLI version and npm info cordova version for the newest published CLI. Inside a project, cordova platform ls lists installed platforms with versions, cordova plugin ls lists plugins with versions, and cordova info prints the whole environment in one block for bug reports.
cordova -v # installed CLI
npm info cordova version # latest CLI on npm
cordova platform ls # e.g. android 14.0.1, ios 7.1.1
cordova plugin ls # every plugin id with its version
cordova info # CLI, platforms, plugins, Node, toolchain
cordova requirements # checks JDK, SDK, Gradle, Xcode for each platform
npm outdated # compares package.json ranges with npm
Cordova saves platforms and plugins in package.json, and the platform and plugin versioning reference says package.json wins when it disagrees with config.xml. That makes npm outdated a quick audit: it lists every cordova-* package whose installed version trails the latest release. cordova requirements exits non-zero when a toolchain piece is missing, so it works as a CI gate.
How do you update a Cordova platform like Android or iOS?
Remove the platform and add it back at the version you want: cordova platform rm android, then cordova platform add [email protected]. The same pattern works for iOS with [email protected]. The platforms/ folder is a build artifact, so the CLI deletes and regenerates it, and any hand edits inside it are lost.
# Android
cordova platform rm android
cordova platform add [email protected]
# iOS (macOS only)
cordova platform rm ios
cordova platform add [email protected]
cordova prepare
cordova build
Why does cordova platform update fail?
The CLI still accepts cordova platform update (alias up), and the CLI reference still documents it. The platforms refuse it. We read the source of cordova-android 15.1.0 and cordova-ios 8.1.1: both reject the call with an error that begins "An in-place platform update is not supported" on Android and "The update platform command is not supported" on iOS, and both tell you to remove and re-add. Older blog posts that show cordova platform update android date from cordova-android 5 and earlier.
Two details from the same source code save time. Both error messages tell you to run cordova plugin save first, but cordova-lib 13 no longer has that subcommand; plugins are already recorded in package.json, and cordova platform add reinstalls every plugin in plugins/ into the new platform on its own. And if you run cordova platform add android with no version, the CLI takes the version from package.json, then from a <engine> tag in config.xml, and only then the latest release on npm. Pass the version explicitly so you get the one you meant.
How do you update Cordova plugins to the latest version?
Cordova has no cordova plugin update command. To update a plugin, remove it with cordova plugin rm <id> and add it back with an explicit version, such as cordova plugin add cordova-plugin-camera@latest. Removing a plugin also deletes its entry from package.json and config.xml unless you pass --nosave.
cordova plugin ls
npm outdated # which cordova-plugin-* packages are behind
cordova plugin rm cordova-plugin-camera
cordova plugin add cordova-plugin-camera@latest
cordova prepare
When you add a plugin from npm without a version, cordova-lib reads the plugin's engines.cordovaDependencies field and picks the newest release that declares support for your installed platform versions. That is a sensible default after a platform upgrade. Plugins that declare variables at install time, such as API keys, need the same --variable NAME=value flags again when you re-add them, so copy them from package.json before removing.
Update platforms before plugins. Apache published a separate guide for plugin authors moving to cordova-ios 8, so a plugin that has not shipped a release since late 2025 may fail to compile against it. Check the plugin's changelog before you upgrade the platform.
What usually breaks after a Cordova update?
Most failed Cordova upgrades come from the toolchain, not your code: a Node.js version below 20.17 for CLI 13, missing Android SDK Platform 36 or Build Tools 36 for cordova-android 15, an Xcode older than 15 for cordova-ios 8, or a plugin that has not shipped a release for the new platform version.
- cordova serve is gone. cordova-lib 13 removed the
cordova servecommand. Scripts that used it for browser testing need a static server such asnpx http-server platforms/browser/www. - Android SDK components missing. The cordova-android 15.0.0 announcement asks for
sdkmanager 'build-tools;36.0.0' 'platforms;android-36', and Android Studio Meerkat Feature Drop is the minimum version for building the project in Android Studio. - Edge-to-edge layout on Android 16. Android 16 enforces edge-to-edge drawing. cordova-android 15 keeps the old non-edge-to-edge layout unless you set the
AndroidEdgeToEdgepreference, and it builds in the status bar features the StatusBar plugin used to provide. - iOS hooks that assume the project name. In cordova-ios 8 the Xcode project and build target are always named
App, which breaks hooks and CI scripts that buildYourAppName.xcworkspace. - Status bar and icons on iOS. cordova-ios 8 drives the status bar from the
viewport-fitandtheme-colormeta tags, accepts a single 1024 by 1024 icon, and does not read the Icon Composer format from Xcode 26. - Lost native edits. Anything changed by hand under
platforms/disappears on remove and add. Move those changes intoconfig.xml,<edit-config>blocks or a hook first.
When an upgrade goes wrong, roll back the same way you upgraded: cordova platform rm ios then cordova platform add [email protected] (or whatever cordova platform ls printed before), and commit package.json with the pinned version so the rest of the team gets it.
How do hot updates differ from Cordova app store updates?
A store update ships a new native binary through App Store Connect or Google Play Console and reaches users only after review and after they install it. A hot update, also called an over-the-air or live update, changes only the HTML, CSS and JavaScript the Cordova WebView loads, and reaches users on their next launch without review.
| App store update | Hot update | |
|---|---|---|
| What can change | Everything: native code, plugins, platform version, permissions, icons | Web layer only: JavaScript, HTML, CSS, config files |
| Needed for | New cordova-android or cordova-ios version, new or updated plugins | Bug fixes, copy changes, UI tweaks, feature flags |
| Review | Apple reviews 50% of submissions in under 24 hours and 90% in under 48 hours | None; you publish when ready |
| Reaches users | When each user installs the new version | On the next app launch |
| Rollback | Submit another build | Revert the bundle on the server |
Everything in the sections above, a new CLI, platform or plugin, changes the native binary, so it always needs a store release. Hot updates cover the web code that sits on top. Both stores allow that split within limits. Google Play's Device and Network Abuse policy exempts "JavaScript in a webview or browser" from its ban on self-updating apps, and Apple's App Review Guidelines forbid downloaded code that "introduces or changes features or functionality", so keep hot updates to fixes and changes consistent with what was reviewed.
People searching for how to make a Cordova app refresh usually mean one of two things. Reloading the WebView in place is one line of JavaScript, window.location.reload(), and it reloads the code already on the device. Getting new code onto the device without a store release is what Cordova Hot Update does: you install the plugin with cordova plugin add cordova-hot-update, upload a JavaScript fix in the dashboard, and the plugin fetches it on every launch. The getting started guide covers setup, and the plugin requires Cordova 9 or newer.
Related guides
- Cordova Hot Update getting started guide
- The complete guide to Cordova hot updates
- Cordova OTA operations: security, QA, rollbacks and monitoring
- Apache Cordova CLI reference
- Apache Cordova platform and plugin versioning
- cordova-android 15.0.0 release announcement
- cordova-ios 8.0.0 release announcement
Key takeaways
- Update the global Cordova CLI with
npm install -g cordova@latest, after confirming Node.js is at least 20.17.0, which CLI 13 requires. - Update cordova-android and cordova-ios by removing and re-adding them with an explicit version; both platforms reject
cordova platform update. - Update plugins by removing and re-adding them at the new version, since Cordova has no plugin update command.
- Upgrade in order (CLI, platforms, plugins) and build after each step, so a failure points at one change.
- Native upgrades always need a store release; hot updates only replace the web layer, and reach users on their next launch.
Frequently asked questions
Is cordova platform update deprecated?
The Cordova CLI still parses cordova platform update, but current platforms refuse it. cordova-android 15 and cordova-ios 8 both return an error saying in-place updates are not supported and telling you to remove and re-add the platform. Use cordova platform rm followed by cordova platform add with an explicit version number.
Do I need to re-add plugins after updating a platform?
No. When you run cordova platform add, cordova-lib installs every plugin already in the project's plugins/ folder into the new platform. You only re-add a plugin when you want a newer version of it. Check cordova plugin ls after the platform add to confirm each plugin and its version came across.
Which Node.js version does Cordova 13 need?
Cordova CLI 13.0.0 declares Node.js 20.17.0 or newer, or 22.9.0 or newer, in its npm engines field. cordova-android 15 and cordova-ios 8 carry the same floor. Cordova CLI 12 accepted Node.js 16.13.0, so teams upgrading from CLI 12 on an older Node release must upgrade Node.js first.
Can I update a Cordova app without the App Store?
You can update the web layer without a store release. A hot update plugin such as cordova-hot-update downloads new JavaScript, HTML or CSS and applies it on the next launch. Native changes, including a new Cordova platform version, a new plugin or new permissions, still require a build submitted to Apple and Google.
How do I go back to an older Cordova platform version?
Remove the platform and add the older version explicitly, for example cordova platform rm android then cordova platform add [email protected]. Cordova writes the version to package.json, so commit that file. Every teammate and CI job that runs cordova prepare then restores the same pinned platform version.