Sim* libraries versioning scheme


What is it, conceptually?
I mean in SimEthereal documentation it’s referred to as 1.1.1, latest one is 1.2.2, which requests SimMath 1.1.1, latest of which is 1.1.2-SNAPSHOT. And sim-eth-es asks for SimEthereal 1.2.1 and SimMath 1.0.2.
Are new ones supposed to be backward-compatible, or there is more to consider? Is there strict criteria to distinguish between changed 2nd or 3rd number? Thanks!


Third number means that only bugs were fixed. It should be compatible to just upgrade.

Second number means new features were added or moved, etc… There may be some incompatibilities though I try to keep this rare and will always mention it in the release notes.

edit: note that the change log is all-inclusive. So reading it will show you the history of all of the versions which may make what I say above clearer.

For example:

Edit 2: sometimes I will increment just the third number if I know 100% sure that what I added will not affect anyone’s ability to upgrade (like the toAngles() method above).


Thanks, got it.
Btw when you generate a new release, you change version by hand or use some library/tool that does some automation for you?


I do it by hand. It only has to change in two places.

Edit: technically only one place… and then I remove the (unreleased) from the changelog. But sometimes I decide on a different release number than was formerly in the changelog… so that’s what I considered the second place to change.



Yep, I loosely follow semantic versioning for sure.

My third version point releases are supposed to always be backwards compatible unless I’ve messed up. It happens sometimes.


Also not directly related to my initial questions, but generally to the versioning topic


Yeah, my changelogs have saved ME time many times… I’m a strong believer in them.


Btw do you by chance remember what caused this in sim-eth-es?

compile "com.simsilica:sim-math:1.0.2"
//    compile "com.simsilica:sim-math:1.1.1"  // break sim-ethereal 1.2.1


It was something like one of these or something:
Modified Vec3d.set() to return ‘this’ Vec3d.

The kind of change that requires a compile but otherwise isn’t really a change.