This document defines the browser global used by the optional development overlay and by external debug tooling.
When devtools are enabled, the plugin creates or reuses:
window.__VITE_PLUGIN_FEDERATION_DEVTOOLS__;The current contract version is 1.0.0.
interface FederationDevtoolsGlobal {
activeApp?: string;
apps: Record<string, FederationDevtoolsAppPayload>;
contractVersion: '1.0.0';
eventLimit: number;
events: FederationDevtoolsEvent[];
exportSnapshot: () => FederationDevtoolsSnapshot;
copySnapshot?: () => Promise<string>;
lastUpdatedAt?: string;
runtime?: ReturnType<typeof getFederationDebugInfo>;
}The runtime and overlay both retain at most eventLimit events. The default is 50.
The dev server endpoint and injected bootstrap register one payload per configured federation app.
interface FederationDevtoolsAppPayload {
capabilities: {
copySnapshot: boolean;
manifestTimeline: boolean;
preloadGraph: boolean;
remoteRegistry: boolean;
runtimeErrors: boolean;
sharedGraph: boolean;
};
contractVersion: '1.0.0';
debugUrl: string | null;
endpoint: string;
eventLimit: number;
exposes: Array<{
cssMode: 'head' | 'manual' | string;
exposeName: string;
import: string | string[];
}>;
manifestUrl: string | null;
name: string;
remoteHmrUrl: string | null;
remotes: Array<{
alias: string;
entry: string;
name: string;
type: string;
}>;
role: 'host' | 'remote' | 'hybrid' | 'isolated';
shared: string[];
}The same payload is served as JSON from /<base>/__mf_devtools.
The runtime dispatches vite-plugin-federation:debug after relevant state changes. Event details
have this shape:
interface FederationRuntimeDebugEvent {
event:
| 'create-instance'
| 'register-remotes'
| 'register-shared'
| 'shared-resolution'
| 'load-remote'
| 'refresh-remote'
| 'load-error'
| 'manifest-fetched'
| 'manifest-integrity'
| 'manifest-registered'
| 'clear-caches';
snapshot: ReturnType<typeof getFederationDebugInfo>;
timestamp: string;
}The overlay also listens to:
vite-plugin-federation:remote-updatevite-plugin-federation:remote-style-updatevite-plugin-federation:remote-types-update
exportSnapshot() returns a JSON-safe object containing apps, recent events, last runtime snapshot,
contract version, and update timestamp. copySnapshot() writes the same object to
navigator.clipboard when available and resolves with the JSON string.
External tooling should prefer exportSnapshot() over reading individual fields one by one. The
top-level field names are the stable contract; nested runtime data follows
getFederationDebugInfo().
The built-in overlay renders these optional panels from the runtime snapshot:
- Runtime errors from
runtime.lastLoadError. - Registered runtime and manifest remotes.
- Manifest fetch timeline from
runtime.manifestFetches. - Shared resolution graph from
runtime.sharedResolutionGraph. - Last preload call from
runtime.lastPreloadRemote. - Recent devtools events.
The overlay is only injected during Vite dev server usage when dev.devtools !== false. It is not
included in production builds.