Show GN: Streamlit의 직관성에 성능을 더하고 싶어서 시작한, Pure Python Web UI Framework 'Violit'
(github.com/violit-dev)안녕하세요.
요즘 퇴근 후, 주말에 취미로 오픈소스를 개발하고 있는 현업 개발자입니다.
저는 개인적으로 Streamlit의 직관적인 문법을 참 좋아하고, 주변 주변 AI/Data 연구원 친구들도 많이 사용하고 있다는 것을 알고 있습니다. 그런데 사람들이 프로젝트가 커질수록 성능 문제로 고생하는 걸 자주 봤습니다. 대안으로 NiceGUI를 제가 추천해줬는데, 문법 적응을 사람들이 좀 어려워 하였습니다. (NiceGUI가 처음에는 독일 모 회사에서 자신들의 회사에서 쓰기 위해 만든 거 같은데..정말 잘 만들어진 Framework이라고 생각합니다.)
또한 저는 Data를 보여줄 때 '심미성'도 참 중요하다고 생각합니다. 그러나 기존 Python기반 GUI Framework으로는 예쁘게 꾸미기가 은근히 어렵다는 것을 알게 되었습니다. 특히 NiceGUI의 큰 단점이 Quasar의 Material Design을 벗어나기 쉽지 않다는 것 입니다.
그래서 "Streamlit처럼 쉬운데 성능은 빠르고 스타일링도 간편한 툴"을 목표로 Violit을 직접 만들게 되었습니다. 아키텍쳐의 근간에는 FastAPI, shoelace(Lit)가 받치고 있습니다. 주요 특징은 아래와 같습니다.
💜 Violit의 주요 특징
- Streamlit과 90% 유사한 직관성
- 기존 Streamlit 사용 경험이 있다면 거의 러닝 커브 없이 바로 사용할 수 있도록 API를 직관적으로 설계했습니다.
- O(1) Reactivity & Clean Syntax
- Streamlit처럼 버튼 하나 누른다고 스크립트 전체가 다시 돌지 않습니다(No Re-run).
- @st.cache 같은 최적화 데코레이터 없이도, 단순한 변수(state) 선언만으로 빠르고 간결하게 상태 관리가 가능합니다. (solid.js의 signal개념을 참고하였습니다.)
- Easy Theming System
- 현재 약 30가지의 프리셋 테마를 지원하여 즉시 예쁜 UI를 적용할 수 있습니다.
- 조만간 사용자가 직접 테마를 Customization할 수 있는 기능도 업데이트할 예정입니다.
- Hybrid Engine & Multi-Platform
- 사용자 선택에 따라 HTMX를 사용한 Lite 모드와 WebSocket 모드를 모두 지원하는 유연한 엔진을 탑재했습니다. 처음엔 괜찮지만..향후 사용자가 몰리게 되었을 때 WebSocket으로 인해 느려질 수 있지 않을까 싶었습니다.
- 코드 수정 없이 Web 서비스와 Desktop 앱(pywebview) 모드를 자유롭게 오갈 수 있습니다.
이 프로젝트가 어디까지 확장될지는 모르겠지만, 잘 다듬는다면 Django나 RoR로 만들던 MVP 레벨의 서비스를 파이썬만으로 훨씬 빠르게 구축할 수 있을 거라 살짝 기대하고 있습니다. 실제 가능성을 보여드리기 위해 Violit으로 만든 Blog 구축 예제 코드도 포함해 두었습니다.
아직 완전 초기 v0.0.4 (PoC) 단계지만, Reddit 등에서 꽤 긍정적인 반응을 얻었고, 공개 2주 만에 스타 200개를 넘겨서 용기 내어 여기에도 공유해봅니다. 거의 항상 회사 업무로만 SW개발을 해왔고..이렇게 완전 공개된 오픈소스 프로젝트는 처음인데요. 저 개인적으로는 순수한 SW개발의 재미를 정말 많이 느끼고 있습니다.
Python으로 Web UI 등을 만드실 일 있을 때 한번 구경해주시면 감사하겠습니다.. :)
- GitHub Repo. : https://github.com/violit-dev/violit
- 한국어 README : https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Blog 예제 : https://github.com/violit-dev/violit/…
최근 파이웹뷰를 이용해서 업무 자동화를 해보았는데요. 데스크탑이라서 웹을 어떻게 할까 고민중이었는데....파이웹뷰에서 이걸 이용하면 쉽게 웹에서도 사용할 수 있을까요?
질문이 구체적이지 않은것 같아서 다시 여쭤봅니다.
현재 pywebview로 데스크탑 앱을 만들어 쓰고 있는데요.
Violit이 web/desktop(pywebview) 멀티 플랫폼을 지원한다고 해서 궁금합니다.
- 기존 pywebview 기반 앱을 Violit 구조로 마이그레이션하는 게 현실적으로 쉬운 편인가요?
- 문서에 web/desktop 무수정 전환이 가능하다고 되어 있는데,
실제 서비스 규모에서도 구조적으로 같은 코드베이스를 유지한 채 웹 서비스 확장이 가능한 설계인지 궁금합니다. (pywebview → web 배포 구조 관점에서요)
안녕하세요. 마이그레이션 난이도는 만드신 기존 App의 구조 에 따라 크게 갈립니다.
만약 기존 앱이 별도의 웹 서버(FastAPI 등) 없이, pywebview의 js api나 로컬 HTML 로딩 방식으로만 구현되었다면, 웹 배포를 위해서는 통신 계층을 처음부터 다시 짜야 합니다. 따라서 쉽게 pywebview로 짜신 코드를 web으로 바로 바꾸긴 힘드실 수 있습니다.
이 부분은 violit과는 상관이 없다고 보시면 됩니다. violit이 pywebview로 만든 기존 App을 바꾼다기보다, violit으로 만들면 애초에 web과 pywebview(desktop)을 동시에 지원 하도록 설계되어 있다고 보시면 됩니다.
하기에 바로 써보실 수 있는 데모 웹페이지 및 Documentation을 준비 해 두었습니다.
한번 확인 해 보시면 좋을 것 같습니다. :)
참고로 두개의 Website 모두 Violit으로 만들어졌습니다.
- Landing Page : https://violit.cloud
- Documentation : https://doc.violit.cloud
하기에 바로 써보실 수 있는 데모 웹페이지 및 Documentation을 준비 해 두었습니다.
한번 확인 해 보시면 좋을 것 같습니다. :)
참고로 두개의 Website 모두 Violit으로 만들어졌습니다.
- Landing Page : https://violit.cloud
- Documentation : https://doc.violit.cloud
네 좋은 피드백 감사합니다. 현재 구현은 POC레벨로, public interface 및 design레벨 에서 breaking changes가 많은 상황이라, 0.5때부터 테스트 코드 넣는게 현재 계획입니다.
말씀하신대로 우선적으로 홈페이지 오픈 및 documentation작업을 진행하고 있어 곧 오픈이 될 것 같습니다. 아무래도 첫번째 타겟이 기존 streamlit 사용자여서, 문법이 거의 동일하여 문서화 할 필요성을 좀 적게 느끼긴 했었습니다.
조금만 기다려주세요~
하기에 바로 써보실 수 있는 데모 웹페이지 및 Documentation을 준비 해 두었습니다.
한번 확인 해 보시면 좋을 것 같습니다. :)
참고로 두개의 Website 모두 Violit으로 만들어졌습니다.
- Landing Page : https://violit.cloud
- Documentation : https://doc.violit.cloud
넵 좋은 의견 감사합니다. 아직 초기버전이라서 홈페이지가 없지만, 홈페이지를 만들게되면 아마 web에서 다양한 widgets을 사용해 보실 수 있을 것 같습니다. 무엇보다도 지금은 다른 대체제들 보다 예쁘게 만들 수 있는 것을 강조하기 위해서 설계를 조금씩 변경하고 있습니다. :)