---
package: "@webjsdev/server"
version: 0.8.17
date: 2026-06-04T19:45:32.851Z
commit_count: 5
---
## Features

- **fold an app-source fingerprint into the HTML cache key** ([#329](https://github.com/webjsdev/webjs/pull/329)) [`c4dbb8a9`](https://github.com/webjsdev/webjs/commit/c4dbb8a9)
  * feat: fold an app-source fingerprint into the HTML cache key
  
  The #241 HTML cache key folds the published build id, but that is a fingerprint
  of the IMPORTMAP (core + vendor) only, so a deploy that changes ONLY an app
- **form submission-state events + aria-busy + an optimistic() helper** ([#340](https://github.com/webjsdev/webjs/pull/340)) [`342ae484`](https://github.com/webjsdev/webjs/commit/342ae484)
  A form submitting through the JS-enhanced router had no signal for a pending
  state. The router now sets the native aria-busy on the form for the in-flight
  duration (the readable is-this-form-submitting primitive) and dispatches a
  bubbling webjs:submit-start ({ form, url }) at the start and webjs:submit-end
- **src-driven <webjs-frame> self-loading + server subtree render** ([#346](https://github.com/webjsdev/webjs/pull/346)) [`86f6ae44`](https://github.com/webjsdev/webjs/commit/86f6ae44)
  * feat: src-driven webjs-frame self-loading + server subtree render
  
  A <webjs-frame> could not self-load a region's content, forcing the
  fetch-in-handler anti-pattern for deferred content (comments, a recommendations
- **add the <webjs-stream> stream-action protocol (HTTP + live channel)** ([#347](https://github.com/webjsdev/webjs/pull/347)) [`a489c97d`](https://github.com/webjsdev/webjs/commit/a489c97d)
  * feat: add the <webjs-stream> surgical DOM-update applier
  
  Ship one small custom element that reads a server-sent <template> carrying an
  action + target id and applies it via native DOM (append/prepend/before/after/
- **ship a rich dev error overlay pushed live over SSE** ([#348](https://github.com/webjsdev/webjs/pull/348)) [`30772213`](https://github.com/webjsdev/webjs/commit/30772213)
  * feat: ship a rich dev error overlay pushed live over SSE
  
  A dev SSR render crash, a non-erasable-TS strip failure, and a failed rebuild
  each push a structured error frame (message, parsed file:line:col, a source
