Build static sites with Python code instead of template engines
Project description
Nitro CLI
A static site generator that lets you build websites using Python and nitro-ui.
Features
- Python-Powered - Write pages in Python with nitro-ui instead of template languages
- Live Reload - Development server with automatic browser refresh
- Incremental Builds - Only rebuild changed pages
- Dynamic Routes - Generate pages from data with
[slug].pypattern - Draft Pages - Mark pages as drafts to exclude from production builds
- Environment Variables - Auto-load
.envfiles withfrom nitro import env - Image Optimization - Responsive images with WebP/AVIF conversion
- Islands Architecture - Partial hydration for interactive components
- Plugin System - Extend the build lifecycle with nitro-dispatch hooks
- One-Click Deploy - Netlify, Vercel, or Cloudflare Pages
Installation
pip install nitro-cli
AI Assistant Integration
Add Nitro CLI knowledge to your AI coding assistant:
npx skills add nitro-sh/nitro-cli
This enables AI assistants like Claude Code to understand Nitro CLI and generate correct nitro-ui code.
Quick Start
nitro new my-site
cd my-site
nitro dev
Visit http://localhost:3000. Build for production with nitro build.
Writing Pages
Pages are Python files in src/pages/ that export a render() function:
# src/pages/index.py
from nitro_ui import HTML, Head, Body, Title, Meta, H1
from nitro import Page
def render():
return Page(
title="Home",
content=HTML(
Head(
Meta(charset="UTF-8"),
Meta(name="viewport", content="width=device-width, initial-scale=1.0"),
Title("Home"),
),
Body(H1("Welcome!"))
)
)
Output paths mirror the file structure: src/pages/about.py → build/about.html
Dynamic Routes
Generate multiple pages from data using [param].py naming:
# src/pages/blog/[slug].py
from nitro import Page
from nitro_datastore import NitroDataStore
def get_paths():
data = NitroDataStore.from_file("src/data/posts.json")
return [{"slug": p.slug, "title": p.title} for p in data.posts]
def render(slug, title):
return Page(title=title, content=...)
Commands
| Command | Description |
|---|---|
nitro new <name> |
Create new project |
nitro init |
Initialize Nitro in current dir |
nitro dev |
Start dev server with live reload |
nitro build |
Build for production |
nitro preview |
Preview production build |
nitro routes |
List all routes |
nitro check |
Validate site without building |
nitro export |
Export site as zip archive |
nitro clean |
Remove build artifacts |
nitro deploy |
Deploy to hosting platform |
nitro info |
Show project and environment info |
Run nitro <command> --help for options.
Configuration
# nitro.config.py
from nitro import Config
config = Config(
site_name="My Site",
base_url="https://mysite.com",
renderer={"minify_html": True},
plugins=[],
)
Ecosystem
- nitro-ui - Programmatic HTML generation
- nitro-datastore - Data loading with dot notation access
- nitro-dispatch - Plugin system
- nitro-validate - Data validation
License
This project is licensed under the BSD 3-Clause License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nitro_cli-1.0.9.tar.gz.
File metadata
- Download URL: nitro_cli-1.0.9.tar.gz
- Upload date:
- Size: 62.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1636e09360299b6c2a8b934c89901fccf60912b5b1e263fcb3a494f7a5578a13
|
|
| MD5 |
e6fffeb2daa9b6d55c18095ec3dbe6ce
|
|
| BLAKE2b-256 |
827b9d14041b0ed60002c1318127679cce654e03deb50428b684701b9fe68b6d
|
File details
Details for the file nitro_cli-1.0.9-py3-none-any.whl.
File metadata
- Download URL: nitro_cli-1.0.9-py3-none-any.whl
- Upload date:
- Size: 67.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02ed8e93699b26bb4d61bda2a257039bb151c7e0f2faf6e25cd37ad358a44804
|
|
| MD5 |
835e12b8d53243daee400e5738836158
|
|
| BLAKE2b-256 |
a4aa3e5326b504565285fc7e8a61421ec8fdea2759a497e0b9454d83bc7db036
|