Build in Python.
Bring pages to life.
Your routes, your templates, just the interactivity you need. Z8ter brings them together on Starlette.
A Python view.
A page of HTML.
Room to grow.
Open source · Public alpha · APIs may change
From Python to a page you can use.
A page is requested.
Waiting for the HTML response.
A URL finds its Python view.
When the app starts, Z8ter discovers your view classes. A request to /hello reaches the view in endpoints/views/hello.py.
Fewer routes to wire by hand.
Example flow, not a live Python server. The counter represents a custom element you add to your app.
Explore views & templatesWhy Z8ter?
Python on the server, rendered HTML for your pages, and focused tools for the parts you add next
Async-First Architecture
Write async Python handlers on Starlette and await database or network calls without blocking on their results.
SSR by Default
Render page content with Jinja on the server, then add browser-side behavior where your application needs it.
Interactive Islands
The starter uses Solid-powered custom elements for focused interactivity within server-rendered pages.
File-Based Routing
View classes are discovered under endpoints/views. Their file paths define page URLs, with explicit overrides when needed.
Authentication Tools
Configure session authentication and route guards, with Argon2 hashing and helpers for account lockouts and signed tokens.
Opt-in Security
Enable CSRF checks, rate limits, and security headers through explicit builder configuration for your application.
Transactional Email
Pluggable email providers (console, SMTP) with async sending and Jinja-templated messages.
In-Process Tasks
Schedule recurring jobs and start one-off async tasks alongside your app. Tasks run within the application process.
Project & Page Scaffolding
Generate a starter project or a page's view, Jinja template, content file, and TypeScript module from the CLI.
Simple & Expressive
Configure your app, render a Jinja page, and expose a JSON endpoint
from z8ter.builders.app_builder import AppBuilder
# Choose the integrations your application uses
builder = AppBuilder()
builder.use_config(".env")
builder.use_templating()
builder.use_vite()
builder.use_errors()
builder.use_security_headers()
builder.use_health_check()
app = builder.build(debug=True)
asgi_app = app.starlette_appFrom an empty folder to your first page
Make it yours.
Four steps. A working app. Follow along at your own pace.
You’ll need Python 3.10+, Node.js 22.12+ and npm.
The CLI creates a project with Python routes, Jinja templates, and a frontend build setup. Give it your own name when you’re ready.
Inside your new myapp/ folder
Ready to Build Something Amazing?
Dive into our comprehensive documentation to learn more