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(formerlyStario); routing, middleware, URL building, and path normalization were tightened. Per-route middleware andbootstrapstay the mental model.Writer vs Datastar — HTTP stays on
Writerandstario.responses; Datastar lives understario.datastarso 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, andTestClientwere updated for this release.CLI and telemetry — The
starioCLI 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
Renames, removals, and edge cases —
CHANGELOG.mdin the Stario repo.APIs and how-tos — Documentation.
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.