---
package: "@webjsdev/cli"
version: 0.10.10
date: 2026-06-04T19:45:32.906Z
commit_count: 7
---
## Features

- **drive a webjs-frame by id from outside it, plus _top and aria-busy** ([#338](https://github.com/webjsdev/webjs/pull/338)) [`430e6cca`](https://github.com/webjsdev/webjs/commit/430e6cca)
  * feat: drive a webjs-frame by id from outside it, plus aria-busy
  
  A swap was scoped to a frame only when the trigger was DOM-nested inside it
  (closest-only). Add external frame targeting: a link or form carrying
- **recover from a failed navigation in place instead of a full reload** ([#339](https://github.com/webjsdev/webjs/pull/339)) [`43eaf64f`](https://github.com/webjsdev/webjs/commit/43eaf64f)
  * feat: recover from a failed navigation in place instead of a full reload
  
  On a non-HTML error response (a JSON 500), a transport failure, or an
  unparseable HTML body, fetchAndApply did a destructive location.href full
- **view transitions on partial swaps + data-webjs-permanent** ([#343](https://github.com/webjsdev/webjs/pull/343)) [`77c1216d`](https://github.com/webjsdev/webjs/commit/77c1216d)
  View Transitions only wrapped the full-body fallback, never the partial
  layout-marker swap or the webjs-frame swap (the common designed-for paths).
  Wrap all three swap paths in document.startViewTransition via runWithTransition,
  gated by an opt-in <meta name="view-transition" content="same-origin"> (OFF
- **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/
- **provide an opt-in progressive-enhancement service worker primitive** ([#350](https://github.com/webjsdev/webjs/pull/350)) [`ced742f8`](https://github.com/webjsdev/webjs/commit/ced742f8)
  * feat: ship an opt-in progressive-enhancement service worker primitive
  
  Scaffold a hand-authored public/sw.js + public/offline.html into every app
  (copied by create.js, dormant until the app registers it, so the JS-disabled

## Fixes

- **soften the scaffolded test-with-source gate to a warning** ([#331](https://github.com/webjsdev/webjs/pull/331)) [`a6291b34`](https://github.com/webjsdev/webjs/commit/a6291b34)
  The scaffolded require-tests-with-src.sh hard-blocked (exit 2) a commit that
  staged app code with no test, contradicting the convention-vs-check principle
  the same scaffolded AGENTS.md / CONVENTIONS.md state (a sensible app can
  legitimately want a test-less commit, so every change ships with a test is a
