This project uses Semantic Versioning on its external interface.
This means that a breaking change if methods of classes, what is exported, etc. can only happen with major version bump (x.-.-).
The semantic versioning, however, does not apply to internal interfaces and state.
For example, how a Message chooses to store its state is subject to change without a major version bump.
In fact, it may change in either minor (-.x.-) or patch (-.-.x) version bumps.
A major version bump means that some interface has been broken by the changes added.
A new minor version bump means that new functionality has been added without breaking the existing interfaces.
A patch version bump means that something has been fixed, or some internals have changed, without adding new functionality.