v0.3.0 — Plugin system + framework polish
Highlights
First-class plugin system
Compose apps via pyxle.config.json::plugins — Django-style INSTALLED_APPS. Plugins register services through a PluginContext, hook into the ASGI lifespan, and contribute middleware.
{
"plugins": [
"pyxle-db",
{
"name": "pyxle-auth",
"settings": { "cookieDomain": ".example.app" }
}
]
}Resolve services Django-style:
from pyxle_auth import get_auth_service
@action
async def sign_in(request):
auth = get_auth_service()
...See: Plugins guide, Plugins API reference.
First-party plugins (separate packages)
pyxle-db— SQLite-first database with migrations, WAL, connection pooling.pyxle-auth— Email+password sessions, argon2id, sliding expiration, per-IP/per-email rate limits.
Framework fixes (surfaced by Pyxle Cloud work)
- WebSocket endpoints —
pages/api/*.pycan exportasync def websocket(ws)for live updates and chat. - Client navigation cache with TTL + invalidation — loader payloads cached 30s; call
invalidate(url)on the client or returninvalidate_routes(response, ...)from an@actionto refresh list views after mutations. ActionErroris auto-imported in any.pyxlwith an@action.<Head>coerces multi-part<title>children into a single string.- SSR worker pins
LANG=en-US.UTF-8by default (override viaPYXLE_SSR_LOCALE) — fixes hydration mismatches fromtoLocaleString(). - Vite resolver prefers pinned versions —
pyxle buildrunsnpm installbefore falling back tonpx --yes vite.
Install
pip install --upgrade pyxle-framework