Search code examples
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:

    • ~version “Approximately equivalent to version”, will automatically update you to all future patch versions that are backwards-compatible, without incrementing the minor version. ~1.2.3 will use releases from 1.2.3 to < 1.3.0.

    • ^version “Compatible with version”, will automatically update you to all future minor/patch versions that are backwards-compatible, 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