
Version numbers have some sort of structure. A version number is composed of the following elements (ordered from most significant to least significant):
The major version in a version number indicates the number of major releases of a certain product. A release is a major release when the product has significantly changed.
The minor version in a version number indicates the number of minor releases of a certain product, for which the major version number remains the same. A release is a minor release when the product has got new features, but not that many such that it would justify a new major release.
Patchlevels indicate the number of bug-fix releases. When a new version of a product is released, and the new version contains mostly bug-fixes, then the patchlevel is incremented. The major and minor version remain the same.
The phase indicates the maturity of the release. The following phases are distinguished:
When a product is still in development, it is in the development phase.
When development is done on a product, it moves to the alpha phase. The alpha phase indicates that product is "feature complete", but that it might be unstable. In this phase, in-house testing is done.
When the product is stable enough, it moves to the beta phase. The beta phase indicates that the product is "feature complete", and tested. In this phase, the product is shipped to a selected group of users who will use the product. This phase is used to "harden" the product, by using it in real-life situations.
When the product is proven to be stable enough for actual usage, it enters the release candidate phase. In this phase, the focus is on packaging the product.
When no problems have been encountered with the packaging, it enters the final phase.
| Phase | Maturity | Main focus |
| development phase | Development | |
| alpha phase | Feature complete | In-house testing |
| beta phase | Tested | External testing |
| release candidate phase | Hardened | Testing packaging |
| final phase | Ready to ship |
When a product is in a certain phase, it goes through one or more iterations. The patchlevel is the iteration number for a certain phase.

When the phase is "final", the phase is generally not shown. In this case, phaselevels are denoted by a alphabetic character. The first release (phaselevel 1) gets no character, the second release (phaselevel 2) gets an 'a'. The third release (phaselevel 3) gets a 'b', and so on.
Valid combinations of version 1.0.0-final-1 are:
| Common | Not so common |
|---|---|
| 1 | 1-final |
| 1-final-1 | |
| 1.0 | 1.0-final |
| 1.0-final-1 | |
| 1.0.0 | 1.0.0-final |
| 1.0.0-final-1 |
Valid combinations of version 1.0.1-final-2 are:
| Common | Not so common |
|---|---|
| 1.0.1a | 1.0.1-final-2 |
Valid combinations of version 1.1.0-beta-3 are:
| Common | Not so common |
|---|---|
| 1.1-beta-3 | |
| 1.1.0-beta-3 |