9 puan yazan GN⁺ 2025-11-09 | 2 yorum | WhatsApp'ta paylaş
  • Snap’in geliştirdiği Valdi, iOS, Android ve macOS’ta yerel performans sunan bir çapraz platform UI framework’ü; bildirimsel TypeScript ile yazılan UI’yi her platformun yerel görünümüne doğrudan derliyor
  • WebView veya JavaScript bridge olmadan çalışıyor; otomatik view yeniden kullanımı, optimize edilmiş layout engine ve viewport tabanlı rendering gibi yapılarla yüksek performansı koruyor
  • Anında hot reload, VSCode debugging, TSX sözdizimi desteği gibi özelliklerle geliştirme hızını artırıyor ve mevcut yerel uygulamalarla entegrasyonu da esnek biçimde destekliyor
  • TypeScript ile yerel kod arasında type-safe binding, protobuf desteği, C++·Swift·Kotlin entegrasyonu ile derin bir yerel entegrasyon yapısı sunuyor
  • 8 yıl boyunca Snap’in production uygulamalarında doğrulanmış bir teknoloji olarak, büyük ölçekli animasyonlar, gesture’lar ve çok iş parçacıklı işlemler gibi ileri seviye özellikleri içeren ölçeklenebilir bir UI geliştirme temeli sağlıyor

Valdi’ye genel bakış

  • Valdi, Snap tarafından 8 yıldır production uygulamalarında kullanılan bir çapraz platform UI framework’ü
    • UI’yi bildirimsel TypeScript ile yazdığınızda bunu iOS, Android ve macOS’un yerel görünümlerine doğrudan derliyor
    • WebView veya JavaScript bridge olmadan yerel performans sunuyor
  • Şu anda beta aşamasında; açık kaynak ekosistemindeki araçlar ve dokümantasyon yeterince oturduğunda kararlı sürüme geçmesi planlanıyor

Temel özellikler ve örnekler

  • Temel bileşen örneğinde HelloWorld sınıfı içinde ve kullanılarak basit bir UI oluşturuluyor
  • TypeScript tabanlı bildirimsel bileşen yapısı kullanıyor ve aynı kod her platformda çalışabiliyor
  • Resmî dokümantasyon, kurulum rehberi, API referansı ve Codelab gibi geliştirici kaynakları sunuluyor

Performans optimizasyonu

  • Yerel performans sağlamak için şu mimari tercihleri kullanıyor
    • Otomatik view yeniden kullanımı: Küresel view pooling sistemiyle ekranlar arasında view’ları yeniden kullanıyor, inflation gecikmesini en aza indiriyor
    • Bağımsız bileşen rendering’i: Ebeveyn rendering’ini etkilemeden yalnızca ilgili bileşeni güncelliyor
    • C++ tabanlı layout engine: Ana thread üzerinde minimum overhead ile çalışıyor
    • Viewport farkındalıklı rendering: Yalnızca ekranda görünen view’ları inflate ederek sonsuz kaydırma performansını artırıyor
  • İlgili doküman olarak Performance Optimization Guide sunuluyor

Geliştirici deneyimi

  • Hot reload özelliğiyle kod değişiklikleri anında yansıtılıyor
  • VSCode debugging desteği: Breakpoint ayarlama, değişken inceleme, performans profilleme ve heap dump yakalama mümkün
  • TSX sözdizimi ve type safety ile tanıdık bir geliştirme ortamı sağlıyor

Esnek entegrasyon yapısı

  • Mevcut yerel uygulamalara Valdi gömülebiliyor (Embed Valdi in native)
  • Valdi içinde yerel view kullanımı mümkün (Embed native in Valdi)
  • Polyglot modüller aracılığıyla C++, Swift, Kotlin ve Objective-C koduyla type-safe entegrasyon sağlanıyor
  • Full-stack mimari ile arka plan worker thread’lerinden yararlanarak tam işlevli yapılar kurulabiliyor

Yerel entegrasyon

  • Otomatik kod üretimi ile TypeScript arayüzlerini Kotlin, Objective-C ve Swift binding’lerine dönüştürüyor
  • Polyglot modüller üzerinden platform API’lerine ve üçüncü taraf yerel kütüphanelere doğrudan erişim sağlıyor
  • Çift yönlü iletişim ile karmaşık veri yapıları ve callback’ler güvenli biçimde aktarılabiliyor
  • protobuf desteği ile verimli veri serileştirme mümkün

