Skip to content

Enhance Web Worker federation runtime support#4116

Closed
ScriptedAlchemy wants to merge 96 commits intomainfrom
research/issue-4085
Closed

Enhance Web Worker federation runtime support#4116
ScriptedAlchemy wants to merge 96 commits intomainfrom
research/issue-4085

Conversation

@ScriptedAlchemy
Copy link
Member

@ScriptedAlchemy ScriptedAlchemy commented Oct 4, 2025

Summary

  • ensure async entrypoints such as Web Workers receive dedicated runtime chunks with the required federation helpers
  • harden remote runtime initialization so dynamically created runtimes do not crash when helpers are missing
  • document the worker demo updates and sync related tests, samples, and release notes

Verification

Resolves #4085.

- reassign non-initial entrypoints to their own runtime when runtimeChunk is single or object form
- add worker demo and cypress assertion covering the web worker bootstrap
@changeset-bot
Copy link

changeset-bot bot commented Oct 4, 2025

🦋 Changeset detected

Latest commit: 823e301

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

This PR includes changesets to release 41 packages
Name Type
@module-federation/enhanced Patch
@module-federation/modern-js-v3 Patch
@module-federation/modern-js Patch
@module-federation/nextjs-mf Patch
@module-federation/node Patch
@module-federation/rsbuild-plugin Patch
@module-federation/rspress-plugin Patch
@module-federation/storybook-addon Patch
shared-tree-shaking-no-server-host Patch
shared-tree-shaking-no-server-provider Patch
shared-tree-shaking-with-server-host Patch
shared-tree-shaking-with-server-provider Patch
remote5 Patch
remote6 Patch
website-new Patch
@module-federation/runtime Patch
@module-federation/rspack Patch
@module-federation/webpack-bundler-runtime Patch
@module-federation/sdk Patch
@module-federation/runtime-tools Patch
@module-federation/managers Patch
@module-federation/manifest Patch
@module-federation/dts-plugin Patch
@module-federation/third-party-dts-extractor Patch
@module-federation/devtools Patch
@module-federation/bridge-react Patch
@module-federation/bridge-vue3 Patch
@module-federation/bridge-shared Patch
@module-federation/bridge-react-webpack-plugin Patch
@module-federation/retry-plugin Patch
@module-federation/data-prefetch Patch
@module-federation/error-codes Patch
@module-federation/inject-external-runtime-core-plugin Patch
@module-federation/runtime-core Patch
create-module-federation Patch
@module-federation/cli Patch
@module-federation/metro Patch
@module-federation/metro-plugin-rnef Patch
@module-federation/metro-plugin-rnc-cli Patch
@module-federation/esbuild Patch
@module-federation/utilities 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

@netlify
Copy link

netlify bot commented Oct 4, 2025

Deploy Preview for module-federation-docs ready!

Name Link
🔨 Latest commit 823e301
🔍 Latest deploy log https://app.netlify.com/projects/module-federation-docs/deploys/6986e7c23b9155000851bd2e
😎 Deploy Preview https://deploy-preview-4116--module-federation-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ScriptedAlchemy
Copy link
Member Author

@codex harshly review the changes here. not completly happy with the solutions applied here. do lots of research and give review comments

@chatgpt-codex-connector
Copy link

Summary

  • Added REVIEW.md capturing three blocking concerns: the async runtime detection still ignores manually shared runtimes, runtime naming becomes non-deterministic for anonymous workers, and the remote loader now silently no-ops without the bundler runtime. REVIEW.mdL5-L12
  • Noted the remaining duplication TODO in the worker runtime test suite so it doesn’t get locked in as the expected behaviour. REVIEW.mdL14-L16

Testing

  • ⚠️ not run (review-only change)

View task →

@ScriptedAlchemy
Copy link
Member Author

@codex harshly review pr

@chatgpt-codex-connector
Copy link

Summary

  • Added REVIEW.md outlining three blocking regressions introduced by the worker runtime changes (manual shared runtimes still break, anonymous runtime naming is non-deterministic, and remote loading now silently no-ops without the bundler runtime) plus a reminder to address the duplicated worker test fixture. REVIEW.mdL1-L17

Testing

  • ⚠️ not run (documentation-only change)

View task →

@ogonkov
Copy link
Contributor

ogonkov commented Oct 6, 2025

@ScriptedAlchemy this will fix any references to modules via new URL(..., import.meta.url) syntax?

I'm asked because we use custom Worker constructor :/

@ScriptedAlchemy
Copy link
Member Author

Any chance you can send a PR or branch and modify one of our apps in /apps to replicate your needs so I can run against that app within this monorepo

ScriptedAlchemy and others added 8 commits October 6, 2025 15:52
- Add comprehensive test for webpack worker compilation with Module Federation
- Test verifies worker syntax new Worker(new URL()) compiles correctly
- Validates federated modules (React, ComponentA) are accessible in worker context
- Tests both CommonJS (async-node) and ESM (node14) module outputs
- Provides URL to test scope via moduleScope for Node.js targets
- All 10 tests pass successfully (5 tests × 2 builds)
Added beforeEach hook to reset React version to '0.1.2' before running worker tests.
This prevents test contamination from other container tests (like 1-container-full)
that set React version to '3.2.1' and cause the worker test to fail with unexpected
version mismatches.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
… cross-context relocation

Enhanced runtime chunk detection and federation runtime injection to properly support worker
threads. Added safeguards to prevent runtime module relocation between different execution
contexts (main thread vs workers).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…ker demo

- Enable runtimeChunk in webpack config to ensure bundler runtime is available
- Update WorkerDemo to use WorkerWrapper instead of module worker
- This fixes the 'bundler runtime is required to load remote chunk' error in workers
@ScriptedAlchemy
Copy link
Member Author

@codex review pr deeply

@chatgpt-codex-connector
Copy link

Codex Review: Didn't find any major issues. 👍

ℹ️ 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

@ScriptedAlchemy ScriptedAlchemy changed the title Fix worker runtime chunk regressing web worker builds Enhance Web Worker federation runtime support Oct 21, 2025
ScriptedAlchemy and others added 7 commits October 21, 2025 15:39
Remove RUNTIME_INIT_FIX.md as it's internal documentation that
shouldn't be in the codebase. The changeset documentation is
sufficient for release notes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Adds defensive checks for bundlerRuntime existence before calling
remotes() in RemoteRuntimeModule. This prevents TypeError when HMR
chunks (like react-refresh-webpack-plugin vendors) are loaded that
don't have the federation runtime injected.

Fixes blob-based worker HMR scenario reported in issue #4085 where
bundlerRuntime.remotes would be undefined in dynamically loaded chunks.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Removes the id-token: write permission requirement that was causing
workflow validation errors due to permission restrictions in called
workflows.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@ogonkov
Copy link
Contributor

ogonkov commented Dec 9, 2025

@ScriptedAlchemy we've tried test package in production for some time, it seems work well, do you have plans to finish this PR?

@IO-an
Copy link

IO-an commented Jan 28, 2026

Hi @ScriptedAlchemy,

I'm reaching out to ask about the status and next steps for merging this PR. Our project relies on the Web Worker fixes in this PR, so we're eager to see it land in main.

From my read of the PR and comments:
- It looks like it solves the core issue (#4085) and has been tested successfully in production (as mentioned by @ogonkov).
- The REVIEW.md file lists a few blocking items (async runtime detection, runtime naming, remote loader behavior).
- The Codex review didn't flag major issues.

Could you share:
- What’s needed to resolve the remaining REVIEW.md items?
- Is there a rough timeline or milestone for merging this?
- Can we help with testing, documentation, or specific changes to move this forward?

It would be great to prioritize this, as it unblocks projects using federation with Web Workers. Let us know how we can help.

Thanks for your work on this!

@mfyodorov
Copy link

This feature is important for us too. If there’s anything we can do to help move it forward (testing, reviews, changes), we’d be happy to assist.

# Conflicts:
#	packages/enhanced/jest.config.ts
#	packages/enhanced/jest.embed.ts
#	packages/enhanced/test/compiler-unit/container/HoistContainerReferencesPlugin.test.ts
@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2026

Bundle Size Report

4 package(s) changed, 32 unchanged.

Package Total dist Delta ESM gzip Delta
webpack-bundler-runtime 76.5 kB +2.5 kB (+3.3%) 5.9 kB +49 B (+0.8%)
enhanced 1.29 MB +937 B (+0.1%) 744 B no change
managers 39.3 kB +482 B (+1.2%) 3.4 kB +28 B (+0.8%)
runtime 15.6 kB +196 B (+1.2%) 769 B +11 B (+1.5%)

Total dist: 4.96 MB (+4.0 kB (+0.1%))
Total ESM gzip: 154.7 kB (+88 B (+0.1%))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Build with WebWorkers seems broken

4 participants