3 puan yazan GN⁺ 2025-08-09 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Linear kullanınca web uygulaması geliştirme yaklaşımım büyük ölçüde değişti
  • Linear, local-first olarak çalışarak anlık tepki ve ağ gecikmesi olmadan etkileşim sağlıyor
  • Bu yaklaşımda istemci, bağımsız bir veritabanına sahip ve değişiklikler eşzamansız olarak sunucuyla senkronize edilir
  • Fakat dağıtık ortamlarda senkronizasyon, çakışma çözümü, çevrimdışı işleme gibi konuların uygulanması zordur
  • Jazz, Electric SQL, Zero gibi local-first ekosistemindeki farklı çözümler ortaya çıkıyor ve geliştirici deneyimi de giderek iyileşiyor

Genel Bakış

Linear adlı proje yönetimi aracını kullanırken, local-first yaklaşımının olağanüstü hız ve kullanıcı deneyiminden büyük ölçüde etkilendim. Geleneksel web uygulamalarında sıkça karşılaşılan ağ gecikmesi, yüklenme durumu, sayfa yenileme gibi durumları neredeyse hiç hissetmemek dikkat çekiciydi. Bu deneyim, local-first paradigmasının teknik prensiplerini ve pratik örneklerini derinlemesine keşfetmeme yol açtı.

Down the Rabbit Hole

Linear’in teknik arka planını incelerken, onların tarayıcının IndexedDB’sini gerçek bir veritabanı gibi kullandığını gördüm. Tüm değişiklikler önce yerelde anında işlenir, ardından GraphQL ve WebSockets ile arka planda senkronizasyon yapılır.

  • local-first terimi, UX stratejisi (anlık yanıt) veya verinin yerel olarak tutulup senkronize edilmesi gibi farklı şekillerde yorumlanabilir
  • Klasik web uygulamalarında sunucu tek kaynak iken, local-first yapıda her istemcinin kendi veritabanı vardır
  • Veritabanının kullanıcıya daha yakın olmasıyla birlikte kullanıcı etkileşimlerinde ağ gecikmesi tamamen ortadan kalkar

The Challenge: This Is Not Trivial

Linear’in yöntemini doğrudan uygulamaya çalışınca karmaşıklığın oldukça yüksek olduğunu gördüm.

  • Çevrimdışı/çevrimiçi geçiş yönetimi
  • Dağıtık istemciler arasında çakışma çözümü
  • Kısmi senkronizasyon (tüm veriyi indirmeden çalışmayı sağlayacak şekilde tasarım)
  • Önbellek verisi şema geçişleri
  • Dağıtık ortamda güvenlik ve erişim kontrolü
  • Bu alanlar ciddi ölçüde mühendislik zamanı ve çaba gerektirir

The Local-First Ecosystem in 2025

2025 itibarıyla local-first ekosisteminde bir dizi güçlü çözüm bulunuyor.

  • Electric SQL: Postgres tabanlı bir senkronizasyon motoru
  • PowerSync: Kurumsal odaklı çözüm
  • Jazz: local-first uygulamaları kolayca kurmayı sağlayan araç
  • Replicache: ana akımdaki önceki çözümlerden biri (geliştirme durdurulmuş)
  • Zero: Replicache ekibinin yeni yönelimi
  • Triplit: TripleStore tabanlı senkronizasyon
  • Instant: Geliştirici deneyimine odaklanır
  • LiveStore: Gerçek zamanlı senkronizasyon katmanı sağlar

Deep Dive: Jazz

Jazz, "local-first uygulamalarını durum güncellemeleri kadar kolay hale getirir" vaadiyle dikkat çekiyor.

The Mental Model

Jazz, Collaborative Values (CoValues) adlı gerçek zamanlı iş birliği yapısı getirdi.

  • Jazz ve Zod ile şema tanımlaması yapılır: Bu tanım basit bir tip değil, otomatik senkronize edilen canlı nesneler gibi çalışır
  • Ek bir API rotası, istek/yanıt mantığı veya DTO oluşturmaya gerek olmadan yalnızca nesne durumunu değiştirildiğinde senkronizasyon otomatik gerçekleşir

How Jazz Achieves This

Jazz’in iç mimarisi özetle şu şekilde:

  • Tekillik garantisi: Her veriye otomatik olarak benzersiz bir kimlik atanır
  • Event sourcing: Değişiklik geçmişi olay olarak saklanır, gerçek zamanlı senkronizasyon verimlirilir
  • Uçtan uca şifreleme: Senkronizasyon öncesi istemci tarafında verinin şifrelenmesi. Sunucu yalnızca şifrelenmiş blob’u görür
  • Grup tabanlı yetkilendirme tasarımı: Geleneksel ACL yerine grup bazlı yetki modeli, sahipliğin net ayrımı

