Skip to content

fix(react): retain offscreen worklet ctx refs#2592

Merged
Yradex merged 1 commit into
lynx-family:mainfrom
Yradex:wt/run-on-background-retain-offscreen
May 12, 2026
Merged

fix(react): retain offscreen worklet ctx refs#2592
Yradex merged 1 commit into
lynx-family:mainfrom
Yradex:wt/run-on-background-retain-offscreen

Conversation

@Yradex
Copy link
Copy Markdown
Collaborator

@Yradex Yradex commented May 9, 2026

Summary by CodeRabbit

  • Bug Fixes
    • Fixed worklet callback retention to keep event, ref, gesture, and spread handlers alive on the main thread before snapshot elements are materialized, ensuring proper attachment during DOM updates.

Review Change Stack

Overview

Main-thread worklets used by events, refs, gestures, and spread props can be recorded on snapshot values before the snapshot has concrete __elements. This happens for offscreen list items and similar deferred materialization paths.

Previously, lifecycle retaining was coupled to onWorkletCtxUpdate(), which only runs when an element is available. That meant an offscreen main-thread worklet ctx could miss the lifecycle addRef step before the later DOM attach/update path, so the background worklet ctx was allowed to be released too early.

This PR separates lifecycle retaining from element update side effects. Snapshot update paths now retain main-thread worklet ctx values as soon as they observe them, while onWorkletCtxUpdate() remains responsible only for hydration and delayed-worklet behavior that actually needs an element.

Key Points

  • Root cause: lifecycle addRef was behind the snapshot.__elements guard through onWorkletCtxUpdate(). Offscreen snapshots skipped that path until materialization, which was too late for retaining the background ctx reference.
  • Fix: introduce a minimal retainWorkletCtx(worklet) helper and call it from event, ref, gesture, and spread update paths before returning for missing __elements.
  • Gesture handling retains callback worklets when the snapshot value updates, then suppresses a second retain when processGesture() later performs the real DOM update for the same value.
  • JsFunctionLifecycleManager now deduplicates repeated addRef() calls for the same object identity, so repeated componentAtIndex access cannot inflate the ref count for the exact same retained object.

Runtime Contract

The lifecycle retain step is now independent from element-specific update work:

// Retain can happen before native elements are materialized.
if (workletType === 'main-thread') {
  retainWorkletCtx(worklet);
}

// Element-side hydration, delayed execution, and DOM binding still require elements.
if (snapshot.__elements) {
  onWorkletCtxUpdate(worklet, oldWorklet, isMainThreadHydrating, element);
}

For gestures, the retained unit is each serialized base gesture callback. The DOM update path keeps using processGesture() for detector setup, but passes retainCallbacks: false when the callbacks have already been retained by the snapshot update path.

This does not change the serialized worklet shape, native gesture detector contract, transform output, or public component API. Missing _execId remains a no-op for lifecycle retaining, and legacy first-screen hydration / delayed-worklet behavior stays in onWorkletCtxUpdate().

Compatibility / Boundaries

  • The dedupe is object-identity based: retaining the same object twice is ignored, while distinct objects that share an execId still contribute separate lifecycle references.
  • The fix is limited to main-thread worklet lifecycle retention for event, ref, gesture, and spread paths. It does not introduce debug logging, dump fields, or example-page changes.
  • Existing compatibility branches for old main-thread ref values and old gesture cleanup APIs are preserved.

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).
  • Changeset added, and when a BREAKING CHANGE occurs, it needs to be clearly marked (or not required).

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 9, 2026

🦋 Changeset detected

Latest commit: 4e36350

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@lynx-js/react Patch
@lynx-js/react-umd Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 06fbb8f5-22c8-4f78-9a3d-b893e8e1dc8a

📥 Commits

Reviewing files that changed from the base of the PR and between 87c1759 and 4e36350.

📒 Files selected for processing (11)
  • .changeset/retain-offscreen-worklet-ctx.md
  • packages/react/runtime/__test__/snapshot/workletLifecycle.test.ts
  • packages/react/runtime/__test__/worklet-runtime/jsFunctionLifecycle.test.js
  • packages/react/runtime/__test__/worklet-runtime/observers.test.js
  • packages/react/runtime/src/snapshot/gesture/processGesture.ts
  • packages/react/runtime/src/snapshot/snapshot/gesture.ts
  • packages/react/runtime/src/snapshot/snapshot/spread.ts
  • packages/react/runtime/src/snapshot/snapshot/workletEvent.ts
  • packages/react/runtime/src/snapshot/snapshot/workletRef.ts
  • packages/react/runtime/src/worklet-runtime/bindings/observers.ts
  • packages/react/runtime/src/worklet-runtime/jsFunctionLifecycle.ts

