← Blog

Stario 3 is here

Stario 3 is still the same bet as 2.3: asyncio-first HTTP, explicit routing, hypermedia and optional realtime—without piling framework policy on top of your app. This release takes that further: it breaks a handful of APIs on purpose, introduces a lot of new pieces, and lines naming and boundaries up with the docs so the framework matches how we actually want to use it.

For the longer story (HTMX, Datastar, leaving Starlette, the custom server), see A year of building, then unbuilding.

Directions we took

  • App and routing — The app type is App (formerly Stario); routing, middleware, URL building, and path normalization were tightened. Per-route middleware and bootstrap stay the mental model.

  • Writer vs Datastar — HTTP stays on Writer and stario.responses; Datastar lives under stario.datastar so imports match “transport vs UI protocol.”

  • Validation — Still no built-in validation layer; patterns stay in the how-tos and explanation docs.

  • Static assets, Relay, errors, testing — Mounting and url_for, shutdown and subscriptions, redirect/error helpers, and TestClient were updated for this release.

  • CLI and telemetry — The stario CLI is argparse-based; tracers and tracebacks were reshaped for clarity.

  • Docs — stario.dev was reorganized for Stario 3, with search and clearer reference structure.

Workspaces

Stario Workspaces (hosted workflows around deployment and ops) is still in development—no ship date yet. The framework and docs site remain the focus until there is something concrete to announce.

Where to go next

Upgrading from 2.x: read the changelog alongside the docs and migrate in small steps. If something feels ambiguous, that is a documentation gap—an issue helps.

Thanks to everyone who tried early builds and reported rough edges.