search

Found

info Overview

Test whether a version matches a range, with carets, tildes, x-ranges, comparators and hyphen ranges parsed into the minimum and maximum versions allowed.

📘 How to Use

  1. Type the version to test in the Version field
  2. Type the range expression in the Range field
  3. Read the Match Result, Min Version, and Max Version

SemVer Range Checker

Match Result
Range Explanation
Min Version
Max Version
Parsed Version
Article

SemVer Range Checker | Test ^ ~ and Version Range Matches

Type a version and a range expression and see whether the version satisfies it. The tool parses carets (^), tildes (~), x-ranges (1.x), comparators (>=1.0.0 <2.0.0), and hyphen ranges (1.0.0 - 2.0.0), then reports a MATCH / NO MATCH verdict alongside the exact minimum and maximum versions the range allows.

💡 About this tool

If you have ever squinted at a package.json dependency and wondered "does ^1.2.3 actually allow 1.9.0?", this is the answer machine. SemVer range operators look simple but each one carves out a different window. ^1.2.3 allows everything up to but not including 2.0.0. ~1.2.3 is much tighter — only patch bumps within 1.2.x. And the caret behaves differently below 1.0.0: ^0.2.3 only allows 0.2.x, because pre-1.0 minors are treated as breaking.

The min/max panel is the part that saves real debugging time. Instead of mentally expanding the operator, you see the resolved boundary versions directly, with for open-ended ranges like >=1.0.0. Pair that with the plain-language explanation and you can sanity-check a lockfile resolution or a Dependabot bump in seconds, without installing the semver package or spinning up a REPL.

🧐 Frequently Asked Questions

Does ^1.2.3 include 2.0.0? No. The caret allows >=1.2.3 <2.0.0, so 2.0.0 is just outside the window. The Max Version panel shows the 1.x ceiling.

What is the difference between ^ and ~? The caret allows changes that do not modify the left-most non-zero version segment (usually minor and patch). The tilde allows only patch-level changes when a minor is specified, so ~1.2.3 permits 1.2.x but not 1.3.0.

Why does ^0.2.3 behave differently? Below 1.0.0, SemVer treats each minor bump as potentially breaking. So ^0.2.3 resolves to >=0.2.3 <0.3.0 rather than <1.0.0.

How are pre-release versions like 1.0.0-beta handled? A pre-release has lower precedence than its release, so 1.0.0-beta sorts before 1.0.0. The checker parses the pre-release tag and orders it accordingly when testing the range.

Can I test compound ranges? Yes. Space-separated comparators are ANDed (>=1.0.0 <2.0.0), and || lets you OR whole ranges together. The explanation line spells out which logic applies.

📚 Fun Facts

Semantic Versioning was popularized by Tom Preston-Werner, GitHub's co-founder, who published the SemVer spec in 2010 to fight what he called "dependency hell." The ^ and ~ operators most developers use day-to-day are not actually part of the core SemVer spec — they come from npm's node-semver library, which became the de facto grammar after npm adopted caret ranges as the default save prefix. That default is why your package.json is full of carets: when you npm install lodash, npm writes ^4.17.21, quietly opting you into every future minor and patch release of the 4.x line. Other ecosystems borrowed the idea but tweaked the rules — Rust's Cargo treats a bare 1.2.3 requirement as caret-like by default, so lodash = "1.2" in Cargo behaves the way ^1.2 would in npm.