Semantic versioning is way to specify software features and compatibility with a three part version number. There are specifications for each of the three numbers, as set out by semver.org. These images are from a presentation I did at Galvanize.
alternative way to remember:
as software is developed / fixed / improved, the version numbers is incremented. when you
npm init, your package will default to version v1.0.0. An alternative is to start at v0.1.0, which is considered to be in development (v0.x.x).
npm parses the version number. A tilde~ before the version number will allow increments of the FIX version, but not to the BREAKING or FEATURE versions. A caret⌃ will allow increments of both the FIX and FEATURE versions*. This more liberal behavior will allow backwards-compatible features to be added.
npm --save some-package will add the current version of some-package to your package.json appended with a caret⌃.
When in development (v0.x.x), a caret⌃ will behave like a tilde~, so it will not increment the FEATURE version number. This is because, "Anything may change at any time." More info here
Please note that these versioning rules are not necessarily followed by any particular piece of software being developed. For example, AngularJS allows breaking changes in a new FEARTURE version.