📝 Walkthrough

Walkthrough

This PR separates worklet context retention from observation in the React runtime by extracting an explicit retainWorkletCtx helper and integrating it across snapshot handlers to retain main-thread callbacks before elements are materialized, with deduplication to prevent duplicate registrations.

Changes

Worklet Context Retention for Offscreen Elements

Layer / File(s) Summary
Deduplication and retention helper infrastructure
packages/react/runtime/src/worklet-runtime/bindings/observers.ts, packages/react/runtime/src/worklet-runtime/jsFunctionLifecycle.ts
Extract addRef logic into a new exported retainWorkletCtx helper that runs when _execId is defined. Remove automatic addRef from onWorkletCtxUpdate, and add a WeakSet to track already-retained objects, preventing duplicate addRef calls.
Gesture worklet context retention
packages/react/runtime/src/snapshot/gesture/processGesture.ts, packages/react/runtime/src/snapshot/snapshot/gesture.ts
Add retainGestureWorkletCtx helper to dedupe and retain gesture callbacks by traversing the serialized gesture tree. Extend processGesture to conditionally retain callbacks unless explicitly disabled. Update updateGesture to retain main-thread gesture contexts before processing.
Ref and event worklet context retention
packages/react/runtime/src/snapshot/snapshot/workletRef.ts, packages/react/runtime/src/snapshot/snapshot/workletEvent.ts
Update updateWorkletRef signature to accept workletType and retain main-thread ref contexts when _wkltId is present. Update updateWorkletEvent to retain main-thread event worklets and return early when snapshot.__elements is absent.
Spread attribute worklet context retention
packages/react/runtime/src/snapshot/snapshot/spread.ts
Add retainSpreadWorkletCtx helper to retain ref, gesture, and event worklet contexts from spread attributes. Call this in updateSpread's early-return path when elements are not materialized.
Test coverage
packages/react/runtime/__test__/snapshot/workletLifecycle.test.ts, packages/react/runtime/__test__/worklet-runtime/jsFunctionLifecycle.test.js, packages/react/runtime/__test__/worklet-runtime/observers.test.js
Add integration tests verifying retention across all snapshot handlers; add deduplication test; update observer tests to use retainWorkletCtx and verify addRef is not called during element updates.
Release notes
.changeset/retain-offscreen-worklet-ctx.md
Document patch release for @lynx-js/react noting main-thread worklet context retention for offscreen elements.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • lynx-family/lynx-stack#2188: Both PRs modify main-thread gesture/worklet lifecycle and gesture processing code to avoid redundant updates and preserve worklet/gesture contexts.
  • lynx-family/lynx-stack#2320: Both PRs modify worklet lifecycle handling in observers.ts by guarding addRef with _execId checks.

Suggested labels

framework:React

Suggested reviewers

  • hzy
  • HuJean
  • colinaaa

Poem

🐰 A rabbit's ode to retention

Little worklets need a home,
Before they're off-screen left alone,
Dedupe their refs with careful grace,
Hold them tight in memory's space,
Till DOM arrives to claim its place! 🌿

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: retaining offscreen worklet context references before snapshot elements are materialized.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 9, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 9, 2026

Merging this PR will degrade performance by 16.04%

⚡ 1 improved benchmark
❌ 2 regressed benchmarks
✅ 78 untouched benchmarks
⏩ 26 skipped benchmarks1

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
002-hello-reactLynx-destroyBackground 912.5 µs 670.3 µs +36.13%
008-many-use-state-destroyBackground 8 ms 9.5 ms -16.04%
transform 1000 view elements 40 ms 46.8 ms -14.65%

Comparing Yradex:wt/run-on-background-retain-offscreen (4e36350) with main (87c1759)

Open in CodSpeed

Footnotes

  1. 26 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@relativeci
Copy link
Copy Markdown

relativeci Bot commented May 9, 2026

React External

#1165 Bundle Size — 693.04KiB (+0.4%).

4e36350(current) vs 33b124f main#1143(baseline)

