Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
74fedd5
chore(rsc-demo): runtime client ref discovery + MF manifest data
ScriptedAlchemy Nov 27, 2025
7ed1dcf
docs: add Option2Plan for MF-native actions
ScriptedAlchemy Nov 27, 2025
f9b51f0
chore: restore app2 action fallback (revert accidental removal)
ScriptedAlchemy Nov 27, 2025
0f3acfe
docs: enrich Option2 plan with runtime/manifest details
ScriptedAlchemy Nov 27, 2025
2181f26
chore: drop manual manifest merge (runtime is source of truth)
ScriptedAlchemy Nov 27, 2025
02520cd
fix(rsc-demo): export server MF container and merge remote manifest
ScriptedAlchemy Nov 27, 2025
f2b56b8
chore: enforce async-node + MF node runtime on server builds
ScriptedAlchemy Nov 27, 2025
a594dbb
fix(rsc-demo): http mf metadata and context guards
ScriptedAlchemy Nov 27, 2025
9644619
feat(rsc-demo): eager server action registration and share scope fixes
ScriptedAlchemy Dec 2, 2025
125fbf5
fix(rsc-demo): server action registry singleton and test improvements
ScriptedAlchemy Dec 2, 2025
baccd46
fix(rsc-demo): remove skips from HTTP forwarding tests
ScriptedAlchemy Dec 2, 2025
dbd2c15
fix(rsc-demo): http forwarding and test reliability improvements
ScriptedAlchemy Dec 2, 2025
b816818
Merge remote-tracking branch 'origin/main' into rsc-demo
ScriptedAlchemy Dec 2, 2025
e55c0b2
fix(rsc-demo): address CodeQL security alerts
ScriptedAlchemy Dec 2, 2025
74f73f8
fix(rsc-demo): address remaining CodeQL format string alerts
ScriptedAlchemy Dec 2, 2025
8ab0371
fix(rsc-demo): downgrade jsdom to 24.x for Node 18 compatibility
ScriptedAlchemy Dec 2, 2025
fa2ff3e
fix(rsc-demo): make timer sanitization explicit for CodeQL
ScriptedAlchemy Dec 2, 2025
38ca8e7
chore(rsc-demo): remove notes/.gitkeep
ScriptedAlchemy Dec 2, 2025
eeb2841
chore(rsc-demo): remove notes directory
ScriptedAlchemy Dec 2, 2025
2a29f94
chore(rsc-demo): remove debug plugin and fix flaky tests
ScriptedAlchemy Dec 2, 2025
6d9c0d1
fix(rsc-demo): fix SSR module resolution and test stability
ScriptedAlchemy Dec 3, 2025
f2e4218
chore: auto-include client refs for SSR and fix resolver
ScriptedAlchemy Dec 5, 2025
2de6c9b
chore(rsc-demo): preserve actual export names in SSR module map
ScriptedAlchemy Dec 5, 2025
a31a374
ci: add RSC E2E workflow for rsc-demo
ScriptedAlchemy Dec 5, 2025
76756e5
fix(rsc-demo): use dynamic paths in client-refs tests for CI
ScriptedAlchemy Dec 5, 2025
6459f6e
fix(rsc-demo): address CodeQL alerts and add missing deps
ScriptedAlchemy Dec 6, 2025
495f038
fix(rsc-demo): make SSR deterministic and e2e reliable
ScriptedAlchemy Dec 16, 2025
8459797
fix(rsc-demo): remove SSR fallbacks and fix e2e CI
ScriptedAlchemy Dec 16, 2025
807993e
docs(rsc-demo): clarify SSR resolver behavior
ScriptedAlchemy Dec 16, 2025
e1a2bd0
fix(rsc-demo): remove post-build SSR manifest patches
ScriptedAlchemy Dec 16, 2025
b4ca2bc
fix(rsc-demo): stop mutating ssr.js post-build
ScriptedAlchemy Dec 16, 2025
0d93848
fix(rsc-demo): remove global webpack require shim
ScriptedAlchemy Dec 16, 2025
e96c226
ci(rsc-demo): verify mf-manifest SSR registry
ScriptedAlchemy Dec 16, 2025
42dcf74
feat(rsc-demo): declarative manifest.rsc config replaces additionalDa…
ScriptedAlchemy Dec 17, 2025
9c5eae4
Merge branch 'main' into rsc-demo
ScriptedAlchemy Dec 17, 2025
8918c9e
docs(rsc-demo): clarify MF-native server actions as default
ScriptedAlchemy Dec 17, 2025
409482a
fix(rsc-demo): tighten action lookup and drop app2-remote alias
ScriptedAlchemy Dec 17, 2025
1962547
fix(rsc-demo): harden rscRuntimePlugin manifest fetching
ScriptedAlchemy Dec 17, 2025
c0389df
chore: regenerate schema
ScriptedAlchemy Dec 17, 2025
c14dcdc
Revert "chore: regenerate schema"
ScriptedAlchemy Dec 17, 2025
db44238
fix(rsc-demo): manifest remotes + SSR export retention
ScriptedAlchemy Dec 17, 2025
385aba8
fix(enhanced): regenerate schema to remove duplicate rsc key
ScriptedAlchemy Dec 17, 2025
1e27d30
chore(rsc-demo): tighten types + cleanup config
ScriptedAlchemy Dec 17, 2025
814cec9
test(rsc-demo): assert server-side federated RSC
ScriptedAlchemy Dec 17, 2025
2f113f4
fix(rsc-demo): include app1/app2 in build inputs
ScriptedAlchemy Dec 17, 2025
d79253e
fix(rsc-demo): fail hard if remote Button cannot load
ScriptedAlchemy Dec 17, 2025
390ac52
refactor(rsc-demo): move react-server-dom-webpack to packages root
ScriptedAlchemy Dec 17, 2025
798bb54
fix(rsc-demo): resolve react-server-dom-webpack loaders via exports
ScriptedAlchemy Dec 17, 2025
481ce9e
refactor(rsc-demo): reuse AutoIncludeClientComponentsPlugin
ScriptedAlchemy Dec 17, 2025
4e65cdd
docs: document RSC + Module Federation architecture
ScriptedAlchemy Dec 17, 2025
cbf505e
docs: add vendored RSDW diff summary
ScriptedAlchemy Dec 17, 2025
11302e2
docs: add vendored react-server-dom-webpack diffs
ScriptedAlchemy Dec 18, 2025
a985adf
docs: keep functional RSDW diff artifact
ScriptedAlchemy Dec 18, 2025
c28ac83
docs: link to RSC demo architecture
ScriptedAlchemy Dec 18, 2025
14c20c1
test(rsc-demo): offline federation smoke renders remote RSC
ScriptedAlchemy Dec 18, 2025
5af1efd
chore: merge main and resolve lockfile conflict
ScriptedAlchemy Dec 18, 2025
72ffed4
docs(rsc-demo): consolidate RSC+MF implementation guide
ScriptedAlchemy Dec 18, 2025
11d7775
chore(rsc-demo): remove redundant demo legal/config files
ScriptedAlchemy Dec 18, 2025
5eedfb9
style(rsc-demo): format code
ScriptedAlchemy Dec 18, 2025
c553d8a
test(rsc-demo): make build config guard whitespace-safe
ScriptedAlchemy Dec 18, 2025
78ec94a
chore(rsc-demo): replace vendored RSDW with pnpm patch
ScriptedAlchemy Dec 18, 2025
3f1bce0
fix(rsc-demo): fail fast on SSR + doc accuracy
ScriptedAlchemy Dec 19, 2025
0d897f0
chore(rsc-demo): align app2 build config layout
ScriptedAlchemy Dec 19, 2025
c66403f
chore(rsc-demo): remove unused loader options
ScriptedAlchemy Dec 19, 2025
3547545
feat(rsc-demo): auto exposeTypes + bidirectional federation
ScriptedAlchemy Dec 19, 2025
5ea8739
docs: update RSC+MF architecture notes
ScriptedAlchemy Dec 19, 2025
f6b253a
refactor(rsc-demo): manifest-driven remote action bootstrap
ScriptedAlchemy Dec 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@ jobs:
uses: ./.github/workflows/e2e-router.yml
secrets: inherit

