Metadata-Version: 2.4
Name: starhtml
Version: 0.5.10
Summary: Modern HTML generation in Python, inspired by FastHTML
License-File: LICENSE
License-File: NOTICE
Requires-Python: >=3.12
Requires-Dist: beautifulsoup4
Requires-Dist: fastcore
Requires-Dist: fastlite
Requires-Dist: httpx
Requires-Dist: itsdangerous
Requires-Dist: oauthlib
Requires-Dist: python-dateutil
Requires-Dist: python-multipart>=0.0.20
Requires-Dist: rjsmin>=1.2.4
Requires-Dist: starlette
Requires-Dist: starlette-compress>=1.0.0
Requires-Dist: uvicorn[standard]
Provides-Extra: debug
Requires-Dist: starelements>=0.1.1; extra == 'debug'
Provides-Extra: demo
Requires-Dist: star-drawing>=0.1.0; extra == 'demo'
Requires-Dist: starelements>=0.1.1; extra == 'demo'
Requires-Dist: starlighter; extra == 'demo'
Provides-Extra: dev
Requires-Dist: brotli>=1.1.0; extra == 'dev'
Requires-Dist: ipykernel; extra == 'dev'
Requires-Dist: pip-tools; extra == 'dev'
Requires-Dist: psutil; extra == 'dev'
Requires-Dist: pyright; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: test
Requires-Dist: pytest; extra == 'test'
Requires-Dist: pytest-asyncio; extra == 'test'
Requires-Dist: pytest-cov>=6.1.1; extra == 'test'
Requires-Dist: pytest-timeout; extra == 'test'
Requires-Dist: pytest-watch; extra == 'test'
Requires-Dist: pytest-xdist; extra == 'test'
Requires-Dist: requests>=2.32.4; extra == 'test'
Description-Content-Type: text/markdown

<div align="center">

<a href="https://starhtml.com"><img src="web/static/images/og/starhtml.jpg" alt="StarHTML — Python Web Framework" width="100%"></a>

<a href="https://ui.starhtml.com"><img src="web/static/images/og/starui.jpg" alt="StarUI — Python Component Library" width="100%"></a>

![PyPI Version](https://img.shields.io/pypi/v/starhtml?style=for-the-badge)
![License](https://img.shields.io/github/license/banditburai/starhtml?style=for-the-badge)

**A Python-first hypermedia framework, forked from FastHTML. Uses [Datastar](https://data-star.dev/) instead of HTMX for the same hypermedia-driven approach with a different flavor.**

[Documentation](https://starhtml.com) · [UI Components](https://ui.starhtml.com) · [Quick Start](#quick-start) · [Community](https://github.com/banditburai/starhtml/discussions) · [Issues](https://github.com/banditburai/starhtml/issues)

</div>

## 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

```bash
pip install starhtml
```

```python
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

```bash
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](CONTRIBUTING.md).

## Acknowledgments

StarHTML is a fork of [FastHTML](https://github.com/AnswerDotAI/fasthtml). Built on [Datastar](https://data-star.dev/) for client-side reactivity.
