dashboardfy
Generate beautiful, self-contained, interactive HTML dashboards from one or more
pandas DataFrames — no server, no JavaScript build step, just a single .html file
you can open in any browser or share by email.
Features
- One function call: pass a DataFrame (or several) and get an HTML file.
- Tabs: each DataFrame is rendered in its own tab, with optional title, description, KPI cards, and info/warning notices.
- KPIs: computed aggregations (
sum,mean,median,min,max,count,nunique,std,first,last) over any column, or explicit values, with custom formatting. - Interactive tables:
- Global search across all columns.
- Per-column filter inputs.
- Per-column sort (ascending/descending, numeric-aware) and hide/show buttons.
- Themes:
light(default),dark,minimal,ocean. - Safe: all cell values, titles and descriptions are HTML-escaped.
Installation
pip install dashboardfy
Quick start
import pandas as pd
import dashboardfy
df = pd.DataFrame({"product": ["A", "B"], "revenue": [100, 250]})
# Simplest form: one DataFrame -> dashboard.html
dashboardfy.generate(df, "dashboard.html", title="Sales report")
# Several DataFrames as tabs
dashboardfy.generate({"Sales": df, "Inventory": df2}, "report.html", theme="dark")
Full example with tabs, KPIs and notices
import pandas as pd
from dashboardfy import Tab, KPI, generate
sales = pd.DataFrame(...)
tabs = [
Tab(
df=sales,
title="Sales",
description="Monthly sales by product and region.",
kpis=[
KPI(label="Total revenue", column="revenue", agg="sum", fmt="${:,.0f}"),
KPI(label="Best day", column="units", agg="max", detail="units in one day"),
KPI(label="Distinct products", column="product", agg="nunique"),
],
info="Data refreshed daily from the warehouse.",
warning="Returns are not yet included in these figures.",
),
Tab(df=inventory, title="Inventory"),
]
generate(
tabs,
"report.html",
title="Company dashboard",
description="Key figures for August 2026.",
theme="ocean",
)
If you want the HTML as a string instead of a file, use
dashboardfy.render_html(...) with the same arguments (minus output_path).
API
generate(data, output_path="dashboard.html", *, title=None, description=None, theme="light") -> Path
data accepts:
| Input | Result |
|---|---|
pd.DataFrame |
single tab |
dict[str, pd.DataFrame] |
one tab per entry, keys as tab titles |
list[pd.DataFrame | Tab] |
one tab per item |
Tab |
single tab |
Tab(df, title=None, description=None, kpis=[], info=None, warning=None)
KPI(label, column=None, agg="sum", value=None, fmt=None, detail=None)
Either give column + agg, or an explicit value. fmt is a Python format
string applied to the result, e.g. "${:,.2f}" or "{:.1%}".
Development
pip install -e .[dev]
pytest
License
MIT
Metadata
Release files for dashboardfy 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dashboardfy-0.1.0.tar.gz | 16.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dashboardfy-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.4 kB
Release files / dashboardfy-0.1.0.tar.gz
| Download URL | dashboardfy-0.1.0.tar.gz |
|---|---|
| Size | 16.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6c14a14472ae39fc6f319bd9707ef64d9c4519c6614e4529649d42bf9eb6c12
|
|
BLAKE2b-256 checksum How to use checksums |
ef8d971633f8c91ff7a1f06a8af307aee8b792b4485ee6490464f4b1b03750dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / dashboardfy-0.1.0-py3-none-any.whl
| Download URL | dashboardfy-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
346e4bafdb2e4a749fdeaef0aed2a5e946ad9c487f3351c809f0f80eb70abbe8
|
|
BLAKE2b-256 checksum How to use checksums |
e3c72be745ab90ed7385bad2160cb602727d767f696f5830212f9668e894fc69
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|