That’s what semantic versioning is:
https://semver.org/ https://docs.npmjs.com/about-semantic-versioning
https://semver.org/ https://docs.npmjs.com/about-semantic-versioning
That’s the sole reason for the squiggly marks and carets that exist in every package.json.