violit

Из публичных источников

Чистый веб-фреймворк на Python. Простота Streamlit без перезагрузок.

Машинный перевод · Показать оригинал

Pure Python Web Framework. Streamlit simplicity, no reruns.

ПриложениеКатегория: Веб-приложения · Управление проектамиOpen sourceданные проверены 16 окт. 2026 г.

Обзор

  • ai
  • data-application
  • data-science
  • data-visualization
  • deep-learning
  • developer-tools
  • fastapi
  • framework
  • frontend
  • fullstack
  • gui
  • machine-learning

Установка

Команды только показываются, маркетплейс их не выполняет. Сверяйтесь с официальной документацией.
  • Официальный сайтИз публичных источниковиз метаданных каталога
    violit.cloud/ ↗
  • Реестр пакетов языкаpythonИз публичных источниковиз манифеста пакета — публикация в реестре не проверена
    pipx install violit

    Не проверено: перед установкой убедитесь, что пакет в реестре принадлежит этому проекту.

    pypi.org/project/violit/ ↗
  • Сборка из исходниковИз публичных источниковиз метаданных каталога

    Сборка из исходников: проверенного рецепта сборки нет — следуйте инструкциям репозитория.

    github.com/violit-dev/violit ↗

Совместимость

«Неизвестно» значит, что доказательств не найдено, а не что продукт несовместим.
ПлатформаСтатусАрхитектураДоказательствоУверенность
Web browserНеизвестно———
Server / self-hostedНеизвестно———
Container (OCI)Неизвестно———
PythonСовместимо—манифест пакета: pyproject.toml name0.60

Релизы

проверено 30 окт. 2026 г.
В источнике релизы не найдены.

Профиль качества

алгоритм quality-v1.0 · оценено 16 окт. 2026 г.
Оценка качества70
Оценка риска0
Уверенность 1.00
Оценка качества и оценка риска — разные показатели. Высокое качество не гарантирует безопасность.

Составляющие оценки

Поддержка · 2012
last activity 128 days ago
Документация · 1515
README 14937 chars, description present
Готовность к использованию · 159
install instructions: yes; releases: no
Метаданные · 1010
4/4 of description, homepage, license, topics
Релизы · 102
0 release(s)
Точность категории · 105
classifier confidence 0.5
Популярность · 107
475 stars (log-dampened, 10k = max)
Ясность лицензии · 55
SPDX MIT
Сообщество · 55
issues enabled, 26 forks

Лицензия

MIT
Лицензия известнапо данным хостинга репозитория

Это статус политики каталога, а не юридическое заключение.

Источники

github.com/violit-dev/violitОсновной★ 475 звёздактивность 9 июн. 2026 г.Основной репозиторий · Уверенность 1.00

Отзывы

Войдите, чтобы написать отзыв

Отзывов пока нет.

Альтернативы

niceguiПохожий
Создание веб-интерфейсов на Python. Правильный путь.MIT · Веб-приложения
omni-toolsПохожий
Самостоятельно размещаемый набор мощных веб-инструментов для повседневных задач. Без рекламы и отслеживания — только быстрые и удобные утилиты прямо в браузере!MIT · Веб-приложения
paperless-ngxПохожий
Paperless-ngx — это система управления документами с открытым исходным кодом, которая сканирует, индексирует и архивирует бумажные документы в поисковый онлайн-архив.GPL-3.0 · Веб-приложения
photoprismПохожий
PhotoPrism — приложение для фотографий на основе ИИ с приватностью в приоритете: просмотр, теги, поиск и обмен фото и видео на своём сервере или в облаке.Веб-приложения
onlookПохожий
Onlook — визуальный редактор кода с открытым исходным кодом для создания и правки сайтов на Next.js и Tailwind CSS с помощью ИИ прямо в браузере.Apache-2.0 · Веб-приложения
doodleПохожий
Чисто-Kotlin UI-фреймворк для веба и десктопа.MIT · Веб-приложения

README

Из violit-dev/violit · лицензия MIT · загружено 30 окт. 2026 г.

[Violit Logo]

🎉 Featured on OpenSourceProjects.dev: "Stop Overcomplicating Your Data Dashboards"

"Faster than Light, Beautiful as Violet." Structure of Streamlit × Performance of React.

Violit is a Python web framework built on a fine-grained reactive architecture. It preserves the highly productive, top-down Python authoring style loved by the Streamlit community, but eliminates the performance bottlenecks of the full script rerun model.

It starts naturally from data apps and dashboards, but is not limited to them. With built-in ORM/Auth support and Tailwind-style design primitives, Violit also scales well to more general web applications such as admin tools, internal platforms, CRUD systems, and user-facing product UIs.

pip install violit

Demo

This demo illustrates the kind of interaction Violit was built for: Python-first UI code with reactive updates that remain snappy and smooth, even as the interface grows more complex.

Why Violit?

