Build websites with Python.

Write pages as Python functions. Generate optimized HTML. Deploy anywhere.

$ pip install nitro-cli
~/my-site

Six Tools. One Ecosystem.

Focused packages that work together or standalone. Pick what you need.

>=Nitro CLI

Static site generator that builds websites using Python and nitro-ui instead of template languages.

pip install nitro-cli
Docs
</>Nitro UI

Build HTML with Python classes. Zero dependencies, type-safe elements, method chaining.

pip install nitro-ui
Docs
{ }Nitro DataStore

Schema-free data access for JSON with dot notation, queries, and path discovery.

pip install nitro-datastore
Docs
//Nitro Dispatch

Plugin system with async support, hook priorities, timeouts, and event namespacing.

pip install nitro-dispatch
Docs
[x]Nitro Validate

Dependency-free validation with 51+ built-in rules and a clean, intuitive API.

pip install nitro-validator
Docs
[ ]Nitro Image

Image processing with a chainable API, responsive generation, and smart presets.

pip install nitro-image
Docs

How It Works

Three simple concepts. That's all you need to build any static site.

page.py
def render():
    return Page(
        title="Hello",
        content=Body(H1("Hello, World!")),
    )
01

Write pages as functions.

Each page is a Python function. Use variables, loops, conditionals — real code, not a template language.

component.py
Card(
    H2("Welcome"),
    Paragraph("Get started in seconds."),
    cls="hero-card"
)
02

Compose with components.

HTML elements are Python classes. Nest them, reuse them, pass props as keyword arguments.

data.py
data = DataStore.from_file("posts.json")

for post in data.posts:
    Card(title=post.title)
03

Load data with dots.

Access JSON and YAML with dot notation. No schemas, no boilerplate — just data.field.value.

"Python is all you need."

No complex build chains. No template languages. No JavaScript required. Just Python functions that return HTML.

Read the documentation