Motivation
Re.Pack currently ships two Module Federation implementations side by side: ModuleFederationPluginV1 (built on webpack's/Rspack's native container API) and ModuleFederationPluginV2 (built on @module-federation/enhanced). The generic Repack.plugins.ModuleFederationPlugin export still resolves to V1 and logs a notice on every build stating that the next major will repoint it at V2. v6 is that major.
MF v1 is no longer being iterated on upstream — all Module Federation development happens in the @module-federation/* v2 packages. Carrying both implementations doubles the plugin surface, the documentation, the tester apps and the test matrix, and it blocks a set of cleanups that only make sense once V1 is gone.
Part of #1414 (Roadmap to V6), which already lists MF v2+ as a minimum-version target and "updated docs for MF v2" as a deliverable.
Breaking changes
Repack.plugins.ModuleFederationPlugin starts resolving to the V2 implementation. Configs written against the V1 option shape need migrating.
ModuleFederationPluginV1 is removed.
@module-federation/enhanced effectively becomes a required peer dependency instead of an optional one. V1 needed no extra install; V2 hard-fails without it (ensureModuleFederationPackageInstalled in packages/repack/src/plugins/ModuleFederationPluginV2.ts).
- The build-side
Federated namespace (createRemote, SHARED_REACT, SHARED_REACT_NATIVE in packages/repack/src/utils/federated.ts) is removed — it is only consumed by V1.
Scope
Core
Apps and tests
Docs
Prerequisite
This depends on first bumping @module-federation/enhanced in packages/repack from 0.8.9 to 2.x. That bump is a small standalone change but does have breakage of its own:
FederationRuntimePlugin was renamed to ModuleFederationRuntimePlugin and FederationHost to ModuleFederation, affecting all three runtime plugins in packages/repack/src/modules/FederationRuntimePlugins/
runtimePlugins widened to (string | [string, Record<string, unknown>])[], so adaptRuntimePlugins needs to handle the tuple form — which also unlocks passing options to runtime plugins
- the
jest.mock('@module-federation/enhanced/rspack') automock in ModuleFederationPluginV2.test.ts no longer produces a constructor and needs an explicit factory
As a bonus, moving to @module-federation/enhanced >= 2.4.0 also releases the webpack hold at ~5.105.0 in pnpm-workspace.yaml, which exists solely because older MF versions depend on a webpack internal removed in 5.106.
Motivation
Re.Pack currently ships two Module Federation implementations side by side:
ModuleFederationPluginV1(built on webpack's/Rspack's native container API) andModuleFederationPluginV2(built on@module-federation/enhanced). The genericRepack.plugins.ModuleFederationPluginexport still resolves to V1 and logs a notice on every build stating that the next major will repoint it at V2. v6 is that major.MF v1 is no longer being iterated on upstream — all Module Federation development happens in the
@module-federation/*v2 packages. Carrying both implementations doubles the plugin surface, the documentation, the tester apps and the test matrix, and it blocks a set of cleanups that only make sense once V1 is gone.Part of #1414 (Roadmap to V6), which already lists MF v2+ as a minimum-version target and "updated docs for MF v2" as a deliverable.
Breaking changes
Repack.plugins.ModuleFederationPluginstarts resolving to the V2 implementation. Configs written against the V1 option shape need migrating.ModuleFederationPluginV1is removed.@module-federation/enhancedeffectively becomes a required peer dependency instead of an optional one. V1 needed no extra install; V2 hard-fails without it (ensureModuleFederationPackageInstalledinpackages/repack/src/plugins/ModuleFederationPluginV2.ts).Federatednamespace (createRemote,SHARED_REACT,SHARED_REACT_NATIVEinpackages/repack/src/utils/federated.ts) is removed — it is only consumed by V1.Scope
Core
ModuleFederationPluginat the V2 implementation and drop thebeforeCompiledeprecation notice inpackages/repack/src/plugins/ModuleFederationPlugin.tsModuleFederationPluginV2exported as an alias so existing v5 configs continue to work unchangedpackages/repack/src/plugins/ModuleFederationPluginV1.ts, its export fromplugins/index.ts, and its unit testspackages/repack/src/utils/federated.tsand its re-export fromutils/index.tsFederatednamespace (importModule,createURLResolverinpackages/repack/src/modules/ScriptManager/federated.ts) — superseded by the MF v2 resolver runtime plugin, but it is public API and may be used independently of the build plugin@module-federation/enhancedout ofpeerDependenciesMeta.optionaland raise the peer floor to a 2.x rangeApps and tests
apps/tester-federationto V2, or fold it intoapps/tester-federation-v2and delete it — once both are on V2 they largely duplicate each other, so consolidating into a singletester-federationapp is probably the better outcomewith Module Federation v1case intests/integration/src/plugins/NativeEntryPlugin.test.tsDocs
website/src/latest/api/plugins/module-federation-v1.mdxand renamemodule-federation-v2.mdxtomodule-federation.mdxwebsite/src/latest/docs/features/module-federation.md, which currently just redirects readers to the Re.Pack 4.x docs with a caveat that they are out of datePrerequisite
This depends on first bumping
@module-federation/enhancedinpackages/repackfrom 0.8.9 to 2.x. That bump is a small standalone change but does have breakage of its own:FederationRuntimePluginwas renamed toModuleFederationRuntimePluginandFederationHosttoModuleFederation, affecting all three runtime plugins inpackages/repack/src/modules/FederationRuntimePlugins/runtimePluginswidened to(string | [string, Record<string, unknown>])[], soadaptRuntimePluginsneeds to handle the tuple form — which also unlocks passing options to runtime pluginsjest.mock('@module-federation/enhanced/rspack')automock inModuleFederationPluginV2.test.tsno longer produces a constructor and needs an explicit factoryAs a bonus, moving to
@module-federation/enhanced>= 2.4.0 also releases thewebpackhold at~5.105.0inpnpm-workspace.yaml, which exists solely because older MF versions depend on a webpack internal removed in 5.106.