'Violit': um framework Web UI em Python puro que surgiu da vontade de combinar a intuitividade do Streamlit com mais desempenho
(github.com/violit-dev)Olá.
Sou um desenvolvedor em atividade que, ultimamente, vem criando open source como hobby depois do expediente e nos fins de semana.
Pessoalmente, gosto muito da sintaxe intuitiva do Streamlit, e sei que muitos amigos ao meu redor que trabalham com pesquisa em AI/Data também o utilizam bastante. Mas também vi com frequência as pessoas sofrerem com problemas de desempenho à medida que os projetos crescem. Como alternativa, eu costumava recomendar o NiceGUI, mas as pessoas tinham certa dificuldade para se adaptar à sintaxe. (Acho que o NiceGUI foi criado inicialmente por uma empresa alemã para uso interno... e considero que é um framework realmente muito bem feito.)
Além disso, acredito que a “estética” também é muito importante na hora de mostrar dados. Porém, percebi que, com os frameworks de GUI baseados em Python que já existiam, não era tão simples assim criar algo visualmente bonito. Em especial, uma grande desvantagem do NiceGUI é que não é fácil sair do Material Design do Quasar.
Por isso, acabei criando eu mesmo o Violit, com o objetivo de ser uma “ferramenta tão fácil quanto o Streamlit, mas com desempenho rápido e estilização simples”. A base da arquitetura é sustentada por FastAPI e shoelace(Lit). As principais características são as seguintes.
💜 Principais características do Violit
- Intuitividade 90% semelhante ao Streamlit
- Se você já tem experiência com Streamlit, a API foi desenhada de forma intuitiva para que seja possível começar a usar praticamente sem curva de aprendizado.
- O(1) Reactivity & Clean Syntax
- Diferente do Streamlit, apertar um botão não faz o script inteiro rodar de novo (No Re-run).
- Mesmo sem decoradores de otimização como
@st.cache, é possível gerenciar estado de forma rápida e concisa apenas com declarações simples de variáveis (state). (O conceito de signal do solid.js foi usado como referência.)
- Easy Theming System
- Atualmente, há suporte a cerca de 30 temas predefinidos, permitindo aplicar uma UI bonita imediatamente.
- Em breve, também pretendo lançar uma atualização com a funcionalidade de o próprio usuário personalizar os temas.
- Hybrid Engine & Multi-Platform
- O framework conta com um engine flexível que suporta tanto o modo Lite com HTMX quanto o modo WebSocket, conforme a escolha do usuário. No começo tudo parece bem, mas pensei que, no futuro, quando o número de usuários crescer, talvez o WebSocket possa acabar deixando tudo mais lento.
- Sem alterar o código, é possível alternar livremente entre o modo de serviço Web e o modo de app Desktop (
pywebview).
Não sei até onde esse projeto vai conseguir se expandir, mas tenho uma pequena expectativa de que, se ele for bem lapidado, será possível construir serviços em nível de MVP — que antes seriam feitos com Django ou RoR — muito mais rapidamente usando apenas Python. Para mostrar essa possibilidade na prática, também incluí um exemplo de código de construção de blog feito com Violit.
Ainda está em um estágio totalmente inicial, v0.0.4 (PoC), mas recebeu uma reação bastante positiva no Reddit e, em apenas 2 semanas desde a publicação, já passou de 200 estrelas, então tomei coragem para compartilhar aqui também. Quase sempre fiz desenvolvimento de software apenas como parte do meu trabalho na empresa... e este é o meu primeiro projeto open source totalmente público. Pessoalmente, estou sentindo muita diversão no desenvolvimento puro de software.
Se algum dia você for criar algo como Web UI em Python, ficarei grato se puder dar uma olhada :)
- GitHub Repo. : https://github.com/violit-dev/violit
- README em coreano: https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Exemplo de blog: https://github.com/violit-dev/violit/…
16 comentários
Apoio totalmente.
Muito obrigado pelo apoio. :) Vou continuar atualizando com dedicação e alegria. Isso tem sido muito gratificante.
Recentemente tentei fazer automação de trabalho usando PyWebView. Como é para desktop, eu estava pensando em como lidar com a web... Se eu usar isso no PyWebView, será que dá para usar facilmente também na web?
Será que algo desenvolvido com pywebview pode ser facilmente migrado para um site usando o violit?
Como a pergunta talvez não tenha sido específica o bastante, vou refazê-la.
Atualmente estou criando e usando um aplicativo desktop com
pywebview.Fiquei curioso porque o Violit diz oferecer suporte multiplataforma para web/desktop (
pywebview).pywebviewpara a estrutura do Violit?mas queria saber se, em escala de serviço real, a arquitetura realmente permite expandir para um serviço web mantendo estruturalmente a mesma base de código. (Do ponto de vista da estrutura de implantação
pywebview→ web)Olá. A dificuldade da migração varia bastante dependendo da estrutura do app existente que você criou.
Se o app existente foi implementado apenas com a API JS do pywebview ou com carregamento de HTML local, sem um servidor web separado, como FastAPI, então para fazer o deploy na web será preciso reescrever a camada de comunicação do zero. Portanto, talvez não seja fácil converter diretamente para a web o código que você escreveu de forma simples com pywebview.
Você pode considerar que essa parte não tem relação com o violit. Em vez de o violit converter um app existente feito com pywebview, a ideia é que, ao criar com violit, ele já seja projetado desde o início para oferecer suporte simultâneo a web e pywebview (desktop).
Obrigado.
Preparei uma página web de demonstração e a documentação para que você possa experimentar imediatamente.
Acho que vale a pena dar uma olhada. :)
Como referência, os dois sites foram feitos com Violit.
Obrigado. Estou pensando em tentar usar isso no trabalho da empresa!!
Perfeito, obrigado. Use à vontade e, se encontrar algum ponto incômodo, por favor me avise.
Parece que seria preciso reforçar um pouco os testes e a documentação.
Já deixamos preparada uma página de demonstração para você testar agora mesmo, além da documentação.
Acho que vale a pena dar uma olhada. :)
Só para constar, os dois sites foram feitos com o Violit.
Sim, obrigado pelo ótimo feedback. A implementação atual está no nível de POC, e há muitas breaking changes na interface pública e no nível de design, então o plano atual é adicionar testes a partir da versão 0.5.
Como você mencionou, estamos priorizando a abertura do site oficial e o trabalho de documentação, então parece que isso será lançado em breve. Como o primeiro público-alvo são os usuários atuais do Streamlit, e a sintaxe é quase idêntica, acabamos sentindo um pouco menos de necessidade de documentar.
Por favor, aguarde só mais um pouco~
Seria ótimo se houvesse uma página de demonstração na web para poder testar na hora.
Deixamos preparados abaixo uma página web de demonstração que você pode usar imediatamente, além da documentação.
Acho que vale a pena dar uma olhada. :)
Só para constar, os dois sites foram feitos com o Violit.
Sim, obrigado pela ótima sugestão. Como ainda está em uma versão inicial, ainda não temos um site, mas quando criarmos um, provavelmente você poderá experimentar vários widgets na web. Acima de tudo, no momento estamos ajustando o design aos poucos para destacar que ele pode ser feito de forma mais bonita do que outras alternativas. :)