See exactly which versions an npm range like ~1.4.0 or ^0.2.3 lets in
Runs in your browser. Nothing you type is sent anywhere. Checked against sources on 16 Oct 2026.A caret or tilde in package.json decides which updates npm installs, and the rules change below 1.0.0: ^1.2.3 allows anything up to 2.0.0, but ^0.2.3 stops at 0.3.0 and ^0.0.3 allows only 0.0.3. Type any range to see it written out as plain comparators, such as >=0.2.3 <0.3.0-0, then paste the published versions to see which ones npm would pick.
Type the range, such as ^0.2.3 or ~1.4.0, in the Range box.
Read the line under it: the range written as plain comparators, and in words.
Paste the versions published for the package to see which ones fall inside it and which is the highest.
Semantic Versioning writes a release as MAJOR.MINOR.PATCH: a major change may break code that uses it, a minor one adds features, and a patch only fixes bugs. Package managers rely on that promise when they read a range such as ^1.2.3 in package.json and pick the newest version that fits.
Type a range and paste versions, one per line. Each version is marked as inside or outside the range, the list is sorted in true version order, and the highest and lowest matches are named. The range is also written out as plain comparators, exactly as npm prints it, so ^0.2.3 shows as >=0.2.3 <0.3.0-0.
Next versions. For the highest version in the list, the next major, minor, patch and pre-release are shown, as npm version would write them.
The rest of the article, and all 6 questions about Semver Checker, are on the Semver Checker page.
A tilde allows patch updates only: ~1.2.3 accepts 1.2.4 and 1.2.10 but not 1.3.0. A caret also allows minor updates: ^1.2.3 accepts everything below 2.0.0. Since npm writes a caret by default, most projects take new features automatically and stop only at the next major version.
Below 1.0.0, npm treats the first non-zero number as the major version, because the API is not yet stable. So ^0.2.3 means at least 0.2.3 and below 0.3.0, and ^0.0.3 allows only 0.0.3 itself. Moving a package to 1.0.0 is what turns on the wider caret range.
No. A pre-release only matches a range that names a pre-release of the same major, minor and patch numbers. So 1.3.0-beta matches >=1.3.0-alpha but not ^1.2.3, even though it sorts inside that range. Pre-releases stay out of normal installs unless you ask for them.
Everything after a plus sign is build metadata, such as 1.0.0+20261016 or 1.0.0+sha.5114f85. Build metadata identifies a particular build but is ignored for ordering, so 1.0.0+a and 1.0.0+b count as the same version. Ranges ignore it too, and npm drops it when printing a range.
Rates and rules change; check the source before you rely on a figure.
Still stuck? Ask about Semver Checker and anybody who knows can answer. No account needed.
Same job, other tools: HTTP 401 Unauthorized – The code for a failed login or an expired token, and the header it must carry · HTTP 403 Forbidden – The difference between 403 and 401, and when a 404 is the safer reply.
On the related tools: Readability Checker – Flesch reading ease and grade level, with what to change.