2 points par dopeflamingo 2026-01-31 | 16 commentaires | Partager sur WhatsApp

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

  1. 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.
  1. 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.)
  1. 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.
  1. 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 :)

16 commentaires

 
realg 2026-02-04

Je vous soutiens vivement.

 
dopeflamingo 2026-02-05

Merci beaucoup pour votre soutien. :) Je vais continuer à faire des mises à jour avec enthousiasme et plaisir. C’est très réjouissant.

 
rainystar 2026-02-02

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 ?

 
rainystar 2026-02-02

Est-il possible de migrer facilement vers un site web, à l’aide de violit, quelque chose qui a été développé avec pywebview ?

 
rainystar 2026-02-02

Comme la question ne semblait pas assez précise, je me permets de la reformuler.

J’utilise actuellement pywebview pour 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.

  1. Est-il réaliste et relativement simple de migrer une application existante basée sur pywebview vers l’architecture de Violit ?
  2. La documentation indique qu’il est possible de passer de web à desktop sans modification,
    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.)
 
dopeflamingo 2026-02-05

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).

 
rainystar 2026-02-06

Merci.

 
dopeflamingo 2026-02-08

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.

 
rainystar 2026-02-08

Merci. J’envisage d’essayer ça pour le travail dans mon entreprise !!

 
dopeflamingo 2026-02-09

Merci. N’hésitez pas à me faire part des points qui vous semblent peu pratiques après l’avoir essayé.

 
darjeeling 2026-01-31

Il semble qu’un renforcement des tests et de la documentation soit nécessaire.

 
dopeflamingo 2026-02-08

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.

 
dopeflamingo 2026-02-02

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~

 
jayhanx 2026-01-31

Ce serait bien d’avoir une page web de démonstration pour pouvoir l’essayer tout de suite.

 
dopeflamingo 2026-02-08

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.

 
dopeflamingo 2026-01-31

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. :)