How npm mange package versions: Tilde(~) vs Caret(^)

How npm mange package versions

All the developers who worked with node or javascript might see some special charaters before the version of the packages we installed. And thes are quite common for all other frameworks as well.

This is how npm manage package versions. Using these special characters, NPM decides which version of the package to install in order to run the project properly. Knowing these will help us handle version mismatches.

All our angular application builds failed, and this is what we did.

The plain number:

package_sample : "1.2.3"

Adding a package version without any special characters will make npm to install the exact specified version of the package.

Tilde (~):

package_sample : "~1.2.3"

Tilde(~) allows npm to install upto new minor version of the package. Npm may install a future version 1.2.4 or 1.3.5. This helps in resolving the minor issues on the go.

Caret (^):

package_sample : "^1.2.3"

Caret(^) allows npm to install upto next major version of the package. Npm can install a future version 1.2.5 or 1.3.0 or 2.0.0. And this is the most prefered way.

Or (||):

package_sample : "1.2.3 || 1.4.0"

Or(||) allows npm to install either 1.2.3 or 1.4.0 versions of the package. Usually helps when we’ve cached date of a specific version of the package.

Dash (-):

package_sample : "1.2.3-1.2.7"

Dash(-) indicates a range of versions of the package. Npm can use any version in the range 1.2.3 to 1.2.7


These operators will as they mathematically mean.

package_sample : ">1.2.3"     // An version greater than 1.2.3
package_sample : ">=1.2.3"   // An version greater than or equals to 1.2.3
package_sample : "<1.2.3"   // An version less than 1.2.3
package_sample : "<=1.2.3" // An version less than or equals to 1.2.3

Start (*):

package_sample : "*"

Star(*) allows npm to go with the most latest version of he package despite of the compatibility. This is no at all recommended and may broke your code at some point of time.


package_sample : ">=1.2.3 <2.0.0"
package_sample : "<2.0.0 || >2.0.0"

You may combine any of these characters to create a new custom range. It allows us to have more conroll the versions.


This is all you need to know about how npm mange package versions and most of the frameworks follow the same notation. Feel free to comment, where else you see the same notation.

Share this article
Shareable URL
Comments 4
  1. animi maxime beatae porro doloribus maxime facere sit necessitatibus dolorem ut rerum officia soluta ut et facilis ipsam. culpa quod voluptas ab animi architecto voluptatem sed ipsa ducimus minima non accusantium cum labore ducimus qui incidunt. molestias officia dolor voluptas odio maiores a a reprehenderit laborum nostrum voluptatem modi enim dolor quibusdam magni.

  2. quidem sit rerum magnam. recusandae aliquam quam architecto aperiam dolores velit ut nemo ea. ut unde quia est eum ipsam doloremque omnis. reiciendis consequatur et aut veritatis commodi expedita consequatur quidem. dignissimos fugiat nesciunt magni repellat voluptatibus doloribus libero dolorem voluptatibus consequatur aut qui quis.

  3. libero aut voluptas et eaque est eaque dicta fugit facere vitae sed id blanditiis assumenda. exercitationem voluptatem nihil qui maiores laborum quidem et distinctio earum molestiae optio ut sapiente est. odit maxime eligendi et quia id veritatis. dolores repudiandae ab neque amet aut enim quia. molestias omnis eum at molestiae aut est.

Leave a Reply

Your email address will not be published. Required fields are marked *

Read next
Subscribe to our newsletter