Orchestrator

A runtime micro-frontend orchestrator that loads Native Federation remotes into any web page, with advanced dependency resolution and cross-reload caching.

Fully compatible with v3 and v4. The orchestrator package ships with Native Federation v4, but v3 and v4 share the same runtime contract (remoteEntry.json), so it loads v3 and v4 remotes side by side.

The Orchestrator — @softarc/native-federation-orchestrator — is the next-generation browser runtime for Native Federation. It replaces the classic Runtime (@softarc/native-federation-runtime) as the way to load remotes on the host, whether the host is a SPA, a plain HTML page, or a server-rendered application (PHP, Rails, Java, …).

What makes it different

Compared to the classic runtime, the orchestrator adds five things:

The orchestrator stays fully compatible with the Native Federation ecosystem — any remote built with @softarc/native-federation (v3 or v4) that emits a standard remoteEntry.json can be loaded by it.

SSR

On v4 the Orchestrator runs server-side too, so remote modules execute during SSR itself — not just client-side after the page arrives. The /node entry installs a module.register() loader hook and bridges the host's shared singletons (hostInstances) so a remote's @angular/core resolves to the host's single instance. For Angular, the adapter's node-preload wires this for you — see Angular Adapter → SSR & Hydration. For the general picture see SSR & Hydration.

On v3 the Orchestrator was browser-only; a server-rendered host worked but loaded its remotes client-side after the page arrived. True SSR execution is a v4 capability via the /node entry.

New to Native Federation? Start with the Architecture Overview and Mental Model. For a focused comparison between the Orchestrator and the deprecated Classic Runtime — semver resolution, caching, what changes when you move across — see v3 vs v4.

In this section

Legacy Runtime

The classic runtime — @softarc/native-federation-runtime — was Native Federation's original browser runtime: one version of each shared dependency per scope, no semver resolution, no persistent caching. It shipped through v3 and v4 (up to 4.1.2) and is now deprecated and end-of-life on npm, with the Orchestrator named as its replacement. Existing installs keep working — same remoteEntry.json contract — but there will be no further fixes or features.

Its API pages live in the v3 docs rather than here: they document an initFederation / loadRemoteModule pair close enough to the Orchestrator's to be mistaken for it. Legacy Runtime is what remains in this tree — a summary of the gaps that motivated the Orchestrator. To move off, see Migration to v4 and v3 vs v4.

Example repositories