2 điểm bởi dopeflamingo 2026-01-31 | 16 bình luận | Chia sẻ qua WhatsApp

Xin chào.
Tôi là một lập trình viên đang làm việc trong ngành và gần đây phát triển mã nguồn mở như một sở thích vào buổi tối sau giờ làm và cuối tuần.

Cá nhân tôi rất thích cú pháp trực quan của Streamlit, và tôi cũng biết khá nhiều bạn bè xung quanh làm nghiên cứu AI/Data đang sử dụng nó. Nhưng tôi thường thấy mọi người gặp khó khăn vì vấn đề hiệu năng khi dự án ngày càng lớn. Tôi từng giới thiệu NiceGUI như một phương án thay thế, nhưng nhiều người lại thấy khó thích nghi với cú pháp của nó. (Hình như NiceGUI ban đầu được một công ty ở Đức tạo ra để dùng nội bộ... và tôi nghĩ đây thực sự là một framework được làm rất tốt.)

Ngoài ra, tôi cũng cho rằng khi hiển thị Data thì tính “thẩm mỹ” rất quan trọng. Tuy nhiên, tôi nhận ra rằng với các framework GUI dựa trên Python hiện có, việc trang trí giao diện đẹp mắt lại khó hơn tưởng tượng. Đặc biệt, một nhược điểm lớn của NiceGUI là không dễ thoát khỏi Material Design của Quasar.

Vì vậy, tôi đã tự tạo ra Violit với mục tiêu là một công cụ “dễ như Streamlit, nhưng nhanh hơn về hiệu năng và cũng thuận tiện hơn trong việc styling”. Nền tảng kiến trúc của nó được xây dựng trên FastAPI và shoelace(Lit). Các đặc điểm chính như sau.

💜 Các đặc điểm chính của Violit

  1. Mức độ trực quan tương tự Streamlit tới 90%
  • Nếu đã có kinh nghiệm dùng Streamlit, bạn có thể sử dụng ngay gần như không cần đường cong học tập nhờ API được thiết kế trực quan.
  1. O(1) Reactivity & Clean Syntax
  • Không giống Streamlit, chỉ vì bấm một nút mà toàn bộ script không bị chạy lại (No Re-run).
  • Ngay cả khi không có decorator tối ưu hóa như @st.cache, bạn vẫn có thể quản lý trạng thái nhanh gọn chỉ bằng cách khai báo biến (state) đơn giản. (Tôi có tham khảo khái niệm signal của solid.js.)
  1. Easy Theming System
  • Hiện tại hỗ trợ khoảng 30 preset theme để có thể áp dụng ngay một UI đẹp mắt.
  • Trong thời gian tới, tôi cũng dự định cập nhật tính năng cho phép người dùng tự customization theme.
  1. Hybrid Engine & Multi-Platform
  • Tùy theo lựa chọn của người dùng, framework có engine linh hoạt hỗ trợ cả chế độ Lite dùng HTMX lẫn chế độ WebSocket. Ban đầu thì ổn, nhưng về sau khi lượng người dùng tăng lên, tôi đã nghĩ liệu WebSocket có thể khiến hệ thống chậm đi hay không.
  • Có thể chuyển đổi tự do giữa dịch vụ Web và chế độ ứng dụng Desktop (pywebview) mà không cần sửa code.

Tôi chưa biết dự án này sẽ mở rộng tới đâu, nhưng nếu được trau chuốt tốt, tôi có chút kỳ vọng rằng có thể xây dựng các dịch vụ mức MVP vốn thường làm bằng Django hay RoR nhanh hơn nhiều chỉ với Python. Để cho thấy khả năng thực tế, tôi cũng đã kèm theo mã ví dụ xây dựng Blog bằng Violit.

Dù vẫn còn ở giai đoạn rất sơ khai là v0.0.4 (PoC), dự án đã nhận được phản hồi khá tích cực trên Reddit và những nơi khác, và chỉ sau 2 tuần công khai đã vượt 200 sao nên tôi mạnh dạn chia sẻ cả ở đây. Trước giờ tôi hầu như luôn chỉ phát triển phần mềm cho công việc công ty... và đây là lần đầu tiên tôi làm một dự án mã nguồn mở hoàn toàn công khai như vậy. Với cá nhân tôi, đây là trải nghiệm mang lại rất nhiều niềm vui thuần túy của việc phát triển phần mềm.

Nếu khi nào bạn cần làm Web UI bằng Python, rất mong bạn ghé xem thử.. :)

16 bình luận

 
realg 2026-02-04

Hoàn toàn ủng hộ

 
dopeflamingo 2026-02-05

Cảm ơn mọi người rất nhiều vì sự ủng hộ. :) Tôi sẽ cố gắng cập nhật thật chăm chỉ và vui vẻ. Niềm vui này rất lớn.

 
rainystar 2026-02-02

Gần đây tôi đã thử tự động hóa công việc bằng pywebview. Vì là ứng dụng desktop nên tôi đang băn khoăn không biết nên xử lý phần web thế nào... nếu dùng cái này trong pywebview thì có thể dễ dàng sử dụng cả trên web không?

 
rainystar 2026-02-02

