We’ve been using Semantic Versioning for quite a while at work now. It’s easy to explain and follow, and it provides valuable context to the numerous releases of the projects and components that we are doing on a daily basis.
Turns out, however, that I missed a small, but important part of the standard. All releases in major version 0 are considered to be unstable, so even if they introduce backward compatibility breaking changes, there is no need to increment the major version to 1. Here’s the relevant quote:
Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable.
If you are relying on the semantic versioning in your projects, make sure to check your dependency management tool, to verify that it handles major version 0 correctly. Gladly, for us, composer does the job:
^operator behaves very similarly but it sticks closer to semantic versioning, and will always allow non-breaking updates. For example
^1.2.3is equivalent to
>=1.2.3 <2.0.0as none of the releases until 2.0 should break backwards compatibility. For pre-1.0 versions it also acts with safety in mind and treats