---
title: Versionamiento semántico para librerías de software
description: Adopta buenas prácticas en tus librerías de software utilizando la especificación de versionamiento semántico.
url: https://www.felixsanz.dev/es/articulos/versionamiento-semantico-para-librerias-de-software
language: es
published: 2014-08-18
updated: 2016-07-02
tags:
  - development
alternate-en: https://www.felixsanz.dev/articles/semantic-versioning-for-software-libraries
---

# Versionamiento semántico para librerías de software

## Introducción

Cuando te propones crear una aplicación o librería de software, una de las primeras cosas a realizar es **asignar un número de versión**. Pero... ¿cuándo alcanzamos la versión 1.0? No tiene sentido si nos vamos a inventar los números.

Aún así, 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**.

Por ejemplo, [npm](https://www.npmjs.org) (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**.

## Versionamiento semántico

Ante tal necesidad, nació el **versionamiento semántico**, un proyecto que pretende solucionar este dilema mediante **convención** y **buenas prácticas**.

*[Diagram]*

A grandes rasgos, **SemVer** propone utilizar **X.Y.Z** para el versionamiento.

-   **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](https://semver.org).
