Semantic versioning is a solid and extensively used approach. MAJOR.MINOR.PATCH is a three-part string. Only when the changes are breaking the clients should the MAJOR version be incremented. When the changes do not break the clients, the MINOR version should be incremented. A bug fix is indicated by a PATCH version change.