e2e-rsc:
needs: checkout-install
uses: ./.github/workflows/e2e-rsc.yml
secrets: inherit

e2e-metro:
permissions:
contents: read
Expand Down
84 changes: 84 additions & 0 deletions .github/workflows/e2e-rsc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# .github/workflows/e2e-rsc.yml
name: E2E RSC Demo

on:
workflow_call:

jobs:
e2e-rsc:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout Repository
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Cache Tool Downloads
uses: actions/cache@v4
with:
path: ~/.cache
key: ${{ runner.os }}-toolcache-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-toolcache-

- name: Set Playwright cache status
run: |
if [ -d "$HOME/.cache/ms-playwright" ] || [ -d "$HOME/.cache/Cypress" ]; then
echo "PLAYWRIGHT_CACHE_HIT=true" >> "$GITHUB_ENV"
else
echo "PLAYWRIGHT_CACHE_HIT=false" >> "$GITHUB_ENV"
fi

- name: Install Pnpm
run: |
corepack prepare pnpm@8.11.0 --activate
corepack enable

- name: Setup Node.js 18
uses: actions/setup-node@v5
with:
node-version: '18'
cache: 'pnpm'

- name: Set Nx SHA
uses: nrwl/nx-set-shas@v3

- name: Set SKIP_DEVTOOLS_POSTINSTALL environment variable
run: echo "SKIP_DEVTOOLS_POSTINSTALL=true" >> "$GITHUB_ENV"

