Schematics

Applies to

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.

init / ng-add

ng add @angular-architects/native-federation-v4 \
  --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

  1. Polyfills. Adds es-module-shims to the polyfills array (or to a polyfills.ts file).
  2. Federation config. Generates projects/<name>/federation.config.mjs from a template — for remotes, the project's app.component.ts is auto-detected and exposed as ./Component. The template enables denseChunking and adds an @angular/core override with includeSecondaries: { keepAll: true }. Skipped if a config already exists.
  3. tsconfig. Generates projects/<name>/tsconfig.federation.json — extends the project's tsconfig.json, narrows types to [], and only includes src/**/*.ts minus specs.
  4. angular.json. Switches the existing build to @angular/build:application (if it isn't already), renames it to esbuild, renames the existing serve to serve-original, and slots the @angular-architects/native-federation-v4:build builder into build + serve. See the angular.json layout.
  5. main.ts split. Moves your existing main.ts to bootstrap.ts and rewrites main.ts to call initFederation(...) first, then dynamically import('./bootstrap'). The first argument depends on --type:
    • remote{ '<project>': './remoteEntry.json' }
    • host → an inline remote map derived from the workspace's other projects
    • dynamic-host → the path to a generated federation.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.
  6. SSR. If the project has SSR enabled (build.options.ssr.entry is set), the schematic also rewrites main.server.ts to bootstrap-server.ts + a federation-aware main.server.ts that calls initNodeFederation, and adds cors + @softarc/native-federation-node to dependencies.
  7. federation.manifest.json. For dynamic hosts, generates a manifest file. It lives in public/federation.manifest.json if the project has a public/ folder, else src/assets/federation.manifest.json.
  8. Dependencies. Adds es-module-shims, @angular-devkit/build-angular and @softarc/native-federation-orchestrator (as a devDependency). Triggers npm install at the end.

What it does NOT do

appbuilder

ng g @angular-architects/native-federation-v4: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:

update-v4

ng g @angular-architects/native-federation-v4:update-v4 [--project <name>] [--orchestrator]

Migrates a v3 project (CommonJS, legacy runtime) to v4 (full ESM, optional orchestrator). --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.

It performs:

  1. Renames every @angular-architects/native-federation:build reference in angular.json to @angular-architects/native-federation-v4:build; ensures every federation target has entryPoints (defaulting to <sourceRoot>/main.ts) and projectName set.
  2. For every project's federation.config.js: rewrites from CommonJS to ESM (require()import, module.exports = ...export default ...), swaps @angular-architects/native-federation imports for @angular-architects/native-federation-v4, and renames the file to federation.config.mjs.
  3. Updates main.ts imports from @angular-architects/native-federation to @softarc/native-federation-runtime.

If you pass --orchestrator (or accept the prompt) it additionally:

  1. Adds @softarc/native-federation-orchestrator (^4.0.0) to dependencies.
  2. Surgically rewrites initFederation(...) to import from the orchestrator and pass the orchestrator's options block (useShimImportMap, consoleLogger, globalThisStorageEntry, hostRemoteEntry: './remoteEntry.json', logLevel: 'debug'). The existing first argument (manifest path, remote map, or {}) is preserved.

Not touched by this schematic: the root package.json's "type": "module" and the v4 runtime/core packages — those are workspace-level concerns handled by ng update itself. See Migration to v4 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:

You don't run this one by hand — it's listed here for completeness.

remove

ng g @angular-architects/native-federation-v4:remove --project <name>

Reverts a project back to a plain Angular setup:

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-v4: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-v4: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-v4:init — the library generator is for shared, federation-aware code.

Related