Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
538e38b
fix(devtools): guard invalid module info payloads (#4787)
dmchoi77 Jul 6, 2026
f0ad9b5
feat(i18n): add Brazilian Portuguese localization and documentation (…
DevJoaoLopes Jul 6, 2026
3ee98cd
test: migrate to Rstest (#4871)
chenjiahan Jul 7, 2026
dcc640b
chore(sdk): drop node-fetch fallback and optional peer dependency (#4…
gu-stav Jul 7, 2026
95eb52b
chore: upgrade typescript to 6.0.3 (#4737)
eduard-jacko Jul 7, 2026
11393fa
docs(website-new): add GA4 tracking (#4874)
ScriptedAlchemy Jul 8, 2026
61fe85d
chore(deps): upgrade Rslib, Rsbuild and Rsbuild plugins to latest (#4…
elecmonkey Jul 8, 2026
8c684ef
feat(website): deploy Rspress docs with Zephyr (#4855)
Nsttt Jul 8, 2026
7178677
chore: remove unused jest config (#4875)
2heal1 Jul 8, 2026
88862f6
Release v2.7.0 (#4876)
2heal1 Jul 8, 2026
cef63f9
fix(rsbuild-plugin): force library.type to commonjs-module in patchNo…
elecmonkey Jul 10, 2026
d4da7fb
fix(metro): normalize Windows paths (#4882)
jbroma Jul 10, 2026
2dc9a40
chore(metro): bump Rock to 0.14.1 (#4881)
jbroma Jul 10, 2026
ee85263
fix(ci): support current Rslib bundle API (#4885)
ScriptedAlchemy Jul 10, 2026
37c97f6
chore: bump Node.js to 24 LTS (#4884)
Nsttt Jul 11, 2026
d6a76d8
fix(manifest): preserve ESM remote entry type (#4894)
zackarychapple Jul 14, 2026
a5633f8
fix: support Rspack module identifiers (#4892)
LingyuCoder Jul 14, 2026
dcc96d1
fix: set optimization.usedExports to global to prevent tree shaking i…
2heal1 Jul 14, 2026
681e5d2
feat(dts-plugin): add TypeScript 7 support (#4878)
2heal1 Jul 14, 2026
9331dd8
ci(node): verify published packages on Node 20 (#4888)
2heal1 Jul 14, 2026
7c4ac9f
chore(metro): support TypeScript 7 (#4898)
2heal1 Jul 14, 2026
6ee67dc
perf: slim deps (#4897)
2heal1 Jul 14, 2026
9d386ad
ci(release): show release type in approval (#4904)
ryok90 Jul 14, 2026
f796458
fix(modern-js): set optimization target from ssr config (#4900)
2heal1 Jul 15, 2026
ea490ae
feat(runtime): allow disabling unused capabilities (#4901)
2heal1 Jul 15, 2026
f9f661a
Release v2.8.0 (#4905)
2heal1 Jul 15, 2026
65cdf34
fix(runtime-core): avoid executing ESM remote chunks before init (#4886)
dmchoi77 Jul 15, 2026
727b05d
ci(e2e): gate affected workflows before runner setup (#4864)
ScriptedAlchemy Jul 15, 2026
cbc5170
feat(nextjs-mf): add skipFederatedStats option (#4732)
shashank-u03 Jul 16, 2026
d901e2c
perf(nextjs-mf): derive federated stats from manifest (#4909)
ScriptedAlchemy Jul 17, 2026
c203d59
feat(bridge): add server-rendered bridge islands
tonoizer Jul 18, 2026
f46ac6d
fix(bridge): harden SSR hydration boundaries
tonoizer Jul 18, 2026
4f52759
fix(bridge): hydrate SSR islands from document slots
tonoizer Jul 18, 2026
c3c706d
fix(bridge): harden remote application lifecycles
tonoizer Jul 18, 2026
2c3f1e5
docs(bridge): finalize SSR V1 contract and release metadata
tonoizer Jul 18, 2026
bfa4fb5
fix(bridge): harden SSR V1 identity and lifecycle boundaries
cursoragent Jul 18, 2026
8813e97
fix(bridge): invalidate unconsumed SSR hydration snapshots
tonoizer Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .changeset/bridge-ssr-v1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@module-federation/bridge-shared': minor
'@module-federation/bridge-react': minor
'@module-federation/bridge-vue3': minor
---

add a thin buffered Bridge SSR contract with remote-owned React 18 and Vue 3 rendering, document-slot hydration, identity-only host references, instance-scoped mount markers, and contextual server-render failures
5 changes: 0 additions & 5 deletions .changeset/bright-pots-vanish.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/clean-devtools-graph.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/drop-ansi-colors-dts-plugin.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/drop-lodash-get.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/drop-resolve-extractor.md

This file was deleted.

7 changes: 7 additions & 0 deletions .changeset/fast-manifests-flush.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@module-federation/nextjs-mf': patch
'@module-federation/node': patch
'@module-federation/sdk': patch
---

Use manifest expose assets for Next.js chunk flushing, including aliased remotes, and derive legacy federated stats compatibility assets without an extra Webpack stats traversal.
7 changes: 7 additions & 0 deletions .changeset/fix-runtime-esm-preload.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@module-federation/runtime-core': patch
---

fix(runtime): preload ESM remote chunks with `modulepreload` links instead of
executable module scripts before container initialization. Loader plugins now
observe these implicit ESM preloads through `createLink`.
5 changes: 0 additions & 5 deletions .changeset/fuzzy-pears-play.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/modern-v3-lazy-compilation.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/node-esm-builtin-loader.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/replace-find-pkg-with-empathic.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/small-deps-consolidated.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/tricky-pants-rescue.md

This file was deleted.

2 changes: 1 addition & 1 deletion .codex/skills/local-ci/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,5 +99,5 @@ Use the local CI job if one exists for the workflow's behavior. For workflow syn

- `ci:local` sets `CI=true` and mirrors the repo workflow order.
- Some jobs intentionally skip GitHub-only actions such as `actionlint` and `bundle-size-comment`.
- The repo uses `pnpm`, Node 20, and Turbo as the standard execution path.
- The repo uses `pnpm`, Node 24, and Turbo as the standard execution path.
- In worktrees, still use Turbo/package scripts directly as documented by the repo instructions.
59 changes: 57 additions & 2 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ jobs:
checkout-install:
runs-on: ubuntu-latest
timeout-minutes: 30
outputs:
e2e_suites: ${{ steps.e2e-affected.outputs.e2e_suites }}
steps:
- name: Checkout Repository
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
Expand All @@ -27,16 +29,20 @@ jobs:
- name: Setup pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4

- name: Setup Node.js 20
- name: Setup Node.js 24
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '20'
node-version: '24'
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Evaluate E2E affected suites
id: e2e-affected
run: node tools/scripts/ci-is-affected.mjs --githubOutputAll=e2e_suites

- name: Restore Turborepo cache
id: turbo-cache
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
Expand All @@ -53,6 +59,9 @@ jobs:
- name: Check code format
run: node tools/scripts/check-format-changed.mjs

- name: Test CI affected policy
run: node --test tools/scripts/ci-is-affected.test.mjs

- name: Verify Rslib Template Publint Wiring
run: node packages/create-module-federation/scripts/verify-rslib-templates.mjs

Expand Down Expand Up @@ -85,6 +94,19 @@ jobs:
- name: Run affected package tests
run: node tools/scripts/run-affected-package-tests.mjs

- name: Pack Node.js 20 compatibility artifacts
if: ${{ !startsWith(github.head_ref, 'release-v') }}
run: node tools/scripts/prepare-node20-compat-packages.mjs

- name: Upload Node.js 20 compatibility artifacts
if: ${{ !startsWith(github.head_ref, 'release-v') }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: node20-compat-packages
path: artifacts/node20-compat/*.tgz
if-no-files-found: error
retention-days: 1

- name: Save Turborepo cache
if: ${{ success() && steps.turbo-cache.outputs.cache-hit != 'true' }}
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
Expand All @@ -94,52 +116,85 @@ jobs:

e2e-modern:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).modern }}
uses: ./.github/workflows/e2e-modern.yml
secrets: inherit

node20-compat:
if: ${{ !startsWith(github.head_ref, 'release-v') }}
needs: checkout-install
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout Repository
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5

- name: Setup Node.js 20.19.5
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '20.19.5'

- name: Download Node.js 20 compatibility artifacts
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: node20-compat-packages
path: artifacts/node20-compat

- name: Verify published packages on Node.js 20.19.5
run: node tools/scripts/verify-node20-compat.mjs

e2e-runtime:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).runtime }}
uses: ./.github/workflows/e2e-runtime.yml
secrets: inherit

e2e-manifest:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).manifest }}
uses: ./.github/workflows/e2e-manifest.yml
secrets: inherit

e2e-node:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).node }}
uses: ./.github/workflows/e2e-node.yml
secrets: inherit

e2e-next-dev:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).next }}
uses: ./.github/workflows/e2e-next-dev.yml
secrets: inherit

e2e-next-prod:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).next }}
uses: ./.github/workflows/e2e-next-prod.yml
secrets: inherit

e2e-treeshake:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).treeshake }}
uses: ./.github/workflows/e2e-treeshake.yml
secrets: inherit

e2e-modern-ssr:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).modernSsr }}
uses: ./.github/workflows/e2e-modern-ssr.yml
secrets: inherit

e2e-router:
needs: checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).router }}
uses: ./.github/workflows/e2e-router.yml
secrets: inherit

e2e-metro:
needs:
- checkout-install
if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).metro }}
uses: ./.github/workflows/e2e-metro.yml
secrets: inherit

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bundle-size.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: 20
node-version: 24
cache: pnpm
cache-dependency-path: '**/pnpm-lock.yaml'

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/devtools.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ jobs:
- name: Setup pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4

- name: Setup Node.js 20
- name: Setup Node.js 24
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '20'
node-version: '24'
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'

Expand Down
45 changes: 45 additions & 0 deletions .github/workflows/e2e-bridge-ssr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: E2E Test for Bridge SSR

on:
pull_request:
paths:
- 'packages/bridge/**'
- 'apps/bridge-ssr-demo/**'
- 'tools/scripts/*bridge-ssr*'
- '.github/workflows/e2e-bridge-ssr.yml'
- 'pnpm-lock.yaml'

concurrency:
group: e2e-bridge-ssr-${{ github.ref }}
cancel-in-progress: true

jobs:
rsbuild:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '20'
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm run build:packages
- run: pnpm run e2e:bridge:ssr
- run: pnpm run e2e:bridge:ssr:production

vite-smoke:
runs-on: ubuntu-latest
timeout-minutes: 30
continue-on-error: true
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '20'
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm run build:packages
- run: pnpm run e2e:bridge:ssr:vite-smoke
22 changes: 3 additions & 19 deletions .github/workflows/e2e-manifest.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# .github/workflows/e2e-webpack-host.yml
# .github/workflows/e2e-manifest.yml
name: E2E Test for Manifest

on:
Expand All @@ -17,10 +17,10 @@ jobs:
- name: Setup pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4

- name: Setup Node.js 20
- name: Setup Node.js 24
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '20'
node-version: '24'
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'

Expand All @@ -45,24 +45,8 @@ jobs:
- name: Build shared packages
run: pnpm run build:packages

- name: Check CI conditions
id: check-ci
run: |
ci_status=0
node tools/scripts/ci-is-affected.mjs --appName=3008-webpack-host,3009-webpack-provider,3010-rspack-provider,3011-rspack-manifest-provider,3012-rspack-js-entry-provider || ci_status=$?
if [ "$ci_status" -eq 0 ]; then
echo "run-e2e=true" >> "$GITHUB_OUTPUT"
elif [ "$ci_status" -eq 1 ]; then
echo "run-e2e=false" >> "$GITHUB_OUTPUT"
else
echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2
exit "$ci_status"
fi

- name: E2E Test for Manifest Demo (dev)
if: steps.check-ci.outputs.run-e2e == 'true'
run: pnpm exec turbo run test:e2e --filter=3008-webpack-host

- name: E2E Test for Manifest Demo (prod)
if: steps.check-ci.outputs.run-e2e == 'true'
run: pnpm exec turbo run test:e2e:production --filter=3008-webpack-host
Loading
Loading