Cargo 1.94 ile 1.99 arasındaki kararlı sürümlerde kullanıcıyı en çok ilgilendiren değişiklikler şunlar: 1.94'te yapılandırma dosyalarında include anahtarı kararlı hale geldi ve CARGO_BIN_EXE_<ad> ortam değişkeni çalışma anında da okunabilir oldu; 1.95'te ev dizininde cargo init yasaklandı; 1.96'da target.'cfg(..)'.rustdocflags desteği geldi; 1.97'de build.warnings ve resolver.lockfile-path ayarları kararlı oldu ve --manifest-path için -m kısaltması eklendi; 1.98 ve 1.99 ise ağırlıklı olarak hata düzeltmesi ve performans iyileştirmesi getirdi.
Bu yazı yalnızca resmî Cargo CHANGELOG dosyasındaki "Cargo 1.94" ile "Cargo 1.99" bölümlerine dayanır. Gece sürümüne (nightly) özgü -Z bayrakları ve Cargo'nun iç değişiklikleri kapsam dışında. Mümkün olan her maddeyi Cargo 1.99.1 ile gerçek bir projede denedik. Cargo.toml yapısının temelleri için Cargo.toml ve bağımlılıklar yazısına, dilin kendisindeki edition değişiklikleri için Rust 2024 edition değişiklikleri yazısına bakabilirsiniz.
Önce sürümünüzü kontrol edin
Cargo, Rust ile aynı sürüm numarasıyla dağıtılır. Aşağıdaki özelliklerden birini kullanmadan önce kurulu sürümü görmek için şu komut yeterlidir. Bu yazıdaki denemeler resmî paketlerden açılan Rust 1.99.1 araç zinciriyle yapıldı:
$ cargo --version
cargo 1.99.1 (5f94df478 2026-08-27)Bir ayarın eski sürümlerde nasıl davrandığı önemlidir. Örneğin Cargo Book, build.warnings ayarının 1.97'den itibaren dikkate alındığını belirtir. Takım arkadaşlarınız veya CI ortamınız daha eski bir Cargo kullanıyorsa ayar fark edilmeden etkisiz kalabilir. Araç zincirini güncel tutmak için rustup ile Rust kurulumu yazısındaki rustup update adımını kullanabilirsiniz.
Sürümlere göre özet
| Sürüm | Öne çıkan kararlı değişiklik | Kimi ilgilendirir |
|---|---|---|
| 1.94 | config include anahtarı, pubtime alanı, TOML 1.1 okuma, çalışma anında CARGO_BIN_EXE_<ad> | Yapılandırmayı paylaşan ekipler, entegrasyon testi yazanlar |
| 1.94.1 | Kötü niyetli crate açılırken izin değiştirme açığına düzeltme (CVE-2026-33055, CVE-2026-33056) | Unix benzeri sistemlerde herkes |
| 1.95 | Ev dizininde cargo init yasak, zamanlama raporu yalnızca SVG, cargo remove ipuçları | Yeni başlayanlar, derleme süresini ölçenler |
| 1.96 | target cfg rustdocflags, iç içe alt komutlar için cargo help, güvenlik düzeltmeleri | Belge üretenler, alternatif registry kullananlar |
| 1.96.1 | libssh2 güvenlik düzeltmeleri, HTTP yeniden deneme düzeltmesi | Git bağımlılığı kullananlar |
| 1.97 | build.warnings, resolver.lockfile-path, -m kısaltması, güvenli cargo clean | CI kuranlar, salt okunur kaynak dizinleri |
| 1.98 | Windows kimlik sağlayıcı hatası düzeltmesi, küçük harfli hata mesajları | Özel registry kullananlar |
| 1.99 | Performans iyileştirmeleri, cap-lints ile daha kısa rustc komut satırı | Büyük workspace sahipleri |
Cargo 1.94: include, pubtime ve çalışma anında CARGO_BIN_EXE