Violit is designed for developers who love the immediate productivity of Streamlit but need an architecture that scales gracefully as their applications evolve from tiny dashboards to feature-rich web apps.

  • Streamlit-like Python flow, but completely free from full script reruns.
  • Fine-grained state updates ensuring only the dependent widgets update (React-like reactivity).
  • Built-in ORM ready to use with vl.App(db=...).
  • Tailwind-like styling via the cls parameter.
  • Async friendly with built-in app.background(...) and app.interval(...).
  • Flexible Runtimes: Runs in the Browser, HTMX Lite mode for higher concurrency, and as Desktop Native apps.
  • Rich ecosystem: Out-of-the-box support for powerful widgets, themes, and animations.

Architectural Difference

The fundamental difference lies not just in syntax, but in how the framework handles the DOM after a user interacts (clicks, types, or drags).

TopicStreamlitViolit
Update ModelFull script rerunFine-grained reactive updates
Interaction CostThe entire script may re-executeOnly explicitly dependent UI components update
Optimization BurdenOften requires workarounds for rerun constraintsNaturally handled by the signal-based architecture
App Growth PathIdeal for quick, simple data viewsDesigned to scale into richer, stateful app flows
Runtime ModesBrowser-focusedWebSocket, Lite, Desktop Native
StylingBasic themingThemes + Tailwind-like utility styling

Framework Comparison (Feature Matrix)

Every Python UI framework has its own unique philosophy and strengths. This matrix compares the structural capabilities of popular frameworks to help you choose the right tool for your specific use case.

FrameworkNo Full RerunPure Python (Zero JS/HTML)SEO / SSR ReadyDesktop Native (exe/app)
Streamlit❌✅❌❌
Dash / Panel✅(Callbacks)✅❌❌
NiceGUI✅✅❌✅
Reflex✅⚠️(React paradigm)✅❌
RIO✅(React-like)✅❌✅(Local mode)
Violit✅(Signals)✅✅✅(Built-in pywebview)

What This Matrix Means

  • Streamlit remains the easiest starting point for data scientists, but its full-rerun model can become a bottleneck as interaction complexity grows.
  • Dash & Panel are robust data tools but often require adopting specific callback structures.
  • NiceGUI is highly practical and productive, adopting a more object-oriented UI binding style.
  • Reflex is incredibly powerful and compiles to a React frontend, but introduces a steeper learning curve for developers unfamiliar with React concepts.
  • RIO is a modern, reactive framework inspired by React and Flutter, offering great component structures, though it requires adopting an opinionated class-based architecture.
  • Violit aims for the sweet spot: providing the familiar, script-like readability of Streamlit, while internally leveraging a modern, fine-grained reactive engine and offering built-in full-stack features (ORM, Auth, Desktop compilation).

Syntax Comparison

The snippets below are intentionally minimal. The goal is to highlight how much structural boilerplate each framework requires to express the exact same tiny interaction.

Streamlit

import streamlit as st

name = st.text_input("Name", "Violit")
st.write(f"Hello, {name}")
  • The Vibe: Extremely direct and beginner-friendly.
  • The Trade-off: As the app grows, you find yourself constantly architecting around the full-rerun behavior.

NiceGUI

from nicegui import ui

name = ui.input("Name", value="Violit")
ui.label().bind_text_from(name, "value", lambda v: f"Hello, {v}")

ui.run()
  • The Vibe: Explicit UI object binding. Excellent for component-driven design.
  • The Trade-off: Shifts away from the declarative, top-down reading flow that data professionals prefer.

Reflex

import reflex as rx

class State(rx.State):
    name: str = "Violit"

def app():
    return rx.vstack(
        rx.input(value=State.name, on_change=State.set_name),
        rx.text(State.name),
    )
  • The Vibe: A robust, React-flavored state model.
  • The Trade-off: Requires defining separate state classes, which can feel heavy for small to medium interactive apps.

RIO

import rio

class Page(rio.Component):
    name: str = "Violit"

    def build(self) -> rio.Component:
        return rio.Column(
            rio.TextInput("Name", text=self.bind().name),
            rio.Text(f"Hello, {self.name}"),
        )
  • The Vibe: Component-based and reactive, heavily inspired by React and Flutter.
  • The Trade-off: The class-based component structure is powerful but can feel opinionated and heavier compared to a simple procedural script.

Violit Syntax

import violit as vl

app = vl.App()

name = app.text_input("Name", value="Violit")
app.text(lambda: f"Hello, {name.value}")

app.run()
  • The Vibe: The top-down simplicity of Streamlit, powered by the reactive performance of modern JS frameworks.
  • The Advantage: The syntax remains lightweight, but the runtime updates only the necessary DOM nodes seamlessly.

External State Binding

When a widget owns its own state, bind the return value directly:

name = app.text_input("Name", value="Violit")

When you want a widget to edit an existing external app.state(...), use bind=:

api_key = app.state("")
app.text_input("API key", bind=api_key, type="password")

If both bind= and value= are provided, bind= wins and value= is ignored.

bind= only accepts a writable State.

Use key= for widget identity, not for external state sharing. Explicit widget keys must be unique within the same render scope.

Quick Start

Experience the core Violit philosophy: declare state, bind widgets, and let the runtime update only what's necessary.

import violit as vl

app = vl.App(title="Hello Violit", theme="violit_light_jewel")

