Stario brings back the joy of building web apps
Reason this release was yanked:
Sunsetting in favour of 2.x
Project description
✨ Binging back joy and exploration to building web apps ✨
Documentation: stario.dev
Source Code: https://github.com/bobowski/stario
Stario
Stario is a lightweight ASGI framework built on top of Starlette that brings back the joy of building web apps. Focus on building apps rather than passing data between components.
Why Stario?
- HTML-first - dropping intermediary data layers (e.g. JSON) and using HTML as the primary data format. "Just throw html at user and make them happy."
- Rapid prototyping - a simple framework to build and test fullstack ideas with minimal setup. Build, see if it works, optimize later (if ever).
- No-nonsense - no ceremony, no complexity, just build.
- Learning experience - Learn about web, rather than X or Y language framework. I've learned a lot building this framework. I hope you will too.
It focuses on:
- HTML-first DX: return strings or HTML providers, no ceremony.
- Realtime by default: seamless Server-Sent Events (SSE) with DataStar patches/signals.
- Great defaults: Brotli compression out of the box, fast dependency resolution, and caching.
- Starlette compatibility: interop with routes, middleware, and tools you already know.
What you get:
- A tiny, low-complexity HTTP framework powered by Starlette and DataStar.
- SSE streaming by simply yielding patches, HTML, or signals (dicts).
- Brotli compression middleware enabled by default (GZip fallback).
- Simple DI via
Annotatedwith request params (QueryParam,PathParam,Header,Cookie) andInject. - Per-request/app/ttl caching and configurable run modes (
auto,sync,thread). - Header-constrained routes and a lightweight
StarRouter. - Few dependencies and a clear, typed codebase.
Installation
From PyPI (when available):
pip install stario
Or from source in this repository:
cd stario
pip install -e .
You'll also want an ASGI server such as uvicorn:
pip install uvicorn
Quick start
# main.py
import asyncio
from stario import Stario, Query
from stario.toys import toy_page
from stario.html import div, h2
async def home():
return toy_page(
h2("Realtime responses!"),
div(
{"data-on-load": "@get('/online-counter')"},
"This shows how long the connection has been open.",
),
div({"id": "online-counter"}),
)
async def online_counter():
duration = 0
interval = 0.01
while True:
# Yielding HTML elements streams as SSE with DataStar-compatible events
yield div({"id": "online-counter"}, f"Online since: {duration:.1f}s")
duration += interval
await asyncio.sleep(interval)
# Building the app
app = Stario(
Query("/", home),
Query("/online-counter", online_counter),
)
Run with Uvicorn:
uvicorn main:app --reload
Open http://127.0.0.1:8000/ in your browser.
Stario code is designed & crafted for joy.
— ⭐️ —
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 stario-1.4.0.tar.gz.
File metadata
- Download URL: stario-1.4.0.tar.gz
- Upload date:
- Size: 55.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f0449b17fce85b2883907bec9fc29bd6234a6587818311deacda92e3dd26f26
|
|
| MD5 |
1980b719b1dec44f04f61d744e047fa0
|
|
| BLAKE2b-256 |
0e585c1f1e4038cc458bff89afbff82bddd98c77aeaff09d515130ac862d16c3
|
File details
Details for the file stario-1.4.0-py3-none-any.whl.
File metadata
- Download URL: stario-1.4.0-py3-none-any.whl
- Upload date:
- Size: 65.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a41b1fea9fee96fe9bbb28472ace2df41064b1e32a9e7953226b32ca27a9dfea
|
|
| MD5 |
862d32b2ab54f5c61934cfbe9afca319
|
|
| BLAKE2b-256 |
83417b29002ec456b340ba9f1325ea39404b31de40c404cb6df682cbfcae1585
|