A pandas df in -> interactive dashboard out. Dynamically rendered to a standalone HTML file, a Streamlit app, or a Plotly Dash app from one authoring API.
Live gallery → — every dashboard there is a real exported file, served as-is.
What this is. A design idea: keep a dashboard's definition separate from the backend that renders it.
Dashboards are normally tied to a runtime or server, a notebook needs a kernel etc. Where as here every chart is a declarative query. A planner turns each one into an aggregation plan and runs it against a binding pandas over an embedded frame, or SQL pushed down to a db.
| Lane | Call | Output |
|---|---|---|
| HTML | .save("dash.html") |
one self-contained file, data embedded, zero install |
| Streamlit | .to_streamlit("dir") |
a runnable Streamlit project |
| Dash | .to_dash("dir") |
a runnable Plotly Dash project |
| Streamlit | Dash |
|---|---|
![]() |
![]() |
import pandas as pd
from dashboard_studio import Dashboard
df = pd.read_csv("diamonds.csv")
(Dashboard("Diamond Pricing", df, theme="daylight")
.kpi("Avg price", "price", agg="mean", fmt="currency")
.bar("Mean price by cut", x="cut", y="price", agg="mean")
.scatter("Carat vs price", x="carat", y="price", color="cut")
.filter_by("cut")
.save("diamonds.html")) # or .to_streamlit(dir) / .to_dash(dir)Dashboard.auto("Sales", df).save("out.html") infers the whole thing from the data.
pip install -e ".[streamlit,dash,sql]" # core is pandas-only; extras add lanes
python examples/build_examples.py # HTML for three real datasets
python -m pytest tests/ -qstudio.py resolves one backend-neutral spec; planner.py turns each chart into an
aggregation plan and runs it against a binding (pandas or SQL); exporters/ renders a lane.
figures.py, planner.py, and components.py are copied verbatim into each generated app,
so an exported project runs with only its framework installed — no DashboardStudio needed.
PolyForm Noncommercial 1.0.0 — © 2026 Luke J. Free for any noncommercial use.


