Getting Started¶
Welcome to HolySheet! This guide will take you from zero to a fully interactive dashboard in under 5 minutes.
Installation¶
Basic Install¶
With DataFrame Support¶
Requirements
- Python 3.11+
- No Node.js required
- No frontend build step
- No running server
Core dependencies (installed automatically): pydantic v2 ยท jinja2 ยท orjson ยท loguru ยท click
Your First Report¶
Step 1: Import¶
Step 2: Create a Report¶
report = Report(
title="My First Dashboard",
subtitle="Built with HolySheet",
theme="dark",
)
Step 3: Add Blocks¶
# Add a welcome message
report.add(Markdown(content="## Welcome\n\nThis is my first HolySheet dashboard!"))
# Add KPI cards
report.add(KPI(label="Total Users", value="2,890", delta="+13.8%", status="positive"))
report.add(KPI(label="Active Rate", value=78, unit="%", delta="+2.1%", status="positive"))
report.add(KPI(label="Revenue", value="$124K", delta="+18%", status="positive"))
# Add a chart
monthly_data = [
{"month": "Jan", "users": 1_200},
{"month": "Feb", "users": 1_450},
{"month": "Mar", "users": 1_830},
{"month": "Apr", "users": 2_100},
{"month": "May", "users": 2_540},
{"month": "Jun", "users": 2_890},
]
report.add(LineChart(
title="User Growth",
data=monthly_data,
x="month",
y="users",
height=400,
))
Step 4: Export¶
report.export_html("my_report.html")
print("Done! Open my_report.html in your browser.")
Step 5: Open & Share¶
Congratulations!
You just built an interactive dashboard with zero frontend knowledge. The HTML file is fully self-contained โ share it however you like.
Understanding the Architecture¶
HolySheet operates in two distinct phases:
Build Time (Python โ your machine)¶
- Define blocks using the Python API (
KPI,LineChart, etc.) - Validate everything with Pydantic v2 models โ catch errors early
- Generate a versioned JSON dashboard specification
- Inject the spec into a prebuilt React application
- Export a self-contained HTML file via Jinja2 templates
Runtime (Browser โ any machine)¶
- Browser opens the HTML file (no server needed)
- React reads the embedded dashboard spec from
<script id="report-data"> - Renders each block through a component registry (
typeโ React component) - Charts become interactive via Apache ECharts
- Tables support real-time search and pagination
Key Insight
The React app is prebuilt and bundled inside the Python package. End users never need Node.js, npm, or any frontend tooling. The magic happens at pip install time.
How Blocks Work¶
Every block in HolySheet is a Pydantic v2 model with a type discriminator field:
from holysheet.blocks import KPI
kpi = KPI(label="Revenue", value="$1.2M", delta="+12%", status="positive")
# Each block serializes to a dict for the React renderer:
print(kpi.to_props())
# {'label': 'Revenue', 'value': '$1.2M', 'delta': '+12%', ...}
The Report class manages a list of blocks and assigns sequential IDs (block_001, block_002, โฆ) for deterministic output.
Export Formats¶
HolySheet supports three export modes:
Standalone HTML (Recommended)¶
Generates a single self-contained HTML file (~1.5 MB) with embedded React, CSS, and data. Zero external dependencies.
Best for
Email attachments, Slack sharing, embedding in Confluence or Notion, offline viewing.
Folder Export¶
Generates a deployable folder structure:
dist/
โโโ index.html โ Entry point
โโโ report.json โ Dashboard spec
โโโ spec-loader.js โ Auto-generated loader
โโโ assets/
โโโ app.js โ React bundle
โโโ app.css โ Styles
Best for
Hosting on a web server, S3, CDN, or GitHub Pages.
JSON Export¶
Exports just the dashboard specification as JSON.
Best for
Debugging, version control, feeding into external rendering pipelines, programmatic manipulation.
Next Steps¶
Now that you have the basics down, explore:
- Block Types โ Learn about all 57 available blocks
- Themes โ Choose and customize your theme
- Data Sources โ Work with pandas, polars, and more
- Examples Gallery โ Copy-paste real-world dashboards