Bir projeye yeni bir paket kurarken package.json, composer.json veya pyproject.toml dosyasında gördüğün 1.4.2, 0.1.0 ya da 24.04 gibi sayıların geliştirici tarafından rastgele seçildiğini düşünüyorsan büyük bir yanılgı içindesin.
Yazılım mühendisliğinde sürüm (versiyon) numarası bir etiket değil; o kütüphaneyi yazan geliştirici ile onu canlı (production) sisteminde kullanan binlerce mühendis arasında imzalanmış teknik bir sözleşmedir (contract). Bu sözleşmenin kurallarını bilmemek, masum görünen tek bir npm update komutuyla canlıdaki tüm sistemini çökertmene neden olabilir.
Gelin yazılım dünyasını yöneten 4 temel sürüm numaralandırma standardını ve kaputun altındaki kuralları inceleyelim.
1. SemVer (Semantic Versioning): MAJOR.MINOR.PATCH
GitHub kurucu ortaklarından Tom Preston-Werner tarafından standartlaştırılan SemVer 2.0.0 (Anlamsal Versiyonlama), bugün dünyadaki açık kaynak kütüphanelerin yaklaşık %90'ı tarafından kullanılır.
SemVer'de her sürüm numarası noktalarla ayrılmış 3 basamaktan oluşur: MAJOR.MINOR.PATCH (Örneğin: 2.4.1).
2 . 4 . 1
│ │ └── PATCH (Yama): Geriye uyumlu hata düzeltmeleri ve güvenlik yamaları
│ └────────── MINOR (Özellik): Geriye uyumlu yeni özellik eklemeleri
└────────────────── MAJOR (Kırılma): Breaking Change! Geriye dönük uyumluluğu bozan değişikliklerBasamaklar Neye Göre Artar?
- PATCH (
2.4.1➔2.4.2): Sadece mevcut bir hatayı (bugfix) düzelttiğinde veya dış API davranışını değiştirmeyen bir güvenlik/performans yaması yaptığında artar. Gözün kapalı güncelleyebilirsin. - MINOR (
2.4.2➔2.5.0): Kütüphaneye yeni bir fonksiyon veya özellik eklediğinde ama eski fonksiyonları kullanan kodların bozulmadığını garanti ettiğinde artar. (MINOR arttığında PATCH basamağı sıfırlanır). - MAJOR (
2.5.0➔3.0.0): Tehlike çanıdır! Breaking Change (Kırıcı Değişiklik) anlamına gelir. Bir fonksiyonun adı değişmiş, aldığı parametreler silinmiş veya döndürdüğü veri yapısı farklılaşmıştır. MAJOR sürüm geçişlerinde kodunu değiştirmeden güncelleme yaparsan sistemin kırılır.
2. ZeroVer (0.1.0 Ne Anlama Gelir?)
Yeni çıkan kütüphanelerde veya araçlarda sıkça 0.1.0, 0.4.2 hatta yıllardır sıfırda kalan 0.29.0 gibi sürümler görürüz. Peki neden 1.0.0 değil de 0.1.0?
Resmi SemVer 2.0.0 spesifikasyonunun 4. maddesi bunu çok net tanımlar:
"Sıfır ile başlayan majör sürümler (
0.y.z) başlangıç geliştirme aşaması içindir. Her an her şey değişebilir. Public API stabil kabul edilmemelidir."
Yani bir paketin sürümü 0 ile başlıyorsa (yazılım kültüründe buna ZeroVer denir), geliştirici sana açıkça şunu söylüyordur: "Bu kütüphane henüz resmi olarak stabil sözü vermiyor; yarın 0.1.0'dan 0.2.0'a geçerken tüm mimariyi değiştirebilirim, canlı sistemde kullanırken sorumluluk sende!"
Uyarı: package.json İçindeki Şapka (^) Tuzağı ve 0.x.x Farkı
package.json dosyasında " paket": "^1.2.3" yazdığında, başındaki ^ (caret) işareti 1.x.x içindeki tüm MINOR ve PATCH güncellemelerine (<2.0.0) otomatik izin verir. Ancak npm ve pnpm, 0.x.x sürümlerinin tehlikeli olduğunu bildiği için "^0.2.3" yazdığında MINOR artışına izin vermez; güncellemeyi sadece >=0.2.3 <0.3.0 aralığına kilitler! Yine de canlı sunucularda sürpriz yaşamamak için CI/CD hattında her zaman npm install yerine kilit dosyasını (package-lock.json) birebir uygulayan npm ci komutunu kullanmalısın.
3. CalVer (Calendar Versioning): Takvim Bazlı Versiyonlama
Her yazılım SemVer kalıbına sığmaz. İşletim sistemleri, tarayıcılar veya devasa IDE'ler tek bir fonksiyon sözleşmesinden ziyade zaman içinde sürekli evrilen ekosistemlerdir. Bu projeler CalVer (Takvim Versiyonlaması) kullanır:
- Ubuntu Linux (
24.04 LTS): Buradaki24yılı (2024),04ise ayı (Nisan) temsil eder. Sadece sürüm numarasına bakarak sistemin ne zaman çıktığını ve 5 yıllık LTS desteğinin ne zaman biteceğini (Nisan 2029) saniyesinde anlarsın. - JetBrains IDE'leri (
2026.2): 2026 yılının 2. büyük güncellemesini ifade eder. - Ubuntu, Pip, Certbot, Sentry: Kullanıcının elindeki aracın ne kadar güncel olduğunu tarih üzerinden okuması çok daha pratiktir.
4. Git Commit Hash Versioning (Modern CI/CD ve Mikroservisler)
Peki kendi şirketin içinde geliştirdiğin ve günde 15 kez canlıya (deploy) aldığın bir backend API'sine veya frontend uygulamasına her seferinde 1.0.14, 1.0.15 diye elle numara vermek mantıklı mı? Hayır.
Eğer dışarıya açık bir paket (npm/NuGet/PyPI kütüphanesi) yayınlamıyorsan, modern DevOps ve CI/CD boru hatlarında sürüm numarası olarak doğrudan Git Commit SHA (Özet Değeri) veya Tarih + Commit Hash birleşimi kullanılır:
# CI/CD hattında Docker imajını Tarih + Git Commit Hash ile etiketlemek
GIT_SHA=$(git rev-parse --short HEAD)
VERSION_TAG="2026.10.25-${GIT_SHA}"
docker build -t registry.czay.dev/checkout-api:${VERSION_TAG} .Bu yaklaşımın en büyük avantajı izlenebilirliktir (traceability): Gece saat 03:00'te canlıdaki 2026.10.25-a4b8c1f sürümünde bir hata patladığında, "Acaba bu sürümde hangi kod vardı?" diye aramazsın; terminalde git show a4b8c1f yazıp hataya sebep olan satırı 2 saniyede bulursun.
Özet: Hangi Projede Hangisini Seçmelisin?
| Proje Tipi | Önerilen Standart | Örnek Sürüm | Neden? |
|---|---|---|---|
| Açık Kaynak Kütüphane / SDK / Public API | SemVer | 2.4.1 | Paketi kullanan geliştiriciler güncelleme yaparken kodlarının kırılıp kırılmayacağını bilmek zorundadır. |
| Yeni Başlayan / Henüz Stabil Olmayan Paket | ZeroVer (0.x.y) | 0.1.0 | Kullanıcıya "API henüz olgunlaşmadı, her an değişebilir" mesajını dürüstçe verir. |
| İşletim Sistemi / Masaüstü Araçları / Platform | CalVer | 26.04 | Sürümün yaşını ve destek takvimini ilk bakışta anlatır. |
| Şirket İçi Web Uygulaması / Mikroservis | Git Commit Hash | v-a4b8c1f | Manuel versiyon artırma angaryasını sıfırlar; çalışan konteyner ile Git geçmişini birebir eşler. |
İlgili Kısa Video & Kaynaklar
Bu konuyu 60 saniyede özetlediğim kısa videoyu aşağıdan izleyebilir, Git ve sürüm kontrol süreçlerin için interaktif rehberimize göz atabilirsin:
İnteraktif Yol Haritası & Araç
Bunu da oku
- CZTRDokku Nedir? Ayda 200$ Bulut Faturasını 5$ Sunucuya Düşüren Açık Kaynak PaaS Mimarisi
Dokku Nedir? Ayda 200$ Bulut Faturasını 5$ Sunucuya Düşüren Açık Kaynak PaaS Mimarisi
25 Ekim 2026 · 5 dk okuma - CZTRCVE Nedir ve CVSS 10.0 Skoru Ne Anlama Gelir? Yazılımcılar İçin Siber Güvenlik Metrikleri Rehberi
CVE Nedir ve CVSS 10.0 Skoru Ne Anlama Gelir? Yazılımcılar İçin Siber Güvenlik Metrikleri Rehberi
23 Ekim 2026 · 3 dk okuma