Violit, un framework Web UI en pur Python né de l’envie d’ajouter de meilleures performances à l’intuitivité de Streamlit
(github.com/violit-dev)Bonjour.
Je suis développeur en activité et, ces temps-ci, je développe un projet open source comme loisir après le travail et le week-end.
Personnellement, j’aime beaucoup la syntaxe intuitive de Streamlit, et je sais que beaucoup d’amis chercheurs en IA/Data autour de moi l’utilisent aussi. Mais j’ai souvent vu des gens souffrir de problèmes de performances à mesure que leurs projets grossissent. Je leur ai alors recommandé NiceGUI comme alternative, mais beaucoup ont eu du mal à s’adapter à sa syntaxe. (Il me semble que NiceGUI a d’abord été créé par une entreprise allemande pour un usage interne… mais je pense vraiment que c’est un framework très bien conçu.)
Je pense aussi que l’« esthétique » est très importante lorsqu’on présente des données. Pourtant, j’ai constaté qu’il est étonnamment difficile de créer quelque chose de joli avec les frameworks GUI existants basés sur Python. En particulier, un gros inconvénient de NiceGUI est qu’il est difficile de s’éloigner du Material Design de Quasar.
C’est pourquoi j’ai créé moi-même Violit, avec pour objectif « un outil aussi simple que Streamlit, mais plus rapide et plus facile à styliser ». L’architecture repose principalement sur FastAPI et shoelace(Lit). Voici ses principales caractéristiques.
💜 Principales caractéristiques de Violit
- Une intuitivité à 90 % similaire à Streamlit
- Si vous avez déjà utilisé Streamlit, l’API a été conçue pour être suffisamment intuitive afin de pouvoir l’utiliser presque immédiatement, sans courbe d’apprentissage notable.
- Réactivité en O(1) & syntaxe propre
- Contrairement à Streamlit, appuyer sur un simple bouton ne relance pas tout le script (
No Re-run). - Même sans décorateurs d’optimisation comme
@st.cache, une simple déclaration de variable (state) suffit pour gérer l’état de façon rapide et concise. (Je me suis inspiré du concept de signal de solid.js.)
- Système de thèmes simple
- Environ 30 thèmes prédéfinis sont actuellement pris en charge, ce qui permet d’appliquer immédiatement une belle interface.
- Je prévois bientôt d’ajouter une fonctionnalité permettant aux utilisateurs de personnaliser eux-mêmes les thèmes.
- Moteur hybride & multiplateforme
- Le moteur prend en charge à la fois un mode Lite basé sur HTMX et un mode WebSocket, selon le choix de l’utilisateur. Au début, cela va bien… mais je me suis dit qu’à terme, si le nombre d’utilisateurs augmentait, les WebSocket pourraient devenir un facteur de ralentissement.
- Sans modifier le code, il est possible de passer librement d’un service Web à une application Desktop (
pywebview).
Je ne sais pas jusqu’où ce projet pourra s’étendre, mais s’il est bien peaufiné, j’espère qu’il permettra de construire beaucoup plus rapidement, uniquement en Python, des services de niveau MVP que l’on aurait autrement créés avec Django ou RoR. Pour montrer cette possibilité concrètement, j’ai également inclus un exemple de code de blog construit avec Violit.
Le projet n’en est encore qu’à une phase très initiale, en v0.0.4 (PoC), mais il a déjà reçu des réactions assez positives sur Reddit et ailleurs, et a dépassé les 200 étoiles en seulement deux semaines après sa publication. Cela m’a donné le courage de le partager ici aussi. J’ai presque toujours fait du développement logiciel uniquement dans le cadre de mon travail en entreprise… et c’est la première fois que je publie un projet open source entièrement ouvert. Personnellement, j’y retrouve énormément le plaisir pur du développement logiciel.
Si jamais vous avez l’occasion de créer une Web UI en Python, je vous serais reconnaissant d’y jeter un œil :)
- GitHub Repo. : https://github.com/violit-dev/violit
- README en coréen : https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Exemple de blog : https://github.com/violit-dev/violit/…
16 commentaires
Je vous soutiens vivement.
Merci beaucoup pour votre soutien. :) Je vais continuer à faire des mises à jour avec enthousiasme et plaisir. C’est très réjouissant.
Récemment, j’ai essayé d’automatiser certaines tâches avec PyWebView. Comme c’est une application desktop, je me demandais comment gérer la partie web… Si j’utilise ça dans PyWebView, est-ce que je pourrai aussi l’utiliser facilement sur le web ?
Est-il possible de migrer facilement vers un site web, à l’aide de violit, quelque chose qui a été développé avec pywebview ?
Comme la question ne semblait pas assez précise, je me permets de la reformuler.
J’utilise actuellement
pywebviewpour créer une application desktop.J’ai vu que Violit prenait en charge le multi-plateforme web/desktop (
pywebview), donc je suis curieux à ce sujet.pywebviewvers l’architecture de Violit ?mais je me demande si, à l’échelle d’un vrai service, l’architecture permet réellement de conserver la même codebase tout en étendant le service au web. (Du point de vue d’une structure de déploiement
pywebview→ web.)Bonjour. La difficulté de migration varie fortement selon la structure de l’application existante que vous avez conçue.
Si l’application actuelle a été implémentée sans serveur web distinct (comme FastAPI), uniquement avec l’API JS de pywebview ou via le chargement de HTML local, alors pour un déploiement web il faut réécrire toute la couche de communication depuis zéro. Il peut donc être difficile de convertir directement en version web un code écrit simplement avec pywebview.
Vous pouvez considérer que ce point est indépendant de violit. Plutôt que de transformer une application existante créée avec pywebview, violit est conçu dès le départ pour prendre en charge à la fois le web et pywebview (desktop).
Merci.
J’ai préparé une page web de démonstration ainsi qu’une documentation que vous pouvez essayer immédiatement ci-dessous.
Je pense que cela vaut le coup d’y jeter un œil. :)
À titre d’information, les deux sites web ont été créés avec Violit.
Merci. J’envisage d’essayer ça pour le travail dans mon entreprise !!
Merci. N’hésitez pas à me faire part des points qui vous semblent peu pratiques après l’avoir essayé.
Il semble qu’un renforcement des tests et de la documentation soit nécessaire.
J’ai préparé une page web de démonstration que vous pouvez utiliser immédiatement ci-dessous, ainsi que la documentation.
Je pense que cela vaut le coup d’y jeter un œil. :)
À titre d’information, les deux sites web ont tous deux été créés avec Violit.
Oui, merci pour ces bons retours. L’implémentation actuelle est au niveau d’une POC, et il y a encore beaucoup de breaking changes au niveau de l’interface publique et du design. Le plan actuel est donc d’ajouter des tests à partir de la version 0.5.
Comme vous l’avez indiqué, nous travaillons en priorité sur l’ouverture du site web et sur la documentation, donc cela devrait être mis en ligne bientôt. Notre première cible étant avant tout les utilisateurs existants de streamlit, la syntaxe étant presque identique, nous ressentions un peu moins le besoin de documenter.
Encore un peu de patience~
Ce serait bien d’avoir une page web de démonstration pour pouvoir l’essayer tout de suite.
Nous avons préparé ci-dessous une page web de démonstration ainsi que la documentation, que vous pouvez essayer immédiatement.
Je pense que cela vaut le coup d’y jeter un œil. :)
À titre d’information, les deux sites web ont été créés avec Violit.
Oui, merci pour cette bonne remarque. Comme il s’agit encore d’une version initiale, il n’y a pas encore de site web, mais lorsque nous en créerons un, vous pourrez probablement y essayer divers widgets sur le web. Surtout, pour l’instant, nous ajustons progressivement la conception afin de mettre en avant le fait qu’il permet de créer quelque chose de plus esthétique que les autres alternatives. :)