Semantic Versioning
Given a version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes
- MINOR version when you add functionality in a backwards-compatible manner
- PATCH version when you make backwards-compatible bug fixes
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format, for example 1.0.0-prerelease-232.
This solves the problem of dependency triangles, where product A depends on products B and C, which both in turn depend on product D. If B depends on v1.0.4 of D, and C depends on v1.0.2 of D, then A can add v1.0.4 as a dependency, since any changes between v1.0.2 and v1.0.4 should be backwards-compatible.