---
package: "@webjsdev/server"
version: 0.8.7
date: 2026-06-02T12:00:00+05:30
commit_count: 4
---
## Features

- **`WEBJS_ELIDE` environment override for the elision switch** ([#203](https://github.com/webjsdev/webjs/pull/203)) [`444fb29`](https://github.com/webjsdev/webjs/commit/444fb29)
  A `WEBJS_ELIDE` env var now overrides the `package.json` `webjs.elide`
  switch: `0` / `false` / `off` / `no` force component elision off, `1` /
  `true` / `on` / `yes` force it on, and any other value falls through. It is
  the deploy-time escape hatch to rule elision out while debugging a suspected
  wrong-strip, without editing committed code.

- **`no-browser-globals-in-render` convention rule** ([#208](https://github.com/webjsdev/webjs/pull/208)) [`54ffb02`](https://github.com/webjsdev/webjs/commit/54ffb02)
  `webjs check` now flags browser globals and `HTMLElement` members used in a
  component's constructor or `render()`, which the SSR pipeline runs on a bare
  server-side class with no DOM, so they throw at SSR time. The rule names the
  member and the fix (move it to `connectedCallback` or a lifecycle hook). It
  is conservative: only the constructor and render bodies are scanned, only
  direct references, and string/template content is masked.

## Fixes

- **comments are masked before the elision tag and observation scans** ([#201](https://github.com/webjsdev/webjs/pull/201)) [`8b0c8d8`](https://github.com/webjsdev/webjs/commit/8b0c8d8)
  A commented-out custom-element tag, `whenDefined`, or `@event` no longer
  forces a display-only component to ship. The elision analyser now masks
  comment bodies (keeping string and template content) before its tag,
  observation, and interactivity scans, so dead code in a comment cannot
  defeat the optimization.

- **the transformed-source cache is per request handler** ([#203](https://github.com/webjsdev/webjs/pull/203)) [`444fb29`](https://github.com/webjsdev/webjs/commit/444fb29)
  The stripped-TypeScript-plus-elision cache was module-global keyed only on
  path and mtime, but the cached bytes bake in a handler's elision verdict, so
  two `createRequestHandler` instances for the same app with different elision
  settings (a multi-tenant embedder) served each other's elided source. The
  cache now lives in per-handler state; single-handler production behaviour is
  unchanged.