Bundle metrics  Change 1 change
                 Current
#1165
     Baseline
#1143
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
Change  Cache Invalidation 40.57% 0%
No change  Chunks 0 0
No change  Assets 3 3
No change  Modules 17 17
No change  Duplicate Modules 5 5
No change  Duplicate Code 8.59% 8.59%
No change  Packages 0 0
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Regression 1 regression
                 Current
#1165
     Baseline
#1143
Regression  Other 693.04KiB (+0.4%) 690.27KiB

Bundle analysis reportBranch Yradex:wt/run-on-background-reta...Project dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci Bot commented May 9, 2026

Web Explorer

#9624 Bundle Size — 900.02KiB (~-0.01%).

4e36350(current) vs 33b124f main#9602(baseline)

Bundle metrics  Change 2 changes
                 Current
#9624
     Baseline
#9602
No change  Initial JS 44.46KiB 44.46KiB
No change  Initial CSS 2.22KiB 2.22KiB
Change  Cache Invalidation 15.12% 0%
No change  Chunks 9 9
No change  Assets 11 11
Change  Modules 230(+0.44%) 229
No change  Duplicate Modules 11 11
No change  Duplicate Code 27.28% 27.28%
No change  Packages 10 10
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Improvement 1 improvement
                 Current
#9624
     Baseline
#9602
Improvement  JS 495.88KiB (~-0.01%) 495.91KiB
No change  Other 401.92KiB 401.92KiB
No change  CSS 2.22KiB 2.22KiB

Bundle analysis reportBranch Yradex:wt/run-on-background-reta...Project dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci Bot commented May 9, 2026

React Example

#8051 Bundle Size — 236.51KiB (+0.32%).

4e36350(current) vs 33b124f main#8029(baseline)

Bundle metrics  Change 2 changes
                 Current
#8051
     Baseline
#8029
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
Change  Cache Invalidation 38.18% 0%
No change  Chunks 0 0
No change  Assets 4 4
No change  Modules 197 197
No change  Duplicate Modules 80 80
Change  Duplicate Code 44.87%(+0.04%) 44.85%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Regression 1 regression
                 Current
#8051
     Baseline
#8029
No change  IMG 145.76KiB 145.76KiB
Regression  Other 90.75KiB (+0.83%) 90.01KiB

Bundle analysis reportBranch Yradex:wt/run-on-background-reta...Project dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci Bot commented May 9, 2026

React MTF Example

#1182 Bundle Size — 207.41KiB (+0.39%).

4e36350(current) vs 33b124f main#1160(baseline)

Bundle metrics  Change 2 changes
                 Current
#1182
     Baseline
#1160
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
Change  Cache Invalidation 46.16% 0%
No change  Chunks 0 0
No change  Assets 3 3
No change  Modules 192 192
No change  Duplicate Modules 77 77
Change  Duplicate Code 44.38%(+0.05%) 44.36%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Regression 1 regression
                 Current
#1182
     Baseline
#1160
No change  IMG 111.23KiB 111.23KiB
Regression  Other 96.18KiB (+0.85%) 95.37KiB

Bundle analysis reportBranch Yradex:wt/run-on-background-reta...Project dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci Bot commented May 9, 2026

React Example with Element Template

#317 Bundle Size — 197.79KiB (0%).

4e36350(current) vs 33b124f main#295(baseline)

Bundle metrics  Change 2 changes
                 Current
#317
     Baseline
#295
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
No change  Cache Invalidation 0% 0%
No change  Chunks 0 0
No change  Assets 4 4
Change  Modules 79(-2.47%) 81
No change  Duplicate Modules 23 23
Change  Duplicate Code 40.33%(+0.1%) 40.29%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  no changes
                 Current
#317
     Baseline
#295
No change  IMG 145.76KiB 145.76KiB
No change  Other 52.03KiB 52.03KiB

Bundle analysis reportBranch Yradex:wt/run-on-background-reta...Project dashboard


Generated by RelativeCIDocumentationReport issue