Liệu có thể dễ dàng di chuyển một ứng dụng được phát triển bằng PyWebView sang website bằng cách sử dụng violit không?

 
rainystar 2026-02-02

Có vẻ câu hỏi trước của tôi chưa đủ cụ thể nên xin hỏi lại.

Hiện tại tôi đang làm và sử dụng một ứng dụng desktop bằng pywebview.
Tôi thấy Violit hỗ trợ đa nền tảng web/desktop (pywebview) nên khá tò mò.

  1. Việc migrate một ứng dụng hiện có dựa trên pywebview sang cấu trúc của Violit, trên thực tế có phải là tương đối dễ không?
  2. Trong tài liệu có nói rằng có thể chuyển đổi giữa web/desktop mà không cần sửa mã,
    nhưng tôi muốn hỏi liệu ở quy mô dịch vụ thực tế, kiến trúc đó có thật sự được thiết kế để vẫn giữ cùng một codebase và mở rộng thành dịch vụ web hay không. (Xét từ góc độ cấu trúc triển khai pywebview → web)
 
dopeflamingo 2026-02-05

Xin chào. Mức độ khó khi migration phụ thuộc rất nhiều vào cấu trúc của App hiện có mà bạn đã xây dựng.

Nếu ứng dụng hiện tại được triển khai chỉ bằng js api của pywebview hoặc cách tải HTML cục bộ, không có web server riêng như FastAPI, thì để triển khai lên web bạn sẽ phải viết lại tầng giao tiếp từ đầu. Vì vậy, có thể sẽ khó chuyển ngay đoạn mã bạn đã viết bằng pywebview sang web một cách dễ dàng.

Phần này có thể xem là không liên quan đến violit. Thay vì violit chuyển đổi App hiện có được tạo bằng pywebview, có thể hiểu là nếu xây bằng violit thì ngay từ đầu nó được thiết kế để hỗ trợ đồng thời web và pywebview (desktop).

 
rainystar 2026-02-06

Cảm ơn bạn.

 
dopeflamingo 2026-02-08

Bên dưới, tôi đã chuẩn bị sẵn trang web demo và tài liệu để bạn có thể dùng thử ngay.
Bạn hãy xem thử nhé. :)

Xin lưu ý, cả hai website đều được tạo bằng Violit.

 
rainystar 2026-02-08

Cảm ơn bạn. Tôi đang cân nhắc thử dùng cái này cho công việc ở công ty.!!

 
dopeflamingo 2026-02-09

Vâng, cảm ơn bạn. Hãy dùng thử, và nếu có chỗ nào bất tiện thì hãy cho tôi biết nhé.

 
darjeeling 2026-01-31

Có vẻ như cần bổ sung thêm phần mã kiểm thử và tài liệu hóa.

 
dopeflamingo 2026-02-08

Bên dưới, tôi đã chuẩn bị sẵn trang web demo và tài liệu để bạn có thể dùng thử ngay.
Bạn nên xem thử một lần. :)

Xin lưu ý, cả hai website đều được xây dựng bằng Violit.

 
dopeflamingo 2026-02-02

Vâng, cảm ơn bạn vì phản hồi rất hữu ích. Hiện tại phần triển khai vẫn đang ở mức POC, nên ở cấp độ public interface và design vẫn có khá nhiều thay đổi không tương thích, vì vậy kế hoạch hiện tại là sẽ bổ sung mã kiểm thử từ phiên bản 0.5.

Đúng như bạn nói, trước mắt chúng tôi đang tiến hành mở trang chủ và làm tài liệu, nên có lẽ sẽ sớm ra mắt. Dù sao thì đối tượng mục tiêu đầu tiên cũng là những người dùng streamlit hiện có, và vì cú pháp gần như giống hệt nên trước đây chúng tôi có phần cảm thấy nhu cầu tài liệu hóa không quá lớn.

Mong bạn chờ thêm một chút nhé~

 
jayhanx 2026-01-31

Sẽ rất tuyệt nếu có một trang web demo để có thể dùng thử ngay.

 
dopeflamingo 2026-02-08

Tôi đã chuẩn bị sẵn trang web demo để bạn có thể dùng thử ngay bên dưới, cùng với tài liệu Documentation.
Bạn nên xem thử một lần. :)

Xin lưu ý là cả hai website đều được xây dựng bằng Violit.

 
dopeflamingo 2026-01-31

Vâng, cảm ơn bạn vì ý kiến rất hay. Vì vẫn còn là phiên bản ban đầu nên hiện chưa có trang chủ, nhưng nếu sau này làm trang chủ thì có lẽ bạn sẽ có thể thử dùng nhiều widget khác nhau trên web. Trên hết, hiện tại chúng tôi đang dần điều chỉnh thiết kế để nhấn mạnh rằng có thể tạo ra giao diện đẹp hơn so với các lựa chọn thay thế khác. :)