Yapılandırma dosyalarında include
Cargo 1.94 ile .cargo/config.toml dosyalarında en üst düzeydeki include anahtarı kararlı hale geldi. Bu anahtar başka yapılandırma dosyalarını yükler; böylece ekipte ortak kullanılan takma adları, derleme bayraklarını veya registry ayarlarını tek bir dosyada tutup projelere dahil edebilirsiniz. Cargo Book'a göre yollar, onları dahil eden dosyaya göre çözülür ve yalnızca .toml ile biten yollar kabul edilir. Tablo biçiminde optional = true verirseniz dosya yoksa hata yerine sessizce atlanır.
# .cargo/config.toml
include = [
{ path = "ortak.toml" },
{ path = "yerel.toml", optional = true },
]
# .cargo/ortak.toml
[alias]
kontrol = "check --all-targets"Bu düzende yerel.toml dosyası hiç yokken bile cargo kontrol takma adı çalıştı:
$ cargo kontrol
Checking araclar v0.1.0 (...)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.18sBirleştirme sırasını bilmek önemlidir: önce dahil edilen dosyalar soldan sağa yüklenir ve sonraki dosyadaki değer öncekini ezer; ardından include anahtarını taşıyan dosyanın kendi değerleri en yüksek öncelikle üste eklenir. Dahil edilen dosyalar da kendi include anahtarlarını taşıyabilir. Cargo Book, okunabilirlik için include satırını dosyanın en üstüne ve her dosyayı ayrı satıra yazmayı önerir.
CARGO_BIN_EXE_<ad> artık çalışma anında da var
Entegrasyon testlerinde paketinizin ikili dosyasını çalıştırmak için kullanılan CARGO_BIN_EXE_<ad> değişkeni önceden yalnızca derleme anında, yani env! makrosuyla okunabiliyordu. Cargo 1.94 ile değişken çalışma anında da ayarlanıyor; artık std::env::var ile okunabilir. Cargo Book'a göre bu değişken yalnızca entegrasyon testi veya benchmark çalıştırılırken vardır. Aşağıdaki test iki yolun aynı yolu verdiğini doğruluyor:
// tests/cli.rs
use std::process::Command;
#[test]
fn ikili_calisiyor() {
// Derleme anında: env! makrosu
let derleme = env!("CARGO_BIN_EXE_araclar");
// Çalışma anında: std::env::var (Cargo 1.94 ile mümkün)
let calisma = std::env::var("CARGO_BIN_EXE_araclar").unwrap();
assert_eq!(derleme, calisma);
let cikti = Command::new(&calisma).arg("dünya").output().unwrap();
assert_eq!(String::from_utf8_lossy(&cikti.stdout), "merhaba dünya\n");
}
// cargo test çıktısından:
// çıktı: test ikili_calisiyor ... ok
// çıktı: test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01sTest yazımının geri kalanı için cargo test ile test yazma yazısına bakabilirsiniz.
1.94'teki diğer maddeler
- pubtime alanı: Registry dizinindeki
pubtimealanı kararlı oldu. Bir crate sürümünün ne zaman yayımlandığını kaydeder ve ileride zamana dayalı bağımlılık çözümüne zemin hazırlar. CHANGELOG, crates.io'nun eski paketler için bu alanı kademeli doldurduğunu, her crate'te henüz bulunmadığını not eder. - TOML 1.1: Cargo manifest ve yapılandırma dosyalarını TOML 1.1 olarak okuyabiliyor. Bu yeni sözdizimini
Cargo.tomliçinde kullanmak geliştirme ortamınız için gereken asgari Rust sürümünü yükseltir; yayımlanan manifest ise eski ayrıştırıcılarla uyumlu kalır. - Zamanlama raporu:
--timingsile üretilen HTML raporuna büyük derlemelerde daha hızlı çizen bir SVG seçeneği eklendi. - Hata mesajları: Eksik kaynak dosyaları, eksik bağımlılıklar ve patch tanımları için mesajlar iyileştirildi; istenen özellik adına yakın bir eşleşme yoksa mevcut tüm özellikler listeleniyor.
- Düzeltmeler:
cargo inforegistry açıkça verilmediğinde yerel paketi inceliyor;cargo vendoralt dizinlerdeki.gitattributesve.gitignoredosyalarını da süzüyor;cargo packageworkspace üyesinin dizininden çalıştırıldığında değişmiş dosyaları tespit ediyor.
Ardından gelen 1.94.1 yaması, Unix benzeri sistemlerde kötü niyetli crate'lerin açılırken rastgele yollarda izinleri değiştirebilmesine yol açan iki açığı (CVE-2026-33055 ve CVE-2026-33056) kapattı ve FreeBSD'deki sertifika sorununu libcurl sürümünü geri alarak düzeltti.
Cargo 1.95: ev dizini koruması ve daha iyi ipuçları

