Data Apps & Internal Tools
Streamlit, Dash, Marimo, Solara, Reflex — Python-first interactive apps for data teams.
Quick interactive apps backed by Python data code, without writing JavaScript. For full-fledged dashboards and BI, see BI & Dashboards. For interactive analysis, see Notebooks. For deeper component-level dashboards, see Charts.
Python-first script-style
- ★ Streamlit —
streamlit run app.pyand you have a web app; widgets re-run the whole script on interaction. Apache 2.0; Snowflake-owned. The default low-friction Python app framework. Streamlit Community Cloud is free for small public apps. - ★ Marimo — reactive notebook stored as
.py; deployable directly as an app. Apache 2.0. Often replaces Streamlit + Jupyter as the single "notebook + app" tool; see Notebooks. - Solara — React-flavored Python; declarative components, real reactivity; Apache 2.0; smaller community.
- Mesop (Google) — Python web UI library used internally at Google; Apache 2.0; gaining traction in 2025.
Plotly Dash family
- ★ Plotly Dash — Flask + React under the hood; component-based; mature; MIT. The default for production-shaped Python data apps.
- Dash Mantine Components, dash-bootstrap-components — UI toolkits.
- Vizro (McKinsey OSS) — declarative YAML/Python config on top of Dash; ships polished defaults; Apache 2.0.
Python over JS frameworks
- ★ Reflex (formerly Pynecone) — Python that compiles to a React + FastAPI app; Apache 2.0. The pick when you want full UI flexibility but no JS.
- NiceGUI — fast desktop-y Python UI; MIT; built on Vue + Quasar; great for internal tools.
- Anvil — open-source server runtime + paid editor; Python-only full-stack apps.
Holoviz / scientific
- ★ Panel (HoloViz) — declarative dashboards over many backends (Bokeh / Plotly / Matplotlib / Plotly / Vega); BSD-3. Strong for scientific use cases.
- Holoviews — high-level viz on top of Bokeh / Matplotlib / Plotly.
- Voila — turn a Jupyter notebook into a read-only dashboard; see Notebooks.
R / Julia equivalents
- Shiny — R's classic; works in Python now (
shinyapps.ioPython beta; Shiny for Python is GA on Posit Connect Cloud). - Genie.jl — Julia full-stack web framework with reactive UIs.
- Quarto interactive — Quarto + Shiny / Observable / WebR for static-with-interactivity reports; see Notebooks.
ML demo / inference UIs
- ★ Gradio — drag-and-drop UIs for ML models; one-liner demos; Apache 2.0; HuggingFace-hosted free Spaces. The default for "show off this model."
- Streamlit + LangChain / LlamaIndex — common pattern for chat apps; see AI/LLM.
- Chainlit — chat UIs for LLM apps; Apache 2.0.
Adjacent: internal-tool builders
- ★ Retool — paid; the dominant internal-tool builder; SQL + JS; small free tier.
- Appsmith — open-source Retool alternative; Apache 2.0.
- Tooljet — open-source; AGPLv3.
- Superblocks, UI Bakery — paid alternatives.
- Budibase — open core; GPL-3 + paid.
- Internal.io, Lowdefy — adjacent.
- Windmill — see Data Orchestration; ships internal-tool UIs alongside its job runner.
Pick this if…
- Default Python app, simplest possible: Streamlit.
- You want notebook + app in one tool: Marimo.
- Production-grade Python dashboards: Plotly Dash (or Vizro for declarative).
- You want React-shaped UIs without JS: Reflex.
- Show off an ML model: Gradio + HuggingFace Spaces.
- Build internal admin tools, not analytics: Retool (paid) or Appsmith (OSS).
- Already on R: Shiny (now also for Python).