- 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
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
İş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ü
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
Özellikle iOS'ta ‘geri gitmek için kaydırma’ çalışmadığı anda bunun bir WebView olduğunu hemen anlıyorsunuz
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
Ö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
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
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ı
Bunun gerçeğe dönüşmesine sevindim
Gerçekten çok zeki biri, tüm ekibi tebrik ederim
Snapchat'in yaptığı bir UI framework için Discord topluluğu olması bana hiç cazip gelmiyor
Mükemmel değil ama geleceğin akışının dışında kalmak anlamına da gelebilir
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ü
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
Bence her platformun native diliyle UI'ı iki kez yazıp, ortak mantığı C ailesi FFI ile paylaşmak yeterli
Ne kadar zor olabilir ki?
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
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üreyiponCreate,onDestroy,onRenderuygulanan bir yapı görürsünüzŞimdiki gibi onlarca
useFunctionkullanmak daha hataya açık ve daha karmaşıkNe yazık ki Linux, Windows, HTML hedefleri desteklenmiyor
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.