Cargo 1.95'in en belirgin değişikliği, ev dizininizde cargo init çalıştırmanın artık yasak olmasıdır. CHANGELOG'a göre bu durum manifest keşfinde sorun çıkarıyor ve Cargo'yu deneyen yeni kullanıcıları kafa karıştırıcı durumlara sokuyordu. Ev dizinindeki dosyalarınızı riske atmamak için bu davranışı denemedik; yeni bir proje için her zaman ayrı bir klasör açın ya da cargo new proje-adi kullanın.
Kullanıcıya dönük ikinci değişiklik zamanlama raporudur: --timings ile üretilen HTML rapor artık SVG ile çiziliyor ve eski canvas seçeneği tamamen kaldırıldı. CHANGELOG, bunun büyük bağımlılık grafiklerinde tepki süresini iyileştirdiğini ve grafiklerdeki metni seçilebilir yaptığını söyler. Rapor target/cargo-timings/ klasörüne yazılır:
$ cargo build --timings
$ ls target/cargo-timings/
cargo-timing-20261107T001030732Z-25761a8ff8995748.html
cargo-timing.htmlcargo remove komutu da daha yardımsever oldu: kaldırmak istediğiniz bağımlılık başka bir tabloda duruyorsa doğru bayrağı öneriyor. Aşağıda bağımlılık [dev-dependencies] altında olduğu için ilk komut başarısız oldu ve Cargo --dev bayrağını önerdi:
$ cargo remove yardimci
Removing yardimci from dependencies
error: the dependency `yardimci` could not be found in `dependencies`
help: pass `--dev` to remove `yardimci` from `dev-dependencies`
$ cargo remove --dev yardimci
Removing yardimci from dev-dependencies- Düzeltme:
cargo test --frozen, seçilen testler için gerekmeyen bağımlılıkları indirmeye çalışmıyor. - Düzeltme:
cargo package, daha büyük bir mevcut.cratedosyasının üzerine yazarken bozuk dosya üretmiyor. - İyileştirme: Önerilen düzeltme mesajı Clippy'nin
CLIPPY_ARGSargümanlarını dikkate alıyor; workspace kökü dışından bileworkspace.membersgirdisi öneriliyor.
Cargo 1.96: rustdocflags için cfg ve iç içe yardım sayfaları
Cargo 1.96 ile yapılandırmada target.'cfg(..)'.rustdocflags desteklenmeye başladı. Bu sayede rustdoc'a yalnızca belirli hedef platformlarda ek bayrak geçebilirsiniz. Cargo Book'a göre birden çok cfg veya hedef üçlüsü girdisi eşleşirse bayraklar birleştirilir. Aşağıdaki ayarla Windows'ta cargo doc çalıştırdığımızda yalnızca bu yapılandırmada görünen fonksiyonun belge sayfası da üretildi:
# .cargo/config.toml
[target.'cfg(windows)']
rustdocflags = ["--cfg", "belge_windows"]/// Her zaman var.
pub fn genel() {}
/// Yalnizca belge_windows cfg ile.
#[cfg(belge_windows)]
pub fn windows_belgesi() {}
// cargo doc sonrası target/doc/yardimci/ içinde:
// çıktı: fn.genel.html
// çıktı: fn.windows_belgesi.htmlBurada rustdoc unexpected `cfg` condition name: `belge_windows` uyarısı da verdi; tanımsız bir cfg adı kullandığınızda bu uyarıyı görmeniz normaldir. Belge üretimi hakkında ayrıntı için rustdoc ve dokümantasyon yorumları yazısına bakın.
İkinci kullanıcı dostu değişiklik, cargo help komutunun iç içe alt komutların kılavuz sayfalarını da göstermesidir. CHANGELOG'daki örneği denedik:
$ cargo help report future-incompat
CARGO-REPORT-FUTURE-INCOMPATIBILITIES(1)
NAMEÇıktının devamında komutun adı, kısa açıklaması ve seçenekleri, tıpkı cargo help build gibi kılavuz sayfası biçiminde listelenir. CHANGELOG'a göre iç içe alt komutların kılavuz sayfalarını cargo help ile göstermek 1.96 ile gelen bir olanak; alt komutları aralarında boşlukla yazmanız yeterli.
- Bağımlılık: Birden çok konum tanımı artık alternatif registry ile birlikte
gitkaynağını da destekliyor; örneğin{ git = "https://...", registry = "my-registry" }. - cargo install: Varsayılan olmayan bir araç zinciriyle kurulum yapıldığında uyarı veriyor.
- macOS:
targetdizini iCloud Drive eşitlemesinin dışında bırakılıyor. - Mesajlar: Üst workspace aranırken Cargo'nun neden yukarı doğru aradığı açıklanıyor ve bir geçici çözüm öneriliyor; hata mesajları rustc tanı stiline yaklaştırıldı.
- Güvenlik: Sembolik bağlantı içeren crate arşivlerinin açılmasıyla ilgili orta seviye CVE-2026-5223 ve normalleştirilmiş URL'lerle kimlik doğrulamaya ilişkin düşük seviye CVE-2026-5222 düzeltildi.
- Düzeltme: 1.94'te bozulan SCP biçimli alt modül URL'leri yeniden korunuyor; workspace yayımlamada döngüsel bağımlılıklarda sessiz takılma giderildi.
1.96.1 yaması libssh2 içindeki bir kritik ve iki yüksek seviyeli açığı (CVE-2025-15661, CVE-2026-55199, CVE-2026-55200) kapattı ve geçici HTTP hatalarında otomatik yeniden denemeyi onardı. SSH üzerinden git bağımlılığı çeken projelerde bu yamanın kurulu olduğundan emin olmak iyi bir fikirdir.
Cargo 1.97: build.warnings, lockfile-path ve -m
build.warnings: uyarısız derlemeyi zorunlu kılmak
Cargo 1.97'nin en kullanışlı yeniliği build.warnings ayarının kararlı olmasıdır. Bu ayar yerel paketlerinizdeki lint uyarılarının nasıl ele alınacağını belirler. Alabileceği değerler warn (varsayılan), allow (uyarıları gizler) ve deny (uyarı üreten crate için hata verir) şeklindedir. CHANGELOG bunu CI'da uyarısız derlemeyi zorunlu kılmanın, -Dwarnings yerine geçen yolu olarak tanıtır. Kullanılmayan bir değişken içeren küçük bir programla denedik:
fn main() {
let kullanilmayan = 5;
println!("merhaba");
}$ cargo build --config 'build.warnings="deny"'
warning: unused variable: `kullanilmayan`
...
error: `araclar` (bin "araclar") generated 1 warning (run `cargo fix --bin "araclar" -p araclar` to apply 1 suggestion)
error: warnings are denied by `build.warnings` configurationKomut 101 çıkış koduyla sonlandı; bu da CI'da işi başarısız saymak için yeterlidir. Aynı ayarı kalıcı olarak .cargo/config.toml içinde [build] tablosuna warnings = "deny" yazarak ya da CARGO_BUILD_WARNINGS ortam değişkeniyle verebilirsiniz. Cargo Book iki sınırı vurgular: yalnızca seviyesi ayarlanabilen lint uyarıları etkilenir, lint olmayan uyarılar olduğu gibi kalır; bağımlılıklardan gelen uyarılar da kapsam dışındadır. deny modunda bağımlı crate'lerin uyarılarını da görmek isterseniz --keep-going kullanabilirsiniz. Lint seviyelerinin genel mantığı clippy, rustfmt ve lint seviyeleri yazısında.
# .cargo/config.toml (CI için)
[build]
warnings = "deny"resolver.lockfile-path: Cargo.lock dosyasını başka yerde tutmak
Yine 1.97 ile kararlı olan resolver.lockfile-path, bağımlılık çözümünde kullanılacak kilit dosyasının yolunu belirler. Varsayılan değer workspace kökündeki Cargo.lock dosyasıdır. CHANGELOG ve Cargo Book bu ayarı özellikle salt okunur kaynak dizinleriyle çalışırken faydalı bulur. Yolun Cargo.lock ile bitmesi zorunludur; denememizde başka bir dosya adı açık bir hatayla reddedildi:
$ cargo check --config 'resolver.lockfile-path="kilit/Cargo.lock"'
$ ls kilit
Cargo.lock
$ cargo check --config 'resolver.lockfile-path="kilit/baska.lock"'
error: the `resolver.lockfile-path` must be a path to a Cargo.lock file-m kısaltması, cargo rustfmt ipucu ve güvenli cargo clean
--manifest-path için -m kısaltması eklendi; başka bir dizindeki projeyi çalıştırmak artık daha kısa. Ayrıca cargo rustfmt yazan kullanıcıya doğru komut olan fmt öneriliyor:
$ cargo run -q -m araclar/Cargo.toml -- test
merhaba test
$ cargo rustfmt
error: no such command: `rustfmt`
help: a command with a similar name exists: `fmt`Belki de en çok veri kaybını önleyecek değişiklik cargo clean ile ilgilidir: --target-dir ile verilen dizin bir Cargo hedef dizinine benzemiyorsa Cargo artık silmeyi reddediyor. İçinde yalnızca bir not dosyası olan sıradan bir klasörle denediğimizde dosya yerinde kaldı:
$ cargo clean --target-dir ../bos_klasor
error: cannot clean `...\araclar\../bos_klasor`: missing or invalid `CACHEDIR.TAG` file
|
= note: cleaning has been aborted to prevent accidental deletion of unrelated files- -p hatası: Yanlış yazılan
-pdeğeri için benzer adlı workspace üyeleri öneriliyor. - cargo clean: Açıkça verilen hedef dizin yoksa artık hata vermiyor ve
build.targetyapılandırmasını dikkate alıyor. - Yapılandırma:
includeile birleştirilen dosyalardaki[env]göreli yolları doğru dosyaya göre çözülüyor; dahil edilen yollardaki..normalleştiriliyor. - cargo publish: 1.96'da ortaya çıkan, workspace yayımlarken registry onayı beklenirken görülen yanlış kilitlenme hatası giderildi.
Cargo 1.98 ve 1.99: düzeltmeler ve performans
Cargo 1.98'in CHANGELOG'unda kararlı tarafta yeni bir özellik yok; iki düzeltme var. Birincisi Windows kullanıcılarını ilgilendirir: cargo:token-from-stdout kimlik sağlayıcılarından gelen belirteçlerin sonundaki satır başı karakteri artık temizleniyor. Bu, 1.96'da ortaya çıkan ve Windows'ta kafa karıştırıcı bir "failed to parse header value" hatasına yol açan bir gerilemeydi. İkincisi, hata mesajlarının küçük harfle başlaması sağlandı.
Cargo 1.99 ise kullanıcıya görünen davranışı değiştirmeden hızlanmaya odaklanıyor: hash map ve set'lerde FxHasher kullanılması, manifest ve registry dizini ayrıştırmada gereksiz bellek ayırmalarından kaçınılması gibi performans iyileştirmeleri yapıldı. Ayrıca --cap-lints=allow ayarlıyken lint ile ilgili rustflags artık rustc'ye geçirilmiyor; bu da çok sayıda bağımlılığı olan projelerde rustc komut satırının uzunluğunu azaltıyor. Bu sürümler için projenizde yapmanız gereken bir değişiklik yok.
Mini senaryo: CI yapılandırmasını güncellemek
Bu değişiklikleri bir araya getiren tipik bir senaryo düşünelim. Ekibinizdeki herkesin aynı takma adları kullanmasını, CI'da uyarı varsa derlemenin başarısız olmasını ve kaynak dizini salt okunur bağlanan bir derleme ortamında kilit dosyasının ayrı bir yere yazılmasını istiyorsunuz. 1.94'teki include ile ortak ayarları bir dosyada toplarsınız; geliştiricinin kendi makinesindeki farklar için optional = true ile isteğe bağlı bir dosya eklersiniz. CI tarafında CARGO_BUILD_WARNINGS=deny ortam değişkenini ayarlarsınız; böylece geliştiriciler yerelde uyarıları görmeye devam eder ama birleştirme öncesi kontrol uyarı kabul etmez. Salt okunur ortamda ise CARGO_RESOLVER_LOCKFILE_PATH ile kilit dosyasını yazılabilir bir dizine yönlendirirsiniz. GitHub Actions ile bir iş akışı kurmak için GitHub Actions CI/CD rehberi yazısına bakabilirsiniz.
Sık yapılan hatalar

- include ile .toml olmayan dosya vermek: Yalnızca
.tomlile biten yollar kabul edilir ve yollar dahil eden dosyaya göre çözülür, çalışma dizinine göre değil. - build.warnings ayarının bağımlılıkları da kapsadığını sanmak: Ayar yalnızca yerel paketlerdeki lint uyarılarını etkiler.
- CARGO_BIN_EXE değişkenini her yerde aramak: Değişken yalnızca entegrasyon testi veya benchmark derlenirken ve çalışırken ayarlanır; sıradan
cargo runsırasında yoktur. - lockfile-path için farklı dosya adı yazmak: Yol
Cargo.lockile bitmelidir. - Ev dizininde proje başlatmak: 1.95'ten itibaren
cargo initbuna izin vermez; projeler için ayrı klasör kullanın. - Nightly maddelerini kararlı sanmak: CHANGELOG'daki "Nightly only" başlığı altındaki
-Zbayrakları kararlı Cargo'da çalışmaz.
Sık Sorulan Sorular
Cargo'yu Rust'tan ayrı güncelleyebilir miyim?
Cargo, Rust araç zinciriyle birlikte aynı sürüm numarasıyla dağıtılır. rustup kullanıyorsanız rustup update ile hem derleyici hem Cargo güncellenir.
-Dwarnings yerine neden build.warnings kullanayım?
CHANGELOG, build.warnings ayarını CI'da uyarısız derlemeyi zorunlu kılmak için -Dwarnings yerine geçen yol olarak tanıtır. Cargo Book'a göre bu ayar yalnızca yerel paketlerdeki lint uyarılarını etkiler ve yapılandırma dosyası ya da ortam değişkeniyle verilebilir.
CHANGELOG'daki her maddeyi bilmem gerekir mi?
Hayır. "Internal" başlığındaki maddeler Cargo'nun kendi geliştirmesiyle ilgilidir, "Nightly only" maddeleri ise kararlı sürümde kullanılamaz. Günlük kullanım için "Added", "Changed" ve "Fixed" başlıkları yeterlidir.
Güvenlik düzeltmeleri için ne yapmalıyım?
1.94.1, 1.96 ve 1.96.1 sürümleri crate açma, kimlik doğrulama ve libssh2 ile ilgili CVE düzeltmeleri içerir. En güncel kararlı sürümü kullanmak bu düzeltmelerin hepsini almanın en basit yoludur.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: Rust öğrenme rehberi · Cargo.toml ve bağımlılıklar · cargo test · clippy ve rustfmt · Rust 2024 edition · GitHub Actions CI/CD