Skip to main content

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)

Source distribution for dashboardfy 0.1.0
File Size Uploaded
dashboardfy-0.1.0.tar.gz 16.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dashboardfy 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page