count = app.state(0)
name = app.text_input("Project name", value="Violit")

app.title("Build apps in pure Python")
app.text(lambda: f"Hello, {name.value}")
app.metric("Clicks", count)
app.button("+1", on_click=lambda: count.set(count.value + 1))

app.run()

Browser tabs can use favicon=..., while native desktop windows continue to use icon=...:

app = vl.App(
    title="Hello Violit",
    icon="./my_app.ico",
    favicon="./my_app.ico",
)

app.set_favicon("https://example.com/favicon.ico")

Very Easy ORM Example

Violit bridges the gap between a quick prototype and a production-ready application by offering built-in persistence.

import violit as vl
from sqlmodel import SQLModel, Field
from typing import Optional

class Todo(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    title: str

app = vl.App(db="./todo.db")

app.db.add(Todo(title="Ship first Violit app"))
items = app.db.all(Todo)

app.title("Todo List")
app.text(lambda: f"Total items: {len(items)}")

app.run()

Background Work

This is where Violit truly separates itself from simple dashboard tools. You can model long-running tasks directly in your Python code without freezing the user interface.

import time
import violit as vl

app = vl.App()
progress = app.state(0)

def work():
    for step in range(1, 6):
        time.sleep(0.3)
        progress.set(step * 20)

task = app.background(work)

app.button("Run task", on_click=task.start)
app.progress(progress)

app.run()

Tip: If you need periodic polling or refreshing, app.interval(...) is also natively supported.

Styling

Violit keeps UI customization practical and fast. You can use utility classes without dropping out of Python for every minor CSS adjustment.

app.button(
    "Deploy",
    cls="rounded-full bg-sky-500 px-6 py-3 text-white shadow-lg hover:bg-sky-600",
)

Tech Stack

Under the hood, Violit utilizes a pragmatic, modern stack focused on performance and interactivity.

  • Backend: FastAPI, Uvicorn
  • Reactivity: WebSocket runtime, HTMX-based Lite mode
  • Data & DB: SQLModel + Alembic, pandas, numpy
  • Visualization: Vega-Lite, Plotly integration
  • Desktop: pywebview for native executables
  • Assets: Local bundled assets for offline-friendly deployments
  • Icons: use_cdn=False keeps Font Awesome icons local-only by default; set use_cdn_fontawesome_only=True to allow remote fallback only for icons missing from the bundled local pack.

Roadmap

Violit is evolving rapidly. The core reactive foundation is solid, and several full-stack features are already implemented. Our next steps focus on ecosystem expansion and customization.

  • ✅ Core: Signal State Engine, Theme System
  • ✅ Widgets: Plotly, Dataframe, Input Widgets
  • ✅ ORM: Built-in ORM support with SQLModel and migrations
  • ✅ Auth: Built-in authentication flow and page protection
  • ✅ Styling: Tailwind-like utility styling support
  • ✅ Homepage: Official Website launched
  • ✅ Documentation: Technical Documentation and API Reference
  • ⏳ Custom Components: User-defined Custom Component APIs
  • ⏳ Custom Theme: Advanced theming support
  • ⏳ Examples: More real-world, production-grade templates
  • ⏳ Violit.Cloud: One-click cloud deployment service
  • ⏳ Expansion: Deeper integration with third-party libraries

Installation

Getting started is as simple as installing the package. The Violit CLI is automatically included.

pip install violit
# Or to get the latest bleeding-edge version:
pip install git+https://github.com/violit-dev/violit.git

Running Your App

Violit ships with a powerful CLI. The recommended way to run your apps is via violit run.

violit run forwards the same runtime flags that app.run() accepts. If a command works with python app.py ..., the same flags work with violit run app.py ....

--lite runs the app in HTMX-based HTTP mode instead of the default WebSocket runtime. This is often the better choice when you want to handle more concurrent users or deploy in environments where WebSockets are limited.

--ws explicitly selects the WebSocket runtime. If you do not pass either --lite or --ws, Violit already defaults to WebSocket mode.

If the app itself was created with an explicit runtime such as vl.App(mode="lite") or vl.App(mode="ws"), that code-level setting takes priority over CLI runtime flags.

python app.py --reload --localhost
violit run app.py --reload --localhost

violit run app.py --help       # Show runtime flags accepted by app.run()
violit run app.py --ws         # Explicitly run in the default WebSocket mode
violit run app.py --reload     # Auto-reload on code changes
violit run app.py --localhost  # Bind to 127.0.0.1 and print localhost URL
violit run app.py --native     # Launch as a Desktop App
violit run app.py --lite       # Run in HTMX-based lite mode for higher concurrency
violit run app.py --port 8020
violit run app.py --make-migration "add_users"

You can also scaffold a new project instantly:

violit create my_app
cd my_app
violit run main.py --reload

Documentation & Resources

Ready to dive deeper? Check out our official guides depending on your needs:

📝 License

Violit is released under the MIT License.

Trademark Note: The open-source license applies to the code, while "Violit™" remains a trademark of The Violit Team to ensure clear project identity.

Открыть репозиторий ↗