Skip to content

shadlet 0.2.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 10:33
· 34 commits to main since this release

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.