Skip to main content

Stario brings back the joy of building web apps

Reason this release was yanked:

Sunsetting in favour of 2.x

Project description

stario-logo

✨ 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 Annotated with request params (QueryParam, PathParam, Header, Cookie) and Inject.
  • 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

stario-1.3.0.tar.gz (57.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stario-1.3.0-py3-none-any.whl (67.5 kB view details)

Uploaded Python 3

File details

Details for the file stario-1.3.0.tar.gz.

File metadata

  • Download URL: stario-1.3.0.tar.gz
  • Upload date:
  • Size: 57.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for stario-1.3.0.tar.gz
Algorithm Hash digest
SHA256 896e3fe451b393a470fc43a5c48e5522d5b32df7e9eef5aabc0ec635edca27e6
MD5 1e2fd7f441a2dc59b66610d3efd8e4dc
BLAKE2b-256 b71c25a96ba1d6fb6d30a604f785585c82cbf0d240a3a42813b1f6b41f6c69cc

See more details on using hashes here.

File details

Details for the file stario-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: stario-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 67.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for stario-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5269540d98739f9bdb880adc864bba73497da087cd651e9b59eff1e2e1ea72b4
MD5 0ccdaa348582e479d95571205fdf5da9
BLAKE2b-256 9ad73b62796b4b2814b837afd78ee9f1910570d34cb7a9977138c58b99a24980

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page