Kanıtlanmış kararlılık ve özellikler

  • Snap’in ana production özelliklerini çalıştıran çekirdek teknoloji
  • Gelişmiş animasyonlar, gerçek zamanlı rendering ve karmaşık gesture sistemleri destekleniyor
  • Flexbox layout, çok iş parçacıklı worker’lar, yerel animasyonlar, gelişmiş gesture tanıma, yerleşik test framework’ü ve Bazel ile entegre build dahil pek çok özellik içeriyor

Destek ve lisans

  • Discord topluluğu üzerinden destek sunuluyor
  • MIT lisansı ile yayımlandığı için özgürce kullanılabiliyor ve katkı verilebiliyor

2 yorum

 
GN⁺ 2025-11-09
Hacker News görüşleri
  • Şirketimiz React Native kullanıyor ve uygulama mağazalarıyla platforma özgü diller arasındaki farkların sona ermesini gerçekten çok istiyoruz
    Gelecek yıl sadece web sitesi tabanlı ilerleyip, mobil uygulamayı WebView ile sarmayı ve bildirim, GPS, HealthKit gibi özellikleri yalnızca native kodla ele almayı düşünüyoruz
    Bu aralar AI sayesinde her platform için UI'ı ayrı ayrı yapmanın aslında daha iyi olabileceğini düşünmeye başladım

    • Ben de bunu yaptım ve pişman olmadım. Bu, halk arasında “WebView uygulaması” denilen şey ama platforma göre oldukça iyi bir deneyim sunabiliyor
      İşin püf noktası, UI bileşenlerini fazla sıra dışı yapmamak ve yalnızca düğme stilleri ya da geri yığını gibi kısımları platforma göre biraz ayarlamak
      Ayrıca Service Worker ile çevrimdışı özellik ekledim ve sorunları hızlı tespit edebilmek için uygulama açılırken ağ tanılama araçlarını çalıştırdım
      Yine de benim uygulamam B2B içindi, bu yüzden böyle bir yapı mümkündü
    • Ama hâlâ WebView'ı native bir kapsayıcıyla sarmak zorundaysanız, o noktada zaten iOS kod imzalama cehennemine adım atmışsınız demektir
      Bence web'in asıl amacı uygulama mağazalarını ve kod imzalamayı baypas etmekti
      Çoğu özellik web'de de yapılabilir, yalnızca HealthKit ayrı bir yardımcı uygulamayla ele alınabilir
      Pazarlama bütçesiyle QR kodları ya da bağlantıları tanıtmak, uygulama mağazasında rekabet etmekten çok daha verimli olabilir
    • Ben de her 10 yılda bir böyle bir girişimde bulunuyorum. Başta hızlı geliştirme hızına kapılıyorsunuz ama sonra yeni OS özelliklerinin entegrasyonu veya gesture desteğinde bedelini ödüyorsunuz
      Özellikle iOS'ta ‘geri gitmek için kaydırma’ çalışmadığı anda bunun bir WebView olduğunu hemen anlıyorsunuz
    • AI, Apple'ın yönergelerini değiştirmez
      Ben iş odaklı UI'ı bir kez yazıp LLM ile React Native ve React arasında dönüşüm yapıyorum
      Ama Apple hâlâ “yalnızca bir web sitesini paketleyen uygulamalar reddedilir” diyen 4.2 minimum işlevsellik kuralını sürdürüyor
    • Karmaşık ve uzun ömürlü bir uygulamayı her platform için üç kez yazmak neredeyse bir kâbus
      Özellikleri ve testleri üç platformda senkron tutmanız gerekiyor, ayrıca geliştiricilerin birden fazla stack'te yetkin olması lazım
      Çoğu kullanıcı iyi yapılmış bir WebView ile native bir uygulama arasındaki farkı neredeyse fark etmiyor ama bunun maliyeti çok yüksek
  • Valdi kavramsal olarak React Native'e benziyor gibi görünüyor
    Artık React tabanlı çapraz platform framework sayısı React Native, Lynx.js(ByteDance/TikTok), Valdi olmak üzere üçe çıktı
    Rekabet iyi ama RN kadar büyük bir ekosistemi hızlıca kurup kuramayacağı şüpheli
    RN bu yıl Hermes motoru iyileştirmeleri, native binding oluşturucu, çok iş parçacıklı animasyonlar, Tailwind desteği gibi pek çok ilerleme kaydetti
    Lynx.js, React dışındaki framework'leri de desteklemeye çalıştığı için daha avantajlı olabilir

    • Biraz bakınca Valdi'nin VSCode hata ayıklamayı tam desteklediğini gördüm
      RN'in Radon IDE'si ücretli, Valdi ise açık kaynak
      Valdi'nin RN'in Hermes motorunu kullanması da ilginç
      İlgili belge'ye bakınca AOT/JIT uygulama biçiminin nasıl olduğu merak uyandırıyor
  • Geçmişte Snap'te bu projenin ilk sürümünde (Screenshop!) birlikte debug yapmıştım
    Simon harika bir mühendisti ve bu projenin yayımlanmış olmasına gerçekten sevindim
    Snap ekibini tebrik ederim

    • Snap gibi nispeten basit bir uygulamanın çapraz platform UI framework'üne yatırım yapması şaşırtıcıydı
      Kamera, AR, bildirimler, ekran görüntüsü algılama gibi native entegrasyonların önemli olduğu bir uygulama olduğu için daha da şaşırtıcı
    • O zaman da gerçekten harika bir projeydi ve hedefin açık kaynak hâline getirmek olduğunu hatırlıyorum
      Bunun gerçeğe dönüşmesine sevindim
    • Ben de Simon'la çalışırken web'e port etmeyi denedim ama başarısız oldum
      Gerçekten çok zeki biri, tüm ekibi tebrik ederim
    • Bugün olsa bu framework'ü gerçek bir projede kullanır mıydınız, merak ediyorum
    • Aklıma “Composer” adı geliyor
  • Snapchat'in yaptığı bir UI framework için Discord topluluğu olması bana hiç cazip gelmiyor

    • Bu aralar birçok proje topluluğunu Discord'a taşıyor
      Mükemmel değil ama geleceğin akışının dışında kalmak anlamına da gelebilir
    • Ben de Discord'u sık kullanıyorum ama iş amaçlı topluluk için hâlâ elverişsiz buluyorum
  • Belgelerde “C++, Objective-C, Kotlin nesnelerini TypeScript'e açarsanız Native Reference, tersi durumda JS Value Reference olur” yazıyor ama
    Swift veya SwiftUI'dan bahsedilmemesi biraz endişe verici

  • Açıkçası Snap'in yaptığı bir framework'e güvenmek zor
    Çünkü geçmişte Android uygulama kalitesi çok kötüydü

    • Eskiden fotoğraf çekmek yerine, kamera görünümünün ekran görüntüsünü aldıklarını öğrenince şoke olmuştum
  • Valdi, “TypeScript ile bir kez yazıp iOS, Android, macOS'ta native performansla çalışan bir UI framework'ü” olarak tanıtılıyor
    WebView veya JS bridge olmadığını özellikle vurguluyor

    • “İkisi de bizde var. Country and western!” diye şaka yapıyor
  • Bence her platformun native diliyle UI'ı iki kez yazıp, ortak mantığı C ailesi FFI ile paylaşmak yeterli
    Ne kadar zor olabilir ki?

    • Biz de o yöne gidiyoruz. Şu anda yalnızca iOS'u destekliyoruz ama kullanıcı geri bildirimi aldıktan sonra Android'e açılmayı planlıyoruz
      Ekibin çoğu Android kullanıcısı ama müşteriler iOS ağırlıklı olduğu için önceliği öyle verdik
      RN uygulaması geliştirme deneyimim oldu ama hâlâ gerçekten sihir gibi bir çapraz platform çözümü bekliyorum
    • Ben de katılıyorum. Asıl mesele, iş mantığını UI'dan ayıran bir mimari tasarlamak
      Böylece web, mobil, masaüstü, CLI gibi farklı arayüzler yalnızca çekirdeği çağıran ince katmanlara dönüşür
      Tam anlamıyla tutarlı bir UX zor olabilir ama uzun vadede 3rd-party framework bağımlılığını azaltabilirsiniz
  • Valdi'nin durum yönetimi yaklaşımını merak edenler için, React'in sınıf bileşeni stilini aynen kullanıyor
    Resmî belge örneği'ne bakarsanız StatefulComponent'ten türeyip onCreate, onDestroy, onRender uygulanan bir yapı görürsünüz

    • Ben de React sınıf bileşenlerini özlüyorum
      Şimdiki gibi onlarca useFunction kullanmak daha hataya açık ve daha karmaşık
  • Ne yazık ki Linux, Windows, HTML hedefleri desteklenmiyor

 
clastneo 2025-11-10

RN'de çoğu uygulamanın iş mantığı yalnızca JS ile de yeterince hızlı çalıştırılabiliyor.
Ancak iş ince ayara gelince, "platforma göre davranışların sık sık farklı olması" yüzünden çözüm üretmesi umutsuz derecede zorlaşan asıl sorunun bu olduğunu düşünüyorum.