Streamlit'in sezgiselliğine performans eklemek isteyerek başlayan Pure Python Web UI Framework 'Violit'
(github.com/violit-dev)Merhaba.
Bu aralar iş çıkışı ve hafta sonlarında hobi olarak açık kaynak geliştiriyorum; aktif olarak çalışan bir geliştiriciyim.
Ben kişisel olarak Streamlit'in sezgisel sözdizimini çok seviyorum ve çevremdeki AI/Data araştırmacısı arkadaşlarımın da onu sıkça kullandığını biliyorum. Ancak proje büyüdükçe insanların performans sorunlarıyla sık sık zorlandığını gördüm. Alternatif olarak onlara NiceGUI öneriyordum, fakat insanlar sözdizimine alışmakta biraz zorlanıyordu. (NiceGUI sanırım başlangıçta Almanya'daki bir şirketin kendi içinde kullanmak için yaptığı bir şeydi.. ama gerçekten çok iyi yapılmış bir framework olduğunu düşünüyorum.)
Ayrıca veri gösterirken "estetik" unsurunun da çok önemli olduğunu düşünüyorum. Ancak mevcut Python tabanlı GUI framework'leriyle güzel görünen arayüzler hazırlamanın düşündüğümden daha zor olduğunu fark ettim. Özellikle NiceGUI'nin büyük dezavantajlarından biri, Quasar'ın Material Design yaklaşımının dışına çıkmanın pek kolay olmaması.
Bu yüzden hedefi "Streamlit kadar kolay, ama performansı hızlı ve stil vermesi de pratik bir araç" olan Violit'i kendim geliştirmeye başladım. Mimarinin temelinde FastAPI ve shoelace(Lit) yer alıyor. Başlıca özellikleri şöyle:
💜 Violit'in başlıca özellikleri
- Streamlit ile %90 benzer sezgisellik
- Daha önce Streamlit kullanmış olanların neredeyse hiç öğrenme eğrisi yaşamadan hemen kullanabilmesi için API'yi sezgisel biçimde tasarladım.
- O(1) Reactivity & Clean Syntax
- Streamlit'teki gibi tek bir düğmeye basınca tüm script baştan çalışmıyor (
No Re-run). @st.cachegibi optimizasyon dekoratörleri olmadan da, yalnızca basit değişken (state) tanımıyla hızlı ve sade durum yönetimi yapılabiliyor. (solid.js'in signal kavramından esinlendim.)
- Easy Theming System
- Şu anda yaklaşık 30 hazır tema destekleniyor, böylece anında güzel bir UI uygulayabiliyorsunuz.
- Yakında kullanıcıların temaları doğrudan özelleştirebileceği bir özellik de eklemeyi planlıyorum.
- Hybrid Engine & Multi-Platform
- Kullanıcının tercihine göre HTMX kullanan Lite modu ile WebSocket modunu birlikte destekleyen esnek bir motor ekledim. Başta sorun olmayabilir ama ileride kullanıcı sayısı arttığında WebSocket yüzünden yavaşlama yaşanabilir diye düşündüm.
- Kod değiştirmeden Web servisi ile Desktop uygulaması (
pywebview) modu arasında serbestçe geçiş yapılabiliyor.
Bu projenin nereye kadar genişleyeceğini bilmiyorum ama iyi olgunlaştırılabilirse, Django veya RoR ile yapılabilecek MVP seviyesindeki servisleri yalnızca Python ile çok daha hızlı kurmanın mümkün olabileceğini düşünüyorum. Gerçek potansiyelini göstermek için Violit ile yapılmış bir blog kurulum örneği kodunu da ekledim.
Henüz tamamen çok erken bir aşama olan v0.0.4 (PoC) seviyesinde, ama Reddit gibi yerlerde oldukça olumlu tepkiler aldı ve yayımlandıktan sadece 2 hafta sonra 200'den fazla star aldığı için cesaret bulup burada da paylaşmak istedim. Neredeyse her zaman sadece şirket işleri için yazılım geliştirmiştim.. bu kadar tamamen açık bir açık kaynak proje ise benim için ilk. Kişisel olarak saf yazılım geliştirmenin keyfini gerçekten çok hissediyorum.
Python ile Web UI gibi şeyler yapmanız gerektiğinde bir göz atarsanız sevinirim.. :)
- GitHub Repo. : https://github.com/violit-dev/violit
- Türkçe README : https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Blog örneği : https://github.com/violit-dev/violit/…
16 yorum
Güçlü şekilde destekliyorum
Desteğiniz için çok teşekkür ederim. :) Hevesle ve keyifle güncellemeye devam edeceğim. Bu gerçekten büyük bir mutluluk.
Geçenlerde pywebview kullanarak iş otomasyonu yapmayı denedim. Masaüstü olduğu için web tarafını nasıl ele alacağımı düşünüyordum... Bunu pywebview içinde kullanırsam web’de de kolayca kullanabilir miyim?
PyWebView ile geliştirilmiş bir şeyi, violit kullanarak kolayca bir web sitesine taşıyabilir miyiz?
Sorunun yeterince spesifik olmadığını düşündüğüm için tekrar sormak istiyorum.
Şu anda
pywebviewile masaüstü uygulaması geliştirip kullanıyorum.Violit'in web/desktop(
pywebview) çoklu platform desteği sunduğunu görünce merak ettim.pywebviewtabanlı bir uygulamayı Violit yapısına taşımak pratikte nispeten kolay mı?gerçek hizmet ölçeğinde de yapısal olarak aynı kod tabanını koruyarak web servisine genişlemek mümkün olacak şekilde tasarlanmış mı, bunu merak ediyorum. (
pywebview→ web dağıtım yapısı açısından)Merhaba. Geçiş zorluğu, büyük ölçüde mevcut uygulamanızın yapısına göre değişir.
Eğer mevcut uygulama ayrı bir web sunucusu (FastAPI vb.) olmadan yalnızca pywebview'in js api'si veya yerel HTML yükleme yöntemiyle geliştirildiyse, web dağıtımı için iletişim katmanını baştan yazmanız gerekir. Bu nedenle pywebview ile kolayca yazdığınız kodu doğrudan web'e çevirmek zor olabilir.
Bu kısmın violit ile ilgili olmadığını düşünebilirsiniz. Bunu, violit'in pywebview ile yapılmış mevcut uygulamayı dönüştürmesinden ziyade, violit ile geliştirildiğinde en baştan web ve pywebview(desktop) desteğini aynı anda sağlayacak şekilde tasarlandığı şeklinde anlayabilirsiniz.
Teşekkür ederim.
Aşağıda hemen deneyebileceğiniz bir demo web sayfası ve Documentation hazırladık.
Bir göz atmanız iyi olabilir. :)
Bu arada, iki web sitesi de Violit ile oluşturuldu.
Teşekkürler. Şirket işlerinde bunu kullanmayı düşünüyorum.!!
Evet, teşekkürler. Deneyip kullanın; rahatsız olduğunuz veya kullanışsız bulduğunuz bir kısım olursa lütfen bana bildirin.
Test kodları ve dokümantasyonun biraz daha güçlendirilmesi gerekiyor gibi görünüyor.
Aşağıda hemen deneyebileceğiniz bir demo web sayfası ve dokümantasyon hazırladık.
Bir göz atmanızın faydalı olacağını düşünüyorum. :)
Bu arada, her iki web sitesi de Violit ile oluşturuldu.
Evet, iyi geri bildiriminiz için teşekkür ederim. Mevcut uygulama şu anda POC seviyesinde ve public interface ile design seviyesinde breaking change'lerin çok olduğu bir durumdayız; bu yüzden şu anki planımız, test kodlarını 0.5'ten itibaren eklemek.
Söylediğiniz gibi, öncelik olarak ana sayfanın açılması ve documentation çalışmalarını yürütüyoruz; sanırım yakında açılmış olacak. İlk hedef kitlemiz mevcut Streamlit kullanıcıları olduğu için, söz dizimi neredeyse aynı olduğundan dokümantasyon ihtiyacını biraz daha az hissetmiştik.
Lütfen biraz daha bekleyin~
Hemen deneyebilmek için bir demo web sayfası olsa iyi olurdu
Aşağıda hemen deneyebileceğiniz bir demo web sayfası ve Documentation hazırladık.
Bir göz atmanız iyi olabilir. :)
Bu arada, her iki website de Violit ile oluşturuldu.
Evet, güzel görüşünüz için teşekkürler. Henüz erken sürüm olduğu için bir ana sayfa yok, ancak bir ana sayfa yaptığımızda muhtemelen web üzerinde çeşitli widget'ları deneyebileceksiniz. Her şeyden önemlisi, şu anda diğer alternatiflere göre daha estetik şeyler üretilebildiğini vurgulamak için tasarımı yavaş yavaş değiştiriyoruz. :)