node.jsnpmpackage.jsoncaretsemantic-versioning

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


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.

  1. Why are these changes made in npm?
  2. What is the difference between tilde ~ and caret ^?
  3. What are the advantages over previous ones?

Solution

  • See the NPM docs and semver docs:

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