Keep first n-1 digits the same, last digit is free to increment to some arbitrary value
~>1: >=1.0.0 <2.0.0
~>1.0: >=1.0.0 <2.0.0
~>1.2.3: >=1.2.3 <1.3.0
~>0.1: >=0.1.0 <1.0.0
~>0.1.3: >=0.1.3 <0.2.0
~>0.0.2: >=0.0.2 <0.1.0
>= self < next significant digit + 1
~1: >=1.0.0 <2.0.0
~1.0: >=1.0.0 <1.1.0
~1.2.3: >=1.2.3 <1.3.0
~0.1: >=0.1.0 <0.2.0
~0.1.3: >=0.1.3 <0.2.0
~0.0.2: >=0.0.2 <0.1.0
It matches any version with the same first non-zero component starting at the specified version
^1: >=1.0.0 <2.0.0
^1.0: >=1.0.0 <2.0.0
^1.2.3: >=1.2.3 <2.0.0
^0.1: >=0.1.0 <0.2.0
^0.1.3: >=0.1.3 <0.2.0
^0.0.2: 0.0.2
tl;dr they are all bloody different!