Projects
View on GitHub
banditburai/starHTML
banditburai/starHTML has 80 GitHub stars and 5 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-15 08:02 UTC. Last push 2026-09-21.
What you can do
- Python-First — Write reactive UIs using Python syntax with type safety and IDE support
- Reactive Signals — Hypermedia approach with data-attribute-powered client-side reactivity where needed
- Server-Sent Events — Built-in SSE support for real-time server interactions
- Framework Agnostic — Works with any CSS framework (Tailwind, DaisyUI)
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
A Python-first hypermedia framework
Web & AppsREADME.md
Original
A Python-first hypermedia framework, forked from FastHTML. Uses Datastar instead of HTMX for the same hypermedia-driven approach with a different flavor.
Documentation · UI Components · Quick Start · Community · Issues
Key Features
- Python-First — Write reactive UIs using Python syntax with type safety and IDE support
- Reactive Signals — Hypermedia approach with data-attribute-powered client-side reactivity where needed
- Server-Sent Events — Built-in SSE support for real-time server interactions
- Framework Agnostic — Works with any CSS framework (Tailwind, DaisyUI)
- JavaScript Escape Hatch — Drop into raw JavaScript when needed for complex interactions
Quick Start
pip install starhtml
from starhtml import *
app, rt = star_app()
@rt('/')
def home():
return Div(
H1("StarHTML Demo"),
# Define reactive state with signals
Div(
(counter := Signal("counter", 0)), # Python-first signal definition
# Reactive UI that updates automatically
P("Count: ", Span(data_text=counter)),
Button("+", data_on_click=counter.add(1)),
Button("Reset", data_on_click=counter.set(0)),
# Conditional styling
data_class_active=counter > 0
),
# Server-side interactions
Button("Load Data", data_on_click=get("/api/data")),
Div(id="content")
)
@rt('/api/data')
def api_data():
return Div("Data loaded from server!", id="content")
serve()
Run with python app.py and visit http://localhost:5001.
What's Different?
| FastHTML | StarHTML |
|---|---|
| HTMX for server interactions | Datastar for reactive UI |
| Built with nbdev notebooks | Standard Python modules |
| Multiple JS extensions | Single reactive framework |
| WebSockets for real-time | SSE for real-time |
Development
git clone https://github.com/banditburai/starhtml.git
cd starhtml
uv sync # or pip install -e ".[dev]"
pytest && ruff check .
Contributions welcome — see CONTRIBUTING.md.
Acknowledgments
StarHTML is a fork of FastHTML. Built on Datastar for client-side reactivity.

