Schematics
The Angular adapter's schematics: init/ng-add, appbuilder, update-v4, update22, update18 and remove — plus the Nx generator.
The adapter ships a small collection of schematics for the Angular CLI (and an Nx generator). They scaffold projects, migrate older setups forward, and tear federation back out cleanly when you no longer need it.
The commands below use the Angular 22 package name @angular-architects/native-federation. On Angular 20/21 the same schematics ship under @angular-architects/native-federation-v4 — substitute -v4 in the command. The exception is update-v4, which lives in the -v4 package because it produces a pre-22 v4 setup.
On this page
- init / ng-add
- appbuilder
- update-v4
- update22 (Angular 22)
- update18 (auto migration)
- remove
- Nx generator
init / ng-add
ng add @angular-architects/native-federation \
--project <name> --port <port> --type <remote|host|dynamic-host>
Initializes a project for Native Federation. ng add and ng g …:init both run the same factory.
Inputs
| Option | Type | Description |
|---|---|---|
--project | string | Project name from angular.json. Falls back to the workspace's defaultProject, then to the first project. |
--port | number | Dev server port. Defaults to 4200. Also used as the SSR port for hosts. |
--type | 'host' | 'dynamic-host' | 'remote' | Defaults to remote. Determines the shape of the generated main.ts. |
What it changes
-
Polyfills. Adds
es-module-shimsto the polyfills array (or to apolyfills.tsfile). -
Federation config. Generates
projects/<name>/federation.config.mjsfrom a template — for remotes, the project'sapp.component.tsis auto-detected and exposed as./Component. The template enablesdenseChunkingand adds an@angular/coreoverride withincludeSecondaries: { keepAll: true }. Skipped if a config already exists. -
tsconfig. Generates
projects/<name>/tsconfig.federation.json— extends the project'stsconfig.json, narrowstypesto[], and only includessrc/**/*.tsminus specs. -
angular.json. Switches the existing build to
@angular/build:application(if it isn't already), renames it toesbuild, renames the existing serve toserve-original, and slots the@angular-architects/native-federation:buildbuilder intobuild+serve. See the angular.json layout. -
main.ts split. Moves your existing
main.tstobootstrap.tsand rewritesmain.tsto callinitFederation(...)first, then dynamicallyimport('./bootstrap'). The first argument depends on--type:remote→{ '<project>': './remoteEntry.json' }host→ an inline remote map derived from the workspace's other projectsdynamic-host→ the path to a generatedfederation.manifest.json
On v4 the schematic emits the orchestrator bootstrap (
@softarc/native-federation-orchestrator) by default —initFederation(<arg>, { ...useShimImportMap({ shimMode: true }), logger: consoleLogger, storage: globalThisStorageEntry, hostRemoteEntry: './remoteEntry.json', logLevel: 'debug' }). See Runtime. -
SSR. If the project has SSR enabled (
build.options.ssr.entryis set), the schematic setsssr: trueon the federationbuildtarget, addsapp.use(cors())to the generatedserver.ts, switchesRenderMode.Prerender→RenderMode.Serverinapp.routes.server.ts, and forcessecurity.allowedHosts: ['localhost']on theesbuildtarget. It does not splitmain.server.ts, emit anfstart.mjs, or add@softarc/native-federation-node— on v4 the server-side loader is registered at launch by thenode --import @angular-architects/native-federation/node-preload …preload, which wires the orchestrator's/nodeentry. The orchestrator is added as a runtime (not dev) dependency for SSR projects. You still set the prod start command to use the preload yourself. See SSR & Hydration. -
federation.manifest.json. For dynamic hosts, generates a manifest file. It lives in
public/federation.manifest.jsonif the project has apublic/folder, elsesrc/assets/federation.manifest.json. -
Dependencies. Adds
es-module-shims,@angular-devkit/build-angularand@softarc/native-federation-orchestrator— the orchestrator as a devDependency for browser-only projects, or a runtime dependency (pluscors) for SSR projects. Triggersnpm installat the end.
What it does NOT do
- It does not add lazy routes to your shell — wire
loadRemoteModulein yourapp.routes.tsmanually (see Getting Started → step 4). - It does not change your application code; only the bootstrap files (
main.ts) and, for SSR, the generatedserver.ts/app.routes.server.tsare touched.
appbuilder
ng g @angular-architects/native-federation:appbuilder --project <name>
Migrates a project from the legacy @angular-devkit/build-angular:browser-esbuild to the modern @angular/build:application Application Builder. Required to use any version of the adapter from 17.1 onward.
It only touches angular.json:
- Switches the
esbuildtarget's builder to@angular/build:application. - Renames the
mainoption tobrowser(the new builder's spelling). - Rewrites the
serve-originaltarget'sbuildTargetvalues from:build:to:esbuild:, and the federationservetarget from:esbuild:back to:serve-original:.
update-v4
ng g @angular-architects/native-federation-v4:update-v4 [--project <name>]
Migrates a v3 project (CommonJS, legacy runtime) to v4 (full ESM) on the -v4 package — the right path when you adopt v4 on Angular 20/21. --project is optional — omit it to migrate every project in the workspace. The schematic is also wired into ng update's migration collection, so ng update picks it up automatically when you bump to a v4 release.
On Angular 22? Don't run update-v4. The package is back to @angular-architects/native-federation, and the update22 migration handles the move for you — including swapping any -v4 imports back to the base package.
It performs three changes:
- Renames every
@angular-architects/native-federation:buildreference inangular.jsonto@angular-architects/native-federation-v4:build; ensures every federation target hasentryPoints(defaulting to<sourceRoot>/main.ts) andprojectNameset. - For every project's
federation.config.js: rewrites from CommonJS to ESM (require()→import,module.exports = ...→export default ...), swaps@angular-architects/native-federationimports for@angular-architects/native-federation-v4, and renames the file tofederation.config.mjs. - Updates
main.tsimports from@angular-architects/native-federationto@angular-architects/native-federation-v4. Because the v4 adapter'sinitFederationbridges to the orchestrator, your migrated project runs on the orchestrator runtime without further changes.
The schematic does not rewrite your bootstrap onto the orchestrator's own API or change the shape of the initFederation call. If you'd rather call @softarc/native-federation-orchestrator directly — for the destructured loadRemoteModule and full control over its options — do it by hand; see Migration to v4 → Switch to the Orchestrator.
Not touched by this schematic: the v4 runtime/core package versions in the root package.json — those are workspace-level concerns handled by ng update itself. You do not need to add "type": "module"; the renamed federation.config.mjs is enough. See Migration to v4 for the full walkthrough.
update22 (Angular 22)
ng update @angular-architects/native-federation
The migration to Angular 22. From Angular 22 the v4 adapter is published under its original name @angular-architects/native-federation (22.x), so this is the schematic you run to move a v4 project (on the -v4 package) — or a v3 project — onto the Angular 22 release. ng update pulls the new package and runs the bundled update22 migration, which rewrites your setup to the v22 ESM standard automatically: it swaps @angular-architects/native-federation-v4 imports and angular.json builder references back to @angular-architects/native-federation, and renames federation.config.js to federation.config.mjs if you haven't already.
If you already pulled the package yourself (e.g. npm install @angular-architects/native-federation@22), run the migration on its own in migrate-only mode:
ng update @angular-architects/native-federation --migrate-only update22
The schematic is enough on its own — you do not need to set "type": "module" in package.json. The ESM config lives in federation.config.mjs, which Node treats as ESM regardless of the package-wide setting. See Migration to v4 → Updating to Angular 22 for the full walkthrough.
update18 (auto migration)
Legacy migration that shipped on the v3 line. Triggered automatically by ng update @angular-architects/native-federation when crossing version 18. It:
- Removes the obsolete
postinstallhook that earlier versions injected intopackage.json. - Patches
node_modules/@angular/build/package.jsonto expose theprivateentry point the adapter needs.
You don't run this one by hand — it's listed here for completeness.
remove
ng g @angular-architects/native-federation:remove --project <name>
Reverts a project back to a plain Angular setup:
- Removes
es-module-shimsfrom polyfills. - Restores the original
buildfrom theesbuildtarget and the originalservefromserve-original. - Rewrites
buildTargetreferences back from:esbuild:to:build:. - Removes
main.tsand renamesbootstrap.tsback tomain.ts.
The schematic does not delete federation.config.mjs or tsconfig.federation.json — clean those up by hand.
Nx Generator
nx g @angular-architects/native-federation:native-federation --name=<name>
Adds a new Nx library project pre-wired to the federation builder. It registers the project, scaffolds a starter src/index.ts, and creates a build target executor pointing at @angular-architects/native-federation:build.
| Option | Description |
|---|---|
--name | Library name. Required. |
--directory | Optional sub-directory under libs/. |
--tags | Comma-separated Nx project tags. |
For application-shaped Nx projects, prefer ng add / nx g @angular-architects/native-federation:init — the library generator is for shared, federation-aware code.
Related
- Getting Started — the happy path that uses these schematics.
- Builder — what the
angular.jsonthe schematic generates actually does. - Migration to v4 — manual migration walkthrough complementing
update-v4.