2.3.4
and you fixed a bug.
the final digit is a patch version, and incrementing it means a bug fix with no breaking changes.
8.1.1
and you released a bunch of breaking API changes.
When you break functionality across versions, you should let the users (and their automation) know. It's best practice to reset the MINOR/PATCH versions to 0 when bumping a major version.
1.0.25
and you release some new features, but everything's backwards compatible.
Like updating the MAJOR version, when you upgrade the MINOR version, be sure to reset the PATCH version to 0.
22.0.8
and you release some new shiny features, but you ALSO change some of the existing functionality.
Whenever you release, if you changed anything in a non-backwards compatible way, you should let people know by bumping the MAJOR version.
1.12.5
and you release a bugfix
the final digit is a patch version, and incrementing it means a bug fix with no breaking changes.
0.10.6
and you release a whole bunch of new features and break a bunch of stuff.
One special case in semver is if things have a 0 for the MAJOR version, then they're intended as a development release with no promise of a stable API. Users can rely on features at their own discretion. In this case, we just bump the minor version even though things have changed.