Semantik sürümleme
Kısa tanım
Semantik sürümleme, yazılım sürümlerini MAJOR.MINOR.PATCH biçiminde numaralandırarak her değişikliğin uyumluluğa etkisini sürüm numarasıyla anlatan kuraldır.
Diğer adları: Semver, Anlamsal sürümleme, Semantic versioning
Bir kütüphaneyi 2.4.1'den 2.5.0'a yükselttiğinde kodunun bozulmamasını, 3.0.0'a geçtiğinde ise değişiklikleri incelemen gerektiğini beklersin. Bu beklentiyi mümkün kılan ortak dil semantik sürümlemedir. Tom Preston-Werner'in yazdığı semver.org belirtimiyle standart hâle gelmiştir.
Üç parça
- MAJOR: Geriye dönük uyumsuz bir değişiklik yapıldığında artar. 2.4.1 → 3.0.0
- MINOR: Geriye uyumlu yeni bir özellik eklendiğinde artar, PATCH sıfırlanır. 2.4.1 → 2.5.0
- PATCH: Yalnızca geriye uyumlu hata düzeltmelerinde artar. 2.4.1 → 2.4.2
Sürüm sonuna kısa çizgiyle ön sürüm etiketi eklenebilir: 1.0.0-alpha.1, 1.0.0-rc.2 gibi. Ön sürümler aynı numaralı kararlı sürümden küçük sayılır; 1.0.0-rc.1, 1.0.0'dan önce gelir. Artı işaretinden sonraki derleme bilgisi (1.0.0+20260101) sıralamayı etkilemez.
Karşılaştırma nasıl yapılır?
Parçalar soldan sağa sayısal olarak karşılaştırılır; metin gibi karşılaştırılmaz. Bu yüzden 1.10.0, 1.9.0'dan büyüktür. Alfabetik sıralamada ise 1.10 yanlışlıkla 1.9'un önüne düşer. İki sürümü kurala uygun biçimde kıyaslamak için semver karşılaştırma aracını kullanabilirsin.
Paket yöneticilerindeki aralıklar
npm gibi araçlarda bağımlılık aralıkları semver'e göre yorumlanır:
^1.2.3: 1.2.3 ve üzeri, 2.0.0'ın altı (MINOR ve PATCH güncellemeleri)~1.2.3: 1.2.3 ve üzeri, 1.3.0'ın altı (yalnızca PATCH)
0.x sürümlerinde API kararsız kabul edildiğinden ^0.2.3 yalnızca 0.3.0'ın altına kadar izin verir.
Dikkat edilecek noktalar
Semver bir sözdür, teknik bir garanti değildir; bakımcı yanlışlıkla uyumsuz bir değişikliği MINOR sürümde yayınlayabilir. Kilit dosyaları (package-lock gibi) bu riske karşı tam sürümleri sabitler. Sürüm numarası tarih tabanlı olan projeler (örneğin 2026.10) semver kullanmaz; ikisini karıştırmamak gerekir.