29

What does the ^ symbol mean in the version of a dependency in package.json?

I couldn't find it in the docs.

For example:

"dependencies": {
    "grunt": "^0.4.4",
    ...
}
gberger
  • 2,813
  • 3
  • 28
  • 50
  • 2
    possible duplicate of [Difference between tilde(~) and caret(^) in package.json](http://stackoverflow.com/questions/22343224/difference-between-tilde-and-caret-in-package-json) – alex Mar 23 '14 at 22:25
  • 1
    Couldn't find that because I didn't know what the caret was called – gberger Mar 23 '14 at 22:50

1 Answers1

46

I found an answer here:

The caret, on the other hand, is more relaxed. It will update you to the most recent major version (the first number). ^1.2.3 will match any 1.x.x release including 1.3.0, but will hold off on 2.0.0. npm’s semantic versioning parser clarifies the distinction:

~1.2.3 := >=1.2.3-0 <1.3.0-0 "Reasonably close to 1.2.3".
^1.2.3 := >=1.2.3-0 <2.0.0-0 "Compatible with 1.2.3".

― isaacs/node-semver (emphasis added)

The relevant points from isaacs/node-semver are:

  • ^1.2.3 := >=1.2.3-0 <2.0.0-0 Compatible with 1.2.3.
    When using caret operators, anything from the specified version (including prerelease) will be supported up to, but not including, the next major version (or its prereleases). 1.5.1 will satisfy ^1.2.3, while 1.2.2 and 2.0.0-beta will not.

  • ^0.1.3 := >=0.1.3-0 <0.2.0-0 Compatible with 0.1.3.
    0.x.x versions are special: the first non-zero component indicates potentially breaking changes, meaning the caret operator matches any version with the same first non-zero component starting at the specified version.

  • ^0.0.2 := =0.0.2 Only the version 0.0.2 is considered compatible

Community
  • 1
  • 1
rossipedia
  • 56,800
  • 10
  • 90
  • 93