Releases
v0.2.0
Compare
Sorry, something went wrong.
No results found
added
explicit websocket handshake: the browser sends hello, the server validates it, negotiates the protocol, then sends the initial render.
token-based session restoration so reconnecting clients keep their state, with TTL expiry and session limits.
origin validation with configurable allowed origins and a connection authentication hook (App(authenticate=...)).
per-session event and message rate limiting, message size limits, handshake timeouts, and connection generation tracking.
shared protocol fixtures validated by both pydantic and zod contract tests.
renderer patch validation and automatic resynchronization when a patch or sequence fails.
session manager tests covering isolation, restoration, expiry, and limits.
dedicated security, deployment, session, and configuration documentation.
changed
centralised the package version; pyproject.toml, the runtime, the CLI, and the renderer now agree on 0.2.0.
renderer assets are served from /_shadlet_assets, so project /assets no longer shadows bundled renderer files.
protocol schemas no longer include desktop messages; the renderer no longer contains desktop bridge code.
session.refresh, toast delivery, and navigation tasks are tracked and cancelled when a session closes.
websocket payloads are parsed with the shared pydantic models instead of ad-hoc dictionaries.
ci now tests python 3.11, 3.12, 3.13, and 3.14 exactly once each and verifies a clean wheel install.
removed
the reload server message, desktop_request, and desktop_result protocol messages.
frozen/embedded desktop asset lookup from the web server.
fixed
the first render is never sent before the client handshake is validated.
non-root initial routes receive an init message instead of an out-of-order navigation message.
state changes made while an event handler holds the session lock are no longer dropped.
invalid, stale, duplicate, oversized, and rate-limited messages are rejected without corrupting session state.
out-of-range insert/remove patches are rejected instead of silently splicing.
reconnecting clients can restart their event sequence, and fatal protocol errors stop automatic reconnect loops.
connected sessions are no longer expired by the idle-session sweep.
queued toasts are retained when a reconnect happens during delivery.
You can’t perform that action at this time.