@Yradex Yradex force-pushed the wt/run-on-background-retain-offscreen branch from 2f66ca4 to 4e36350 Compare May 9, 2026 14:07
@Yradex Yradex marked this pull request as ready for review May 12, 2026 03:30
@Yradex Yradex requested review from HuJean and hzy as code owners May 12, 2026 03:30
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4e36350ca3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/react/runtime/src/worklet-runtime/jsFunctionLifecycle.ts
Comment thread packages/react/runtime/src/snapshot/snapshot/gesture.ts
Comment thread packages/react/runtime/src/worklet-runtime/jsFunctionLifecycle.ts
@Yradex Yradex merged commit 1e1257e into lynx-family:main May 12, 2026
74 of 77 checks passed
@Yradex Yradex deleted the wt/run-on-background-retain-offscreen branch May 12, 2026 09:34
colinaaa pushed a commit that referenced this pull request May 18, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @lynx-js/autolink-codegen@0.1.0

### Minor Changes

- Add the Native Autolink codegen package.
([#2601](#2601))

## create-lynx-extension@0.1.0

### Minor Changes

- Add the Native Autolink create-extension package.
([#2587](#2587))

### Patch Changes

- Use published package versions for scaffolded autolink codegen
dependencies instead of workspace placeholders.
([#2628](#2628))

- Fix npm bin symlink entrypoint detection for the create extension CLI.
([#2623](#2623))

## @lynx-js/react@0.121.0

### Minor Changes

- Support `React.createElement(type, props, children)` API.
([#2360](#2360))

    ```jsx
    React.createElement("view", { style }, <text>hello</text>);
    // equivalent to
    <view style={style}>
      <text>hello</text>
    </view>;

    React.createElement(MyComponent, { style }, <view />);
    // equivalent to
    <MyComponent style={style}>
      <view />
    </MyComponent>;
    ```

### Patch Changes

- Clear transient snapshot child props when removed snapshot subtrees
are detached, preventing compiled `$*` child references from retaining
deleted list holder or list item subtrees after removal.
([#2590](#2590))

- Add `createPortal` for rendering a subtree into a different ReactLynx
element identified by a `NodesRef`.
([#2543](#2543))

    ```tsx
    function App() {
      const [host, setHost] = useState(null);
      return (
        <view>
          <view ref={setHost} />
          {host && createPortal(<text>hi</text>, host)}
        </view>
      );
    }
    ```

- Default `fireEvent` to `bubbles: true` for the TouchEvent family in
testing-library to match Lynx runtime semantics, and stop reassigning
the read-only `Event.prototype` accessors which threw `TypeError` in
strict mode.
([#2532](#2532))

- Set `bundle-url` on lazy bundle border elements.
([#2537](#2537))

- Stop warning when `runWorklet` receives an invalid or missing
main-thread function object. Invalid worklet contexts are still ignored,
but nullish handler values no longer produce noisy `MainThreadFunction:
Invalid function object` console output.
([#2586](#2586))

- Retain main-thread worklet context references before offscreen
snapshot elements are materialized, so event, ref, gesture, and spread
callbacks stay alive until the DOM update path can attach them.
([#2592](#2592))

- Update the @lynx-js/tasm dependency to 0.0.39 and align React template
attribute descriptors with it.
([#2643](#2643))

- Avoid retaining transformed nested worklet contexts after worklet
transformation.
([#2591](#2591))

Nested worklets transformed by the worklet runtime now keep their
context recovery metadata through a weak reference, preventing cached
transformed worklet functions from keeping list-item worklet contexts
alive.

## @lynx-js/docs-mcp-server@0.2.3

### Patch Changes

- fix(docs-mcp): recursively crawl and register nested llms.txt
resources ([#2317](#2317))

## @lynx-js/rspeedy@0.14.4

### Patch Changes

- feat(qrcode): support get entry from api exposed from
rspeedy.env.entries
([#2551](#2551))

- Updated dependencies
\[[`ad1f90f`](ad1f90f)]:
    -   @lynx-js/chunk-loading-webpack-plugin@0.3.4
    -   @lynx-js/web-rsbuild-server-middleware@0.20.4
    -   @lynx-js/cache-events-webpack-plugin@0.0.3

## @lynx-js/lynx-bundle-rslib-config@0.3.3

### Patch Changes

- Update the @lynx-js/tasm dependency to 0.0.39 and align React template
attribute descriptors with it.
([#2643](#2643))

## @lynx-js/qrcode-rsbuild-plugin@0.4.7

### Patch Changes

- feat(qrcode): support get entry from api exposed from
rspeedy.env.entries
([#2551](#2551))

## @lynx-js/react-rsbuild-plugin@0.16.2

### Patch Changes

- Updated dependencies
\[[`3e627b3`](3e627b3),
[`7b8d63c`](7b8d63c),
[`13a0776`](13a0776),
[`a973c54`](a973c54),
[`353b1b7`](353b1b7)]:
    -   @lynx-js/template-webpack-plugin@0.11.1
    -   @lynx-js/react-refresh-webpack-plugin@0.3.6
    -   @lynx-js/react-alias-rsbuild-plugin@0.16.2
    -   @lynx-js/use-sync-external-store@1.5.0
    -   @lynx-js/react-webpack-plugin@0.9.2
    -   @lynx-js/css-extract-webpack-plugin@0.7.1

## @lynx-js/web-core@0.20.4

### Patch Changes

- Always clone touch event lists when creating cross-thread events so
synthetic touch events only carry structured-clone-safe primitive
fields. ([#2636](#2636))

- Conditionally pass Card and Component params based on cardType in
background thread.
([#2610](#2610))

- Add bidirectional decode worker heartbreak liveness messages.
([#2599](#2599))

- Add web support for the `<frame>` element by mapping it to
`<lynx-view>`.
([#2604](#2604))

- Stop redeclaring `fetch` as a chunk-scope binding. Reusing the host
([#2562](#2562))
`window.fetch` from BTS chunks (instead of capturing the no-op stub the
    chunk wrapper used to install) lets the renderer issue real network
    requests.

- Updated dependencies
\[[`c1db603`](c1db603)]:
    -   @lynx-js/web-elements@0.12.2
    -   @lynx-js/web-worker-rpc@0.20.4

## @lynx-js/web-elements@0.12.2

### Patch Changes

- fix: xmarkdown create img incorrectly
([#2540](#2540))

## @lynx-js/chunk-loading-webpack-plugin@0.3.4

### Patch Changes

- Override `__webpack_require__.e` so a single sync-then chunk load (the
([#2597](#2597))
typical lazy bundle case) bypasses `Promise.all`. It will make first
screen
in main thread can load lazy bundle synchronously when using dynamic
import.

## @lynx-js/react-refresh-webpack-plugin@0.3.6

### Patch Changes

- Widen `@lynx-js/react-webpack-plugin` peer range to include `^0.9.0`.
([#2626](#2626))

## @lynx-js/template-webpack-plugin@0.11.1

### Patch Changes

- feat(web): enable web binary template by default
([#2545](#2545))

The default encoding format for the web platform template has been
changed from JSON to Binary.

    **Benefits for developers:**

- **Smaller output size:** Binary templates are more compact than JSON
strings, reducing the final bundle size.
- **Faster load performance:** Binary templates parse faster than JSON
in the runtime, improving the time-to-interactive for web applications.

    **How to turn off this feature:**
If you encounter any issues with the new binary template format, you can
revert to the previous JSON format by setting the environment variable
`EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE` to `'false'` or `'0'` before
running your build commands. For example:
    `EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE=false rspeedy build`

**Upgrade to `@lynx-js/web-core@0.20.2` could support the new output
format**

See [`@lynx-js/web-core`
Changelog](https://lynx-stack.dev/changelog/lynx-js--web-core)

- Run TASM template encoding in a shared `tinypool` worker pool so
multi-entry builds encode in parallel and watch-mode rebuilds reuse warm
workers. ([#2634](#2634))

- Make `LynxTemplatePlugin.getLynxTemplatePluginHooks` a cross-module
singleton so duplicate copies of this package (e.g. from npm hoist
conflicts) share the same hooks per compilation.
([#2624](#2624))

- Update the @lynx-js/tasm dependency to 0.0.39 and align React template
attribute descriptors with it.
([#2643](#2643))

- Updated dependencies
\[[`ee79eff`](ee79eff),
[`ded4de9`](ded4de9),
[`cf01e94`](cf01e94),
[`b989c1c`](b989c1c),
[`8417e68`](8417e68)]:
    -   @lynx-js/web-core@0.20.4

## @lynx-js/react-umd@0.121.0



## create-rspeedy@0.14.4



## @lynx-js/react-alias-rsbuild-plugin@0.16.2



## upgrade-rspeedy@0.14.4



## @lynx-js/web-rsbuild-server-middleware@0.20.4



## @lynx-js/web-worker-rpc@0.20.4

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants