Linear beni local-first tavşan deliğine götürdü
(bytemash.net)- 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.