The difference between
~ (tilde) and
^ (caret) used to specify acceptable versions in package.json was always a blur in my mind for a while. So this article is probably more for me than you, but here it is.
Given the following version definition:
~ matches the patch version only, so
~1.2.0 will match versions 1.2.x but will ignore 1.3.x
^ matches the minor version and patch versions, so
^1.2.0 will match 1.x.x including 1.3.x but will ignore 2.x.x.