
Son güncelleme: 28 Mayıs 2026
Quire (53.992 satır, 1.620 KB Dart kodu), 2014'te hem istemci hem sunucu tarafında Dart ile geliştirildi. Daha ince DOM kontrolü için AngularDART ya da Polymer.dart yerine DQuery ve Bootjack kullanıldı. Temel kararlar (tüm yığında güçlü tip denetimi, paylaşılan istemci-sunucu veri modelleri, sunucuda olay döngüsü ve JS çıktısı için tree shaking) 2026'da da geçerliliğini koruyor.
Quire, Dart ile yazılmış ilk web uygulaması değil ve son da olmayacak. Ancak hem istemci hem sunucu tarafında Dart'a bu kadar yoğun biçimde dayanan ilk uygulama olabilir.

Kökünde ağaç yapısı olan eğlenceli bir görev yöneticisi. Proje kendi başına 53992 satır, 1620KB Dart kodundan oluşuyor ve topluluktan birkaç açık kaynak kütüphaneyle geliştirildi.
Bu projeye başlamadan önce biz, Rikulo ekibi olarak bilinen Dart meraklılarıydık. Arayüz çatısı, arayüz kütüphanesi, web sunucusu, mesajlaşma sunucusu, veritabanı istemcisi gibi birçok Dart kütüphanesi yayımlamıştık.
Dart 2011'de ilk çıktığında geleceğinin değerine heyecanlanmıştık ve hemen projelerin küçük bölümlerinde Dart ile çalışmaya başladık. Sonunda ağırlıklı olarak Dart'tan oluşan eksiksiz bir uygulama geliştirmeye geçtik. Burada tecrübelerimizin bir kısmını alçakgönüllülükle paylaşmak, Dart ile geliştirme hakkında size fikir vermek istiyoruz.
Dart'ı seçmek için pek çok neden var. Bizim için en önemlileri şunlar:
Dart'ı seçmenin olumsuz yanları da var:
Güçlü tip desteğiyle Dart'ta yazmak, JavaScript'e göre çok daha güvenilir. Dart ayrıca Java'dan daha az ayrıntılı; bazen (örneğin fonksiyon ifadelerinde) sade JavaScript'ten bile daha kısa. Genel olarak Dart ile çalışmak rahat, birkaç şey dışında:
Dart VM Chrome'a gelene kadar ürününüzü JavaScript'e derleyerek sunmanız gerekiyor. JavaScript'e derlenen çok sayıda dil var, ancak Dart birkaç ek avantajıyla öne çıkıyor.
Sunucu tarafında Dart, Dart topluluğunda hiçbir zaman sıcak bir konu olmadı. Yine de onu güçlü bir sunucu tarafı dili adayı olarak görüyoruz, çünkü:
İlgili yazı: Quire, Verilerinizi Korumak İçin ISO Sertifikası Aldı — sunucu tarafında sağlamlık ve güvenliğe verilen aynı önem, yıllar sonra Quire'ın resmi veri koruma sertifikasında da karşımıza çıkıyor.
Quire yaklaşık 30 kütüphane içe aktarılarak geliştirildi; bunların 10'u topluluktan, geri kalanı Dart ekibinden geliyor. Dart uzmanıysanız AngularDART ve Polymer.dart'ın olduğunu tahmin edebilirsiniz, ancak ikisi de aslında yok.
AngularDART kullanmıyoruz, çünkü:
Polymer.dart da kullanmıyoruz, çünkü:
İstemci tarafı yığınımızın temel taşları DQuery ve Bootjack'tir. İkisi de Rikulo ekibinin yayımladığı açık kaynak projelerdir:
Uygulama yığınımızı, JavaScript dünyasındaki bilgi ve becerilerimizi kullanabilmek için bu yönde kurduk.
Stream, saf Dart ile yazılmış web sunucumuzdur; yönlendirme, filtre, sunucu tarafı MVC gibi yeteneklerle donatılmıştır. Stream, olay döngüsü modeliyle sorunsuz çalışır. Bir istek işleyicisi yazmak, engellemeyen rutinleri art arda zincirlemekten ibarettir.
Bu yaklaşım geleneksel çoklu iş parçacığı modelinden hem daha verimli hem de çalışması daha keyifli. Ayrıca web hizmetimizi ölçeklendirmeyi ve HTTPS'i nginx ile yönetiyor, istekleri Stream'e devrediyoruz. Bu mimariyle Dart VM'leri tek tek başlatıp durdurabiliyor, sunucuyu kullanıcı etkinliğini kesmeden yükseltebiliyoruz.
Dart ile çalışmak bizim için keyifli bir deneyim oldu ve Dart topluluğundaki yeni, heyecan verici gelişmeleri sabırsızlıkla bekliyoruz. Son olarak, Dart ile neler yapabileceğinizi merak ediyorsanız gelin, uygulamamız Quire ile oynayın. Ücretsiz!
Devamı için: Quire'ın sonradan Mark II olarak nasıl yeniden tasarlanıp yeniden inşa edildiği.

Bu yazı yazıldığından beri hem Dart dili hem de Quire kod tabanı önemli ölçüde gelişti. Dart 2.0 (sağlam tip sistemi) 2018'de, Dart 3.0 (null safety, records, patterns) 2023'te geldi. Flutter, çapraz platform arayüz dünyasını değiştirdi (Quire'ın kendi mobil ekibi de ona geçti). Ancak yukarıda anlatılan temel mimari kararlar, beklediğinizden daha iyi ayakta kalıyor.
Hem istemcide hem sunucuda güçlü tip denetimi hâlâ karşılığını veriyor. Güçlü bir tip sisteminin derleme aşamasında yakaladığı çalışma zamanı hataları, hâlâ aynı çalışma zamanı hataları. JavaScript, TypeScript sayesinde tip denetimine kısmen yaklaştı, ancak uçtan uca tam tipli bir yığın hâlâ nadir. Simon'ın işaret ettiği hata sınıfı (sayısız küçük hata), tipsiz bir yığının üretime gönderdiği hata sınıfıyla aynı.
İstemci ile sunucu arasında paylaşılan veri modelleri hâlâ iş yükünü azaltıyor. Çoğaltılan model sorunu (biri JS'te, biri Python'da, sessizce birbirinden sapan iki model), 2026'da da 2014'tekiyle aynı. Çözüm de (uçtan uca tek dil) aynı. Node üzerinde TypeScript kullanan ekipler tam da bu nedenle Quire tarzı mimariler kuruyor.
Web sunucularında olay döngüsü, çoklu iş parçacığına karşı hâlâ kazanıyor. Node, Deno, Bun ve Dart'ın kendi Stream kalıbı bu konuda hemfikir. Tartışma birkaç yılda bir yeniden açılıyor ve hep aynı yere varıyor.
Tree shaking azalmadı, daha da önemli hale geldi. 2014'te Dart'ın tree shaking yapan derleyicisi fark yaratıyordu. 2026'da JS hedefleyen her derleme hattı için temel beklenti. Webpack, Rollup, esbuild ve Vite hepsi bunu yapıyor. Ders geçerli; araçlar yetişti.
2014'teki ShadowDOM kaygıları büyük ölçüde çözüldü. Polymer.dart kullanımdan kaldırıldı. Web Components olgunlaştı. Simon'ın Polymer'den kaçınma gerekçeleri (stil ekleme, çatılarla iş birliği) sonunda platform tarafından giderildi. Genel ilke (üretim uygulamasının çekirdeği için en yeni çatılardan kaçınmak) 2026'da da, o günün "heyecan verici" çatısı ne olursa olsun geçerli.
İlgili yazı: Nasıl Yapıldı: Flutter Tabanlı Mobil Zaman Çizelgesi — Quire'ın mobil ekibinin Flutter'ı kullanarak bir Zaman çizelgesi görünümü nasıl geliştirdiğine bir bakış.
Çok yıllık bir uygulamanın dil yığınını seçmek, geri almanın pahalı olduğu az sayıdaki mühendislik kararından biri. Ekipler yanlış yaptığında dört kalıp tekrar ediyor.
1. Varsayılan olarak en büyük topluluğa sahip dili seçmek. En büyük topluluk JavaScript'te, ama "en büyük", "sorununuza en uygun" demek değil. Güçlü tip sistemi ve iyi araçları olan, topluluğu daha küçük bir dil, zayıf garantilere sahip dağınık bir ekosistemi geride bırakabilir. Topluluk büyüklüğü önemlidir, ama önemli olan tek şey değildir.
2. İstemci ve sunucu dillerini ayıran bir yığın seçmek. Çoğaltılan her veri modeli, patlamayı bekleyen bir hatadır. Sunucuda Ruby, istemcide JS kullanan ekipler bu bedeli sonsuza kadar öder. İki yüzeyde tek dil paylaşan ekipler (Dart, TypeScript, Kotlin) bütün bir hata sınıfından kurtulur.
3. En yeni teknolojiyi oturmadan benimsemek. Quire ekibi 2014'te AngularDART ve Polymer.dart'tan kaçındı, çünkü ikisinin de mimarisinde çözülmemiş sorular vardı. AngularDART köklü bir yön değişikliği yaptı, Polymer ise kullanımdan kaldırıldı. Genel kural (uygulamanızın çekirdeğini bir çatıya bağlamadan önce onun büyük ölçekte üretimde kendini kanıtlamasını bekleyin) 2026'da da, o günün "heyecan verici" çatısı için geçerli.
4. Kısa vadeli hız için tip sistemini atlamak. Tipsiz diller ilk hafta daha hızlı hissettirir. Altıncı ayda, kazanılan zaman hata ayıklama süresiyle fazlasıyla geri ödenir. Hem tipsiz hem tipli yığınları büyük ölçekte yaşamış mühendislik ekipleri, isteyerek geri dönmez.
Quire ekibinin 2014'teki Dart bahsi, geriye bakınca makul görünüyor. Bunun nedeni Dart'ın baskın hale gelmesi değil (gelmedi), altta yatan ölçütlerin (tipli, paylaşılan istemci-sunucu, olay döngüsü, tree shaking) izleyen on yılda sektör uzlaşısına dönüşmesi.
İyi yaşlanan şey belirli araç seçimleri değil, temel mühendislik ilkeleri oldu. Belirsizlik altında yapılan her dil seçimi için bu kalıp genelde geçerli: bugün ölçebildiğiniz popülerliğe göre değil, on yıl sonra da savunabileceğiniz ilkelere göre seçin.
Hem istemcide hem sunucuda Dart ile. Uygulama yaklaşık 54.000 satır Dart kodundan oluşuyor ve yaklaşık 30 kütüphane içe aktarıyor.
Güçlü tip denetimi, sınıf tabanlı kalıtım modeli ve istemci ile sunucuda tek dil. Dart ayrıca bazı modern özellikleri JavaScript'te yaygın desteklenmeden önce sundu.
Ekip, AngularDART'ın bağlamasının izin verdiğinden daha ince bir DOM kontrolü istiyordu. Quire'ın mimari kalıpları da Angular'ın mantığıyla uyuşmuyordu. Polymer.dart ise o dönemde ShadowDOM'un Bootstrap tarzı seçicilerle çakışması nedeniyle tercih edilmedi. Polymer sonradan kullanımdan kaldırıldı; bu da kararı doğruladı.
Rikulo ekibinin (Quire'ın mühendislik ekibi) açık kaynak kütüphaneleri. DQuery, olay delegasyonuna odaklanan kısmi bir jQuery Dart portudur. Bootjack ise neredeyse aynı CSS ve API'lere sahip, Bootstrap 3'ün eksiksiz bir portudur.
Quire'ın saf Dart ile yazılmış, olay döngüsü modelini kullanan web sunucusu. Yönlendirme, filtreler ve sunucu tarafı MVC yerleşik geliyor. Quire, Stream'i nginx'in arkasında çalıştırır; ölçeklendirmeyi ve HTTPS'i nginx yönetir.