SemVer 2: Semantic Versioning

SemVer 2 es un estándar de versionado que utiliza tres números para comunicar el tipo de cambios en software.

Formato: MAJOR.MINOR.PATCH

1.2.3
│ │ │
│ │ └── PATCH: Bug fixes
│ └──── MINOR: New features (backward compatible)
└────── MAJOR: Breaking changes

Reglas de incremento

  • PATCH (1.0.01.0.1): Solo correcciones de bugs compatibles
  • MINOR (1.0.11.1.0): Nuevas funcionalidades que no rompen compatibilidad
  • MAJOR (1.1.02.0.0): Cambios que rompen compatibilidad con versiones anteriores

Pre-releases y metadata

1.0.0-alpha.1        # Pre-release
1.0.0+20230101.git   # Build metadata
1.0.0-beta.2+exp.1   # Ambos

Precedencia de versiones

1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0

Compatibilidad de dependencias

  • Caret (^1.2.3): Compatible con 1.2.3 hasta <2.0.0
  • Tilde (~1.2.3): Compatible con 1.2.3 hasta <1.3.0
  • Exacto (1.2.3): Solo versión específica

Casos de uso comunes

APIs y librerías: - 1.0.0: Primera versión estable - 1.1.0: Añadir endpoint nuevo - 2.0.0: Cambiar formato de respuesta

Aplicaciones: - 1.0.1: Corregir bug en interfaz - 1.1.0: Nueva funcionalidad opcional - 2.0.0: Rediseño que cambia workflow

Beneficios

  • Predictibilidad: Los usuarios saben qué esperar de cada actualización
  • Automatización: Herramientas pueden actualizar dependencias de forma segura
  • Comunicación: Transmite impacto sin documentación extensa

Implementación

  1. Comenzar con 0.1.0 para desarrollo
  2. Primera release pública: 1.0.0
  3. Incrementar según tipo de cambio
  4. Usar pre-releases para versiones experimentales

SemVer 2 facilita la gestión de dependencias y reduce conflictos en ecosistemas de software complejos.