Quise sumarle rendimiento a la intuición de Streamlit y así nació 'Violit', un framework Web UI en Python puro
(github.com/violit-dev)Hola.
Actualmente trabajo como desarrollador y, últimamente, después del trabajo y los fines de semana desarrollo open source como hobby.
En lo personal me gusta mucho la sintaxis intuitiva de Streamlit, y sé que varios amigos investigadores de AI/Data a mi alrededor también lo usan bastante. Pero a menudo veía que, a medida que sus proyectos crecían, sufrían por problemas de rendimiento. Como alternativa, yo les recomendaba NiceGUI, pero a la gente le costaba un poco adaptarse a su sintaxis. (Parece que NiceGUI al principio fue hecho por cierta empresa alemana para usarlo internamente... aun así, me parece un framework realmente muy bien hecho).
Además, creo que la estética también es muy importante al mostrar datos. Sin embargo, me di cuenta de que con los frameworks GUI basados en Python que ya existían, decorar algo de forma bonita era más difícil de lo que parece. En particular, una gran desventaja de NiceGUI es que no es fácil salirse del Material Design de Quasar.
Por eso terminé creando yo mismo Violit, con el objetivo de ofrecer una herramienta “tan fácil como Streamlit, pero rápida en rendimiento y sencilla de estilizar”. La base de su arquitectura está sostenida por FastAPI y shoelace(Lit). Sus características principales son las siguientes.
💜 Características principales de Violit
- Intuición 90% similar a Streamlit
- Diseñé la API de forma intuitiva para que, si ya tienes experiencia usando Streamlit, puedas empezar a usarla casi sin curva de aprendizaje.
- O(1) Reactivity & Clean Syntax
- Como en Streamlit, no pasa que por presionar un botón vuelva a ejecutarse todo el script completo (No Re-run).
- Incluso sin decoradores de optimización como
@st.cache, es posible manejar el estado de forma rápida y concisa solo declarando variables (state). (Tomé como referencia el concepto de signal de solid.js).
- Easy Theming System
- Actualmente soporta alrededor de 30 temas predefinidos para aplicar una UI atractiva al instante.
- Pronto también planeo actualizarlo con una función para que los usuarios puedan personalizar directamente sus propios temas.
- Hybrid Engine & Multi-Platform
- Incorpora un motor flexible que soporta tanto modo Lite usando HTMX como modo WebSocket, según lo que elija el usuario. Al principio está bien, pero pensé que cuando más adelante lleguen muchos usuarios, quizá WebSocket podría volverse un cuello de botella y ralentizarlo.
- Puedes alternar libremente entre modo servicio Web y app de escritorio (
pywebview) sin modificar el código.
No sé hasta dónde podrá expandirse este proyecto, pero tengo la ligera expectativa de que, si se pule bien, podría permitir construir mucho más rápido y solo con Python servicios a nivel MVP que antes se hacían con Django o RoR. Para mostrar su potencial real, también incluí código de ejemplo para montar un blog hecho con Violit.
Aún está en una etapa completamente inicial, v0.0.4 (PoC), pero ha recibido una respuesta bastante positiva en Reddit y otros lugares, y superó las 200 estrellas apenas dos semanas después de su publicación, así que me animé a compartirlo también aquí. Casi siempre había hecho desarrollo de software solo como parte de mi trabajo en la empresa... y este es en realidad mi primer proyecto open source totalmente público. En lo personal, estoy disfrutando muchísimo la diversión pura de desarrollar software.
Si alguna vez necesitan crear algo como una Web UI en Python, les agradecería que le echaran un vistazo.. :)
- GitHub Repo. : https://github.com/violit-dev/violit
- README en coreano : https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Ejemplo de blog : https://github.com/violit-dev/violit/…
16 comentarios
Lo apoyo con entusiasmo.
Muchísimas gracias por el apoyo. :) Voy a seguir actualizando con ganas y disfrutándolo. Me da mucha alegría.
Recientemente intenté automatizar tareas usando pywebview. Como es para escritorio, estaba pensando en cómo manejar la parte web... ¿si uso esto en pywebview, se podría usar fácilmente también en la web?
¿Se puede migrar fácilmente a un sitio web algo desarrollado con PyWebView usando Violit?
Como la pregunta no parece ser lo suficientemente específica, vuelvo a consultarlo.
Actualmente estoy creando y usando una app de escritorio con
pywebview. Me interesa porque Violit dice que soporta multiplataforma web/desktop (pywebview).pywebviewa la estructura de Violit es, en términos realistas, algo relativamente sencillo?pywebview→ web)Hola. La dificultad de la migración varía mucho según la estructura de la app existente que hayan creado.
Si la app existente se implementó sin un servidor web aparte (como FastAPI), y solo con la API JS de pywebview o cargando HTML local, entonces para desplegarla en la web hay que rehacer la capa de comunicación desde cero. Por eso, puede ser difícil convertir directamente a web el código que hicieron de forma sencilla con pywebview.
Pueden considerar que esta parte no tiene relación con violit. Más que violit cambie una app existente hecha con pywebview, la idea es que si la crean con violit, desde el inicio está diseñada para soportar al mismo tiempo web y pywebview (desktop).
Gracias.
He preparado una página web de demostración y la documentación para que puedan probarlo de inmediato.
Creo que valdría la pena que les den un vistazo. :)
Como referencia, ambos sitios web fueron creados con Violit.
Gracias. Estoy considerando probar esto para el trabajo de la empresa.!!
Sí, gracias. Pruébenlo y, si hay alguna parte que les resulte incómoda o poco práctica, por favor díganmelo.
Parece que hace falta reforzar un poco el código de pruebas y la documentación.
A continuación, dejé preparada una página web de demostración y la documentación para que puedan probarlo de inmediato.
Creo que valdría la pena que les den un vistazo. :)
Como referencia, ambos sitios web fueron creados con Violit.
Sí, gracias por el buen feedback. La implementación actual está a nivel de POC, y como hay muchos cambios incompatibles en la interfaz pública y a nivel de diseño, por ahora el plan es agregar código de pruebas a partir de la versión 0.5.
Como mencionaste, estamos priorizando primero la apertura del sitio web y el trabajo de documentación, así que parece que estará disponible muy pronto. Como el primer objetivo son los usuarios existentes de Streamlit, y la sintaxis es casi idéntica, sentíamos un poco menos la necesidad de documentarlo.
Por favor, espéranos un poco más~
Estaría bueno que hubiera una página web de demostración para poder probarlo de inmediato.
A continuación dejé preparada una página web de demostración que pueden probar de inmediato, junto con la documentación.
Creo que valdría la pena que le echaran un vistazo. :)
Como referencia, ambos sitios web fueron creados con Violit.
Sí, gracias por la buena sugerencia. Como todavía es una versión inicial, aún no tiene sitio web, pero cuando lo hagamos, probablemente podrán probar varios widgets en la web. Sobre todo, por ahora estamos ajustando poco a poco el diseño para enfatizar que se puede crear algo más bonito que con otras alternativas. :)