- name: Install Dependencies
run: pnpm install

- name: Install Playwright Browsers
run: pnpm -C apps/rsc-demo/packages/e2e exec playwright install --with-deps chromium

- name: Run Build for All Packages
run: npx nx run-many --targets=build --projects=tag:type:pkg

- name: Build RSC Demo
run: npx nx run rsc-demo:build

- name: Verify SSR Registry Source (MF Manifest)
run: |
echo "Checking mf-manifest.ssr.json additionalData.rsc.clientComponents..."
node -e "const mf=require('./apps/rsc-demo/packages/app1/build/mf-manifest.ssr.json'); const cc=mf?.additionalData?.rsc?.clientComponents||mf?.rsc?.clientComponents||{}; if(!Object.keys(cc).length){console.error('ERROR: app1 mf-manifest.ssr.json missing rsc.clientComponents'); process.exit(1)}"
node -e "const mf=require('./apps/rsc-demo/packages/app2/build/mf-manifest.ssr.json'); const cc=mf?.additionalData?.rsc?.clientComponents||mf?.rsc?.clientComponents||{}; if(!Object.keys(cc).length){console.error('ERROR: app2 mf-manifest.ssr.json missing rsc.clientComponents'); process.exit(1)}"
echo "SSR registry verified via mf-manifest.ssr.json in both apps"

- name: Verify Manifest Files
run: |
echo "Checking manifest files..."
test -f apps/rsc-demo/packages/app1/build/react-client-manifest.json || (echo "ERROR: react-client-manifest.json missing in app1" && exit 1)
test -f apps/rsc-demo/packages/app1/build/react-ssr-manifest.json || (echo "ERROR: react-ssr-manifest.json missing in app1" && exit 1)
test -f apps/rsc-demo/packages/app1/build/react-server-actions-manifest.json || (echo "ERROR: react-server-actions-manifest.json missing in app1" && exit 1)
test -f apps/rsc-demo/packages/app2/build/react-client-manifest.json || (echo "ERROR: react-client-manifest.json missing in app2" && exit 1)
test -f apps/rsc-demo/packages/app2/build/react-ssr-manifest.json || (echo "ERROR: react-ssr-manifest.json missing in app2" && exit 1)
test -f apps/rsc-demo/packages/app2/build/react-server-actions-manifest.json || (echo "ERROR: react-server-actions-manifest.json missing in app2" && exit 1)
echo "All manifest files present"

- name: Run RSC Tests (Node)
run: npx nx run rsc-demo:test:rsc

- name: Run RSC E2E Tests (Playwright)
run: npx nx run rsc-demo:test:e2e
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ You can consider the module federation capabilities provided by this repository

To get started with Module Federation, see the [Quick Start](https://module-federation.io/guide/start/quick-start.html).

## 🧪 React Server Components (RSC) Demo

This repo includes an experimental RSC + Module Federation reference implementation:
- Demo app: `apps/rsc-demo/`
- Architecture notes (with Mermaid diagrams): `RSC_MF_ARCHITECTURE.md`

## 🧑‍💻 Community

Come and chat with us on [Discussions](https://github.com/module-federation/universe/discussions) or [Discord](https://discord.gg/n69NnT3ACV)! The Module federation team and users are active there, and we're always looking for contributions.
Expand Down
Loading