Hey all, I'm planning to change the way we version the Cordova CLI.
TL;DR --- 2.7.0+1.0.5 === Cordova 2.7.0 and npm module version 1.0.5 2.7.1+1.0.12 === Cordova 2.7.1 and npm module version 1.0.12 Current State --- Today, the Cordova CLI uses a major.minor.patch version identifiers to publish to npm. The major and minor identifiers track the Cordova framework version, while the patch identifier is reserved for tracking Cordova CLI's updates. For example, the current release is 2.6.2. This means it supports Cordova 2.6.x and has released two npm version updates since Cordova 2.6.0. The Problem --- The problem is that this approach to versioning does not accurately represent the Cordova framework or the npm module. When the Cordova framework releases a minor patch, such as Cordova 2.6.1, then the npm module cannot represent that update. When the Cordova CLI changes the public module's API, it cannot represent it. This would typically be reserved for a major or minor identifier. The Solution --- In semantic versioning, the version precedance is as follows [1]: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build < 1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a We can adopt the following scheme to accurately track both the Cordova framework version and the npm version: major.minor.patch+major.minor.patch The first three m.m.p are to track the Cordova framework. The second three m.m.p track the npm module. I would prefer to flip these, but to keep tagging consistent and backwards compatible, we must keep the Cordova framework as the first three identifies. Examples: 2.7.0-rc.1+1.0.0 2.7.0+1.0.5 2.7.1+1.0.12 The Benefits --- Now Cordova users know exactly what Cordova version is used by the CLI: 2.7.0+1.0.5 === Cordova 2.7.0 2.7.1+1.0.12 === Cordova 2.7.1 Now npm module users can rely on semantic versioning (normal node practice): 2.7.0+1.0.5 === Cordova CLI is 1.0.5 2.7.1+1.0.12 === Cordova CLI is 1.0.12 2.7.1+1.1.0 === Cordova CLI is 1.1.0 - sweet, a nice API was added! 2.7.1+2.0.0 === Cordova CLI is 2.0.0 - oh no! my old APIs are removed! [1] http://semver.org/ @see 12)