http://stackoverflow.com/questions/22343224/whats-the-difference-between-tilde-and-caret-in-package-jsonnpm
http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/json
In the simplest terms, the tilde matches the most recent minor version (the middle number). ~1.2.3 will match all 1.2.x versions but will miss 1.3.0.post
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.io