Skip to content

Cross-Framework Integration

Understanding cross-framework integration helps you work with single-spa confidently. Here you will learn the core ideas behind cross-framework integration, see working code, and pick up best practices used on real teams.

Cross-Framework Integration Overview

Cross-Framework Integration is a building block you will reach for often in single-spa. It keeps related logic together and makes your intent obvious to reviewers and future maintainers.

When you learn cross-framework integration properly, you avoid the guesswork that leads to bugs and rework. The example below shows the shape you will use in most real single-spa projects.

// shared utility module exposed via the import map
export const authService = {
  getToken: () => localStorage.getItem('token'),
};

// consumed by any micro frontend
import { authService } from '@org/utils';

Shared utility modules provide cross-app services like auth without tight coupling.

Cross-Framework Integration Example

registerApplication({
  name: '@org/app',
  app: () => System.import('@org/app'),
  activeWhen: ['/app'],
});
start();
  • Start from a minimal Cross-Framework Integration example and grow it only as needed.
  • Keep configuration explicit so Cross-Framework Integration behaves the same in every environment.
  • Name things clearly so teammates understand your Cross-Framework Integration at a glance.
  • Add tests around Cross-Framework Integration early to lock in expected behaviour.

Single-SPA Cheatsheet

Core single-spa APIs related to cross-framework integration.

API Example Purpose
registerApplication registerApplication({ name, app, activeWhen }) Register a micro frontend
activeWhen activeWhen: ['/checkout'] Route ownership
start start() Begin routing
bootstrap export async function bootstrap() One-time setup
mount export async function mount(props) Render the app
unmount export async function unmount(props) Clean up the app
import map systemjs-importmap Locate app bundles

How Cross-Framework Integration Works in Single-SPA

Cross-Framework Integration is part of how single-spa lets multiple applications — even in different frameworks — coexist on one page. A root config registers each app and controls when it is active.

Shared utility modules provide cross-app services like auth without tight coupling.

  • A root config registers apps and calls start().
  • Each app exports bootstrap, mount, and unmount lifecycles.
  • activeWhen decides which routes each app owns.
  • Import maps resolve each app's bundle at runtime.

Practical Guidance for Cross-Framework Integration

For reliable micro frontends, cross-framework integration should isolate failures and keep shared state minimal. Let each team own its app end to end while agreeing on a few shared contracts.

Concern Recommendation
Isolation One app's crash should not break others
Shared state Prefer shared utility modules over globals
Routing Keep activeWhen rules explicit and non-overlapping
Deployment Release via import-map updates per app

Common Mistakes

  • Skipping error handling and edge cases when wiring up cross-framework integration.
  • Leaving cross-framework integration untested, so regressions slip into production.
  • Over-engineering cross-framework integration before you actually need the extra flexibility.
  • Ignoring documentation, which makes cross-framework integration hard for the next developer to change.

Key Takeaways

  • Cross-Framework Integration is a core part of working effectively with single-spa.
  • Start small and keep cross-framework integration focused on a single responsibility.
  • Apply consistent patterns so cross-framework integration scales across your project.
  • Test and document cross-framework integration to keep it maintainable over time.

Pro Tip

Pair cross-framework integration with automated tests from day one. It is far cheaper to catch single-spa regressions in CI than in production.