What's the difference between tilde(~) and caret(^) in package.json?

caret, node.js, npm, package.json, semantic-versioning

Solution

See the NPM docs and semver docs:

`~version` “Approximately equivalent to version”, will update you to all future patch versions, without incrementing the minor version. `~1.2.3` will use releases from 1.2.3 to <1.3.0.

`^version` “Compatible with version”, will update you to all future minor/patch versions, without incrementing the major version. `^1.2.3` will use releases from 1.2.3 to <2.0.0.

See Comments below for exceptions, in particular for pre-one versions, such as ^0.2.3

Problem

After I upgraded to the latest stable `node` and `npm`, I tried `npm install moment --save`. It saves the entry in the `package.json` with the caret `^` prefix. Previously, it was a tilde `~` prefix. - Why are these changes made in `npm`? - What is the difference between tilde `~` and caret `^`? - What are the advantages over previous ones?

Original source

Related problems