The Trade-offs

Bu yapı, prototipleme ve hızlı UI geliştirme açısından çok üretken. Ancak bazı doğası gereği dikkat edilmesi gereken noktalar var:

Your Server Is Blind

Uçtan uca şifreleme nedeniyle sunucu, kullanıcı verisini okuyamaz. Sunucu tarafında hangi verilere erişim gerektiği önceden net tanımlanmazsa, izleme veya kötü amaçlı depolamayı önleme gibi denetimlerde kısıtlar oluşur.

Time Travel Is Mandatory

Event sourcing nedeniyle tüm değişiklik geçmişi kalıcı saklanır. Bu nedenle geri al/yeniden yap (Undo/Redo) deneyimi çok kolaydır; ancak GDPR gibi yasal gereksinimler düşünüldüğünde silme işlemi zorlaşabilir.

Storage Goes Brrr

Silme yapılmadığı için depolama tüketimi sürekli artar. Küçük projelerde sorun olmayabilir ama büyük ölçekli SaaS’lerde maliyet hızlıca yükselir.

Local Dev Still Has Quirks

Kimlik doğrulama temelde Passkeys etrafında dönüyor; özel geliştirme veya yerel ortamda HTTPS, sertifika yönetimi ve anahtar taşınması gibi adımlar başlangıçta zahmetli olabilir. Ancak Better Auth entegrasyonu gibi iyileştirmeler planlanıyor.

But Honestly? Still Worth It

Bu kısıtlamalara rağmen, Jazz’in geliştirme deneyimi ve verimliliği son derece etkileyici. Henüz erken aşamada ama, zamanla birçok sorun çözüleceği düşünülüyor.

Exploring: Electric SQL and Zero

Jazz’in aksine, Electric SQL ve Zero daha kademeli bir yaklaşım sunuyor.

  • Mevcut Postgres tablolarını doğrudan kullanabilirsiniz
  • Electric SQL, bir tablonun bir bölümünü reaktif sorgu (Shape) olarak abone olup UI’ya senkronize edebilir
  • Değişiklik (mutasyon) işleme yaklaşımı Jazz’ten farklı ve LiveStore entegrasyonu gibi farklı seçenekler var
  • Zero, Electric’e benzer, ancak değişiklik senkronizasyonunu içinde barındırıyor

When Does Local-First Make Sense?

Local-first yaklaşımın uygun olduğu ve zorlayıcı olduğu durumları şöyle özetleyebiliriz

Uygun olduğu durumlar:

  • Yaratımsal araçlar (tasarım, yazı, müzik vb.)
  • İş birliği özellikli uygulamalar
  • Çevrimdışı destek isteyen mobil uygulamalar
  • Geliştirici araçları
  • Kişisel verimlilik uygulamaları

Zorlu olduğu durumlar:

  • Büyük ölçekli sunucu tarafı iş mantığı
  • Sıkı denetim (audit) gereksinimleri
  • Büyük hacimli analitik sistemler
  • Mevcut, derin entegre sistemler
  • Sunucunun sıkça istekleri reddettiği sistemler

Looking Forward

Local-first, web geliştirmede bir paradigma değişimi anlamına gelir. Linear, kullanıcı deneyiminde bunu büyük ölçüde kanıtladı. Geliştiricilerin bu yapısal takasları kendi projelerine uygun olup olmadığını değerlendirmesi gerekir.

Jazz ile kişisel bir uygulama geliştirerek gerçek güçlü ve zayıf yönleri ile soyutlamanın sınırlarını deneyimlemeye devam ediyorum. Ekosistem hâlâ erken bir evrede ve araçlar ile kalıplar zamanla olgunlaşıp gelişecektir. Buna rağmen, veriyi yerelde tutmanın avantajları belirgin ve kaybolmayacak gibi görünüyor.

Yeni bir projede bu kısıtları kabul edebiliyorsanız local-first’i denemeye değer. En kötü senaryoda yeni bir mimari desen öğrenirsiniz, en iyi senaryoda ise imkansız gibi hızlı bir kullanıcı deneyimi kurabilirsiniz. 300ms yanıt yarışında bu önemli bir avantaj olur.

Henüz yorum yok.

Henüz yorum yok.