Cuando te propones crear una aplicación, sitio web, librería de software o algo de ese estilo, tal vez te has planteado utilizar versionamiento. Pero... ¿cuándo alcanzamos la versión 1.0? A menudo la gente se inventa los números.
Esto no debería ser un problema cuando a nadie más le afecta si a tu software le has dado la versión 1.0 o 0.1, pero hoy en día contamos con unas magníficas piezas de software llamadas gestores de paquetes/librerías.
Por ejemplo, npm (gestor de paquetes para Node.js) es un sistema mediante el cual podemos instalar librerías, que a su vez dependen de otras. Estos paquetes a lo mejor necesitan una versión específica, superior o inferior de otros paquetes de los que depende, y si cada dueño le da a su proyecto los números de versión que le apetece, sería un caos.
Semantic Versioning
Ante tal necesidad, nació el versionamiento semántico, un proyecto que pretende solucionar este dilema mediante convención y buenas prácticas.

A grandes rasgos, SemVer propone utilizar X.Y.Z para el versionamiento, sumarizado en lo siguiente:
- X: Versión major. Utilizado cuando se introducen cambios que no son compatibles con versiones anteriores.
- Y: Versión minor. Utilizado cuando se añaden nuevas funcionalidades y no se rompe la compatibilidad.
- Z: Versión patch. Corrección de errores compatible con versiones anteriores.
También se permite especificar un nombre de versión, por ejemplo:
- 1.0.1-alpha
- 1.0.1-beta
- 1.0.1-salchichas
Esto quiere decir que por ejemplo, si nuestra aplicación utiliza la librería "foobar", podríamos actualizar dicha librería sin riesgos siempre y cuando el cambio que se produzca sea un minor o un patch. ¿Muy cómodo verdad?
Puedes consultar el resto de la especificación así como una lista de preguntas frecuentes en semver.org.