npm versioning is the most well known/widely-used implementation of [Semantic Versioning 2.0](https://semver.org). It's important to understand that "npm" versioning scheme is not the same as "semver" versioning. SemVer's spec does not define ranges at all - so all range/constraint syntax in npm is npm-specific and not part of the spec.