# mfdoctor > Diagnostics for Vite, Rspack, Rsbuild, Webpack, and Modern.js federation projects ## Anleitung - [Erste Schritte](https://mfdoctor.kevinbeier.com/de/setup.md): mfdoctor installieren, den Build-Adapter hinzufügen und die ersten lokalen und Workspace-Prüfungen ausführen. - [Production readiness](https://mfdoctor.kevinbeier.com/de/production-readiness.md): mfdoctor treats Module Federation as three linked surfaces: build configuration,emitted manifest/stats/type artifacts,federation-wide runtime contracts. A config can be valid by itself and still fail after deployment. For example, an externalRuntime remote is only safe when a pure top-level consumer provides the runtime first. mfdoctor therefore keeps local and cross-project checks separate. - [Limitations](https://mfdoctor.kevinbeier.com/de/limitations.md): MVP supports Vite (including Rolldown-integrated Vite and Vite Plus as a partial matrix cell, Vite Plus production smoke plus unit lifecycle hooks; not a full supported claim yet), direct Rspack, Rsbuild, Webpack, and Modern.js as a partial matrix cell, adapter API plus an Rspack-under-the-hood smoke (not a full @modern-js/app-tools build in this lockfile; see compatibility). Gaps below are tracked as GitHub issues and milestones so each one can be removed from this page when it ships. Next.js Module Federation (@module-federation/nextjs-mf / NextFederationPlugin) is unsupported. No mfdoctor adapter is planned. Prefer Rsbuild or Modern.js. See compatibility. Roadmap: v1.0 · post-v1 · epic #30. - [Bundler-Integrationen](https://mfdoctor.kevinbeier.com/de/integrations.md): mfdoctor zu Vite, Vite Plus, Nuxt, Rspack, Rsbuild, Webpack oder Modern.js hinzufügen. - [Monorepos](https://mfdoctor.kevinbeier.com/de/monorepos.md): Build each federation app with the mfdoctor plugin so it writes .mf/doctor/project.json. Then run the one-shot workspace gate from the monorepo root (or scoped roots): That is tier 2 of the agent loop: do not claim green from mfdoctor check alone. After every host and remote has built with its adapter, this gate checks version ranges, providers, singleton choices, and share scopes across projects. Exit 0 / 1 / 2 match the rest of the CLI. ## Konfiguration - [Configuration audit](https://mfdoctor.kevinbeier.com/de/configuration-audit.md): This page separates common Module Federation config from Vite-only controls. Use it as a review checklist even when a rule does not yet automate the check. - [Vite integration notes](https://mfdoctor.kevinbeier.com/de/vite-integration.md): The Vite plugin is not a thin copy of the Rspack plugin. mfdoctor keeps its Vite-only facts under the vite section of project.json. - [Custom rules](https://mfdoctor.kevinbeier.com/de/custom-rules.md): Custom rules use defineRule and receive frozen normalized facts only. A rule may be async. It reports findings through context.report and cannot mutate facts. Facts come from public MF options, manifests, stats, and recorded capabilities, not private plugin state (limitations). Register custom rules through extends (alone or inside a policy pack): - [Evidence-aware rules](https://mfdoctor.kevinbeier.com/de/evidence-aware-rules.md): Built-in rules in mfdoctor now declare prerequisites, applicability, confidence ceilings, and typed evaluation outcomes. This guide is for maintainers and custom-rule authors who need to understand how evidence-aware semantics differ from the legacy defineRule "report or stay silent" model. The machine-checked migration inventory lives in fixtures/rule-inventory/v1.json and is validated by vp run inventory:check. - [Governance: suppressions and allowlists](https://mfdoctor.kevinbeier.com/de/suppressions.md): mfdoctor already supports intentional allow/deny of specific rules. Use this page when a finding is known and accepted, for example enterprise nesting that keeps direct remoteEntry URLs, so CI stays green without disabling mfdoctor. This is the short Governance reference for rules: { "id": "off" }, severity overrides, policy packs, fingerprint baselines, and failOn. There is no source-comment eslint-disable style in v1. Prefer config rules, policy packs, or fingerprint baselines. - [Fingerprint baselines](https://mfdoctor.kevinbeier.com/de/baselines.md): Baselines let teams turn on CI failOn without fixing every legacy finding on day one. New fingerprints still fail the gate; known debt is tracked in a checked-in file and should shrink over time. For whole-rule "off", severity overrides, packs, and failOn, see Suppressions and allowlists. Baselines are debt, not a permanent mute. Prefer fixing findings. Use a baseline only for incremental adoption, and prune entries as debt is paid. Do not add per-line eslint-disable-style source comments, fingerprint baselines are enough for v1. - [Policy packs and named presets](https://mfdoctor.kevinbeier.com/de/policy-packs.md): Encode Module Federation governance once and reuse it across hosts and remotes, the same idea as ESLint shareable configs. For per-app "off" / severity overrides, baselines, and failOn, see Suppressions and allowlists. ## CLI - [CLI-Befehlsreferenz](https://mfdoctor.kevinbeier.com/de/cli.md): mfdoctor lokal und in der CI ausführen, für einen Workspace, gegen Laufzeitspuren oder gegen ein bereitgestelltes Manifest. - [Agenten-Schleife](https://mfdoctor.kevinbeier.com/de/agent-loop.md): Zweistufige mfdoctor-Schleife, mfdoctor check vs. Plugin-Emit plus Workspace, bevor Grün beansprucht wird. - [Observability latest.json → mfdoctor runtime](https://mfdoctor.kevinbeier.com/de/observability-runtime.md): Module-Federation-Observability-latest.json offline in mfdoctor runtime einlesen, kein In-Browser-Agent. ## Regeln - [Regelreferenz](https://mfdoctor.kevinbeier.com/de/rules/index.md): Rule pages are generated from package metadata. Each page explains the issue, impact, fix, and upstream evidence. Browse by folder in the sidebar: Config, Shared, Artifact, Bridge, SSR, Reliability, Runtime, Runtime plugins, Federation, Performance, Vite, Security, and mfdoctor. Printed terminal docs: links open the same pages. - [config/alias-share-bypass](https://mfdoctor.kevinbeier.com/de/rules/config/alias-share-bypass.md): Kategorie: correctnessStandardschweregrad: warning - [config/async-boundary-missing](https://mfdoctor.kevinbeier.com/de/rules/config/async-boundary-missing.md): Kategorie: correctnessStandardschweregrad: error - [config/async-startup-rspack-version](https://mfdoctor.kevinbeier.com/de/rules/config/async-startup-rspack-version.md): Kategorie: correctnessStandardschweregrad: warning - [config/copied-vite-options-on-webpack](https://mfdoctor.kevinbeier.com/de/rules/config/copied-vite-options-on-webpack.md): Kategorie: correctnessStandardschweregrad: warning - [config/copied-webpack-options-on-vite](https://mfdoctor.kevinbeier.com/de/rules/config/copied-webpack-options-on-vite.md): Kategorie: correctnessStandardschweregrad: warning - [config/dts-output-dir-mismatch](https://mfdoctor.kevinbeier.com/de/rules/config/dts-output-dir-mismatch.md): Kategorie: reliabilityStandardschweregrad: warning - [config/duplicate-plugin-registration](https://mfdoctor.kevinbeier.com/de/rules/config/duplicate-plugin-registration.md): Kategorie: correctnessStandardschweregrad: error - [config/eager-tree-shaking-conflict](https://mfdoctor.kevinbeier.com/de/rules/config/eager-tree-shaking-conflict.md): Kategorie: correctnessStandardschweregrad: error - [config/expose-key-invalid](https://mfdoctor.kevinbeier.com/de/rules/config/expose-key-invalid.md): Kategorie: correctnessStandardschweregrad: error - [config/expose-path-missing](https://mfdoctor.kevinbeier.com/de/rules/config/expose-path-missing.md): Kategorie: correctnessStandardschweregrad: error - [config/external-runtime-conflict](https://mfdoctor.kevinbeier.com/de/rules/config/external-runtime-conflict.md): Kategorie: correctnessStandardschweregrad: error - [config/external-runtime-with-exposes](https://mfdoctor.kevinbeier.com/de/rules/config/external-runtime-with-exposes.md): Kategorie: correctnessStandardschweregrad: error - [config/filename-invalid](https://mfdoctor.kevinbeier.com/de/rules/config/filename-invalid.md): Kategorie: securityStandardschweregrad: error - [config/get-public-path-invalid](https://mfdoctor.kevinbeier.com/de/rules/config/get-public-path-invalid.md): Kategorie: correctnessStandardschweregrad: error - [config/get-public-path-unused](https://mfdoctor.kevinbeier.com/de/rules/config/get-public-path-unused.md): Kategorie: toolingStandardschweregrad: info - [config/hashed-remote-filename](https://mfdoctor.kevinbeier.com/de/rules/config/hashed-remote-filename.md): Kategorie: reliabilityStandardschweregrad: warning - [config/implementation-suspicious](https://mfdoctor.kevinbeier.com/de/rules/config/implementation-suspicious.md): Kategorie: reliabilityStandardschweregrad: info - [config/js-remote-without-type-urls](https://mfdoctor.kevinbeier.com/de/rules/config/js-remote-without-type-urls.md): Kategorie: reliabilityStandardschweregrad: warning - [config/library-remote-type-mismatch](https://mfdoctor.kevinbeier.com/de/rules/config/library-remote-type-mismatch.md): Kategorie: correctnessStandardschweregrad: warning - [config/name-required](https://mfdoctor.kevinbeier.com/de/rules/config/name-required.md): Kategorie: correctnessStandardschweregrad: error - [config/nested-producer-dts-extract](https://mfdoctor.kevinbeier.com/de/rules/config/nested-producer-dts-extract.md): Kategorie: reliabilityStandardschweregrad: warning - [config/observability-plugin-recommended](https://mfdoctor.kevinbeier.com/de/rules/config/observability-plugin-recommended.md): Kategorie: toolingStandardschweregrad: info - [config/plugin-package-mismatch](https://mfdoctor.kevinbeier.com/de/rules/config/plugin-package-mismatch.md): Kategorie: correctnessStandardschweregrad: warning - [config/promise-remote-async-boundary](https://mfdoctor.kevinbeier.com/de/rules/config/promise-remote-async-boundary.md): Kategorie: correctnessStandardschweregrad: warning - [config/remote-alias-prefix-collision](https://mfdoctor.kevinbeier.com/de/rules/config/remote-alias-prefix-collision.md): Kategorie: correctnessStandardschweregrad: error - [config/remote-capability-disabled](https://mfdoctor.kevinbeier.com/de/rules/config/remote-capability-disabled.md): Kategorie: correctnessStandardschweregrad: error - [config/remote-entry-invalid](https://mfdoctor.kevinbeier.com/de/rules/config/remote-entry-invalid.md): Kategorie: correctnessStandardschweregrad: error - [config/remote-http-insecure](https://mfdoctor.kevinbeier.com/de/rules/config/remote-http-insecure.md): Kategorie: securityStandardschweregrad: warning - [config/remote-localhost-in-production](https://mfdoctor.kevinbeier.com/de/rules/config/remote-localhost-in-production.md): Kategorie: reliabilityStandardschweregrad: warning - [config/remote-manifest-recommended](https://mfdoctor.kevinbeier.com/de/rules/config/remote-manifest-recommended.md): Kategorie: toolingStandardschweregrad: info - [config/rsbuild-mf-api-generation](https://mfdoctor.kevinbeier.com/de/rules/config/rsbuild-mf-api-generation.md): Kategorie: correctnessStandardschweregrad: error - [config/runtime-plugin-missing](https://mfdoctor.kevinbeier.com/de/rules/config/runtime-plugin-missing.md): Kategorie: correctnessStandardschweregrad: error - [config/share-scope-undeclared](https://mfdoctor.kevinbeier.com/de/rules/config/share-scope-undeclared.md): Kategorie: correctnessStandardschweregrad: error - [config/shared-capability-disabled](https://mfdoctor.kevinbeier.com/de/rules/config/shared-capability-disabled.md): Kategorie: correctnessStandardschweregrad: error - [config/shared-externals-conflict](https://mfdoctor.kevinbeier.com/de/rules/config/shared-externals-conflict.md): Kategorie: correctnessStandardschweregrad: warning - [config/split-chunks-mf-runtime](https://mfdoctor.kevinbeier.com/de/rules/config/split-chunks-mf-runtime.md): Kategorie: reliabilityStandardschweregrad: warning - [config/transform-import-share-conflict](https://mfdoctor.kevinbeier.com/de/rules/config/transform-import-share-conflict.md): Kategorie: correctnessStandardschweregrad: warning - [config/tree-shaking-server-calc-injection](https://mfdoctor.kevinbeier.com/de/rules/config/tree-shaking-server-calc-injection.md): Kategorie: correctnessStandardschweregrad: warning - [config/unique-name-mismatch](https://mfdoctor.kevinbeier.com/de/rules/config/unique-name-mismatch.md): Kategorie: reliabilityStandardschweregrad: info - [shared/candidate](https://mfdoctor.kevinbeier.com/de/rules/shared/candidate.md): Kategorie: performanceStandardschweregrad: info - [shared/deep-import-bypass](https://mfdoctor.kevinbeier.com/de/rules/shared/deep-import-bypass.md): Kategorie: performanceStandardschweregrad: warning - [shared/eager-without-singleton](https://mfdoctor.kevinbeier.com/de/rules/shared/eager-without-singleton.md): Kategorie: performanceStandardschweregrad: warning - [shared/package-path-missing](https://mfdoctor.kevinbeier.com/de/rules/shared/package-path-missing.md): Kategorie: correctnessStandardschweregrad: error - [shared/prefix-share-recommended](https://mfdoctor.kevinbeier.com/de/rules/shared/prefix-share-recommended.md): Kategorie: performanceStandardschweregrad: error - [shared/react-host-missing](https://mfdoctor.kevinbeier.com/de/rules/shared/react-host-missing.md): Kategorie: correctnessStandardschweregrad: warning - [shared/singleton-mismatch](https://mfdoctor.kevinbeier.com/de/rules/shared/singleton-mismatch.md): Kategorie: reliabilityStandardschweregrad: warning - [shared/singleton-risk](https://mfdoctor.kevinbeier.com/de/rules/shared/singleton-risk.md): Kategorie: reliabilityStandardschweregrad: warning - [shared/subpath-version-unresolved](https://mfdoctor.kevinbeier.com/de/rules/shared/subpath-version-unresolved.md): Kategorie: correctnessStandardschweregrad: error - [shared/unused](https://mfdoctor.kevinbeier.com/de/rules/shared/unused.md): Kategorie: performanceStandardschweregrad: warning - [shared/version-unsatisfied](https://mfdoctor.kevinbeier.com/de/rules/shared/version-unsatisfied.md): Kategorie: correctnessStandardschweregrad: error - [bridge/consumer-api-manual](https://mfdoctor.kevinbeier.com/de/rules/bridge/consumer-api-manual.md): Kategorie: reliabilityStandardschweregrad: warning - [bridge/disable-alias-deprecated](https://mfdoctor.kevinbeier.com/de/rules/bridge/disable-alias-deprecated.md): Kategorie: toolingStandardschweregrad: info - [bridge/export-app-missing](https://mfdoctor.kevinbeier.com/de/rules/bridge/export-app-missing.md): Kategorie: reliabilityStandardschweregrad: warning - [bridge/lazy-plugin-unregistered](https://mfdoctor.kevinbeier.com/de/rules/bridge/lazy-plugin-unregistered.md): Kategorie: correctnessStandardschweregrad: error - [bridge/missing-fallback-loading](https://mfdoctor.kevinbeier.com/de/rules/bridge/missing-fallback-loading.md): Kategorie: reliabilityStandardschweregrad: warning - [bridge/provider-shape-invalid](https://mfdoctor.kevinbeier.com/de/rules/bridge/provider-shape-invalid.md): Kategorie: correctnessStandardschweregrad: error - [bridge/react-dom-prefix-missing](https://mfdoctor.kevinbeier.com/de/rules/bridge/react-dom-prefix-missing.md): Kategorie: correctnessStandardschweregrad: error - [bridge/react-version-entry-mismatch](https://mfdoctor.kevinbeier.com/de/rules/bridge/react-version-entry-mismatch.md): Kategorie: correctnessStandardschweregrad: error - [bridge/react-version-entry-prefer](https://mfdoctor.kevinbeier.com/de/rules/bridge/react-version-entry-prefer.md): Kategorie: reliabilityStandardschweregrad: warning - [bridge/router-implicit-enable](https://mfdoctor.kevinbeier.com/de/rules/bridge/router-implicit-enable.md): Kategorie: toolingStandardschweregrad: info - [bridge/router-shared-conflict](https://mfdoctor.kevinbeier.com/de/rules/bridge/router-shared-conflict.md): Kategorie: correctnessStandardschweregrad: error - [bridge/ssr-instanceid-hydration](https://mfdoctor.kevinbeier.com/de/rules/bridge/ssr-instanceid-hydration.md): Kategorie: toolingStandardschweregrad: info - [bridge/ssr-server-entry-leak](https://mfdoctor.kevinbeier.com/de/rules/bridge/ssr-server-entry-leak.md): Kategorie: correctnessStandardschweregrad: error - [bridge/tanstack-router-conflict](https://mfdoctor.kevinbeier.com/de/rules/bridge/tanstack-router-conflict.md): Kategorie: toolingStandardschweregrad: info - [bridge/vue-consumer-manual](https://mfdoctor.kevinbeier.com/de/rules/bridge/vue-consumer-manual.md): Kategorie: reliabilityStandardschweregrad: warning - [bridge/vue-server-entry](https://mfdoctor.kevinbeier.com/de/rules/bridge/vue-server-entry.md): Kategorie: reliabilityStandardschweregrad: warning - [bridge/vue-share-missing](https://mfdoctor.kevinbeier.com/de/rules/bridge/vue-share-missing.md): Kategorie: correctnessStandardschweregrad: error - [bridge/vue-ssr-fresh-context](https://mfdoctor.kevinbeier.com/de/rules/bridge/vue-ssr-fresh-context.md): Kategorie: reliabilityStandardschweregrad: warning - [ssr/node-library-dts](https://mfdoctor.kevinbeier.com/de/rules/ssr/node-library-dts.md): Kategorie: reliabilityStandardschweregrad: warning - [ssr/node-remote-manifest](https://mfdoctor.kevinbeier.com/de/rules/ssr/node-remote-manifest.md): Kategorie: correctnessStandardschweregrad: error - [ssr/node-runtime-plugin-missing](https://mfdoctor.kevinbeier.com/de/rules/ssr/node-runtime-plugin-missing.md): Kategorie: correctnessStandardschweregrad: error - [ssr/remote-entry-target-mismatch](https://mfdoctor.kevinbeier.com/de/rules/ssr/remote-entry-target-mismatch.md): Kategorie: correctnessStandardschweregrad: error - [artifact/dts-disabled](https://mfdoctor.kevinbeier.com/de/rules/artifact/dts-disabled.md): Kategorie: reliabilityStandardschweregrad: warning - [artifact/expose-missing](https://mfdoctor.kevinbeier.com/de/rules/artifact/expose-missing.md): Kategorie: correctnessStandardschweregrad: error - [artifact/manifest-assets-disabled](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-assets-disabled.md): Kategorie: reliabilityStandardschweregrad: warning - [artifact/manifest-disabled](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-disabled.md): Kategorie: toolingStandardschweregrad: warning - [artifact/manifest-expose-assets-empty](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-expose-assets-empty.md): Kategorie: reliabilityStandardschweregrad: warning - [artifact/manifest-invalid](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-invalid.md): Kategorie: correctnessStandardschweregrad: error - [artifact/manifest-name-mismatch](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-name-mismatch.md): Kategorie: correctnessStandardschweregrad: error - [artifact/manifest-remote-entry-missing](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-remote-entry-missing.md): Kategorie: correctnessStandardschweregrad: error - [artifact/manifest-shared-version-mismatch](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-shared-version-mismatch.md): Kategorie: reliabilityStandardschweregrad: warning - [artifact/manifest-ssr-remote-entry-missing](https://mfdoctor.kevinbeier.com/de/rules/artifact/manifest-ssr-remote-entry-missing.md): Kategorie: correctnessStandardschweregrad: warning - [artifact/public-path-non-string-manifest](https://mfdoctor.kevinbeier.com/de/rules/artifact/public-path-non-string-manifest.md): Kategorie: correctnessStandardschweregrad: warning - [artifact/public-path-suspicious](https://mfdoctor.kevinbeier.com/de/rules/artifact/public-path-suspicious.md): Kategorie: correctnessStandardschweregrad: warning - [artifact/react-dom-server-in-web](https://mfdoctor.kevinbeier.com/de/rules/artifact/react-dom-server-in-web.md): Kategorie: correctnessStandardschweregrad: error - [artifact/remote-entry-missing](https://mfdoctor.kevinbeier.com/de/rules/artifact/remote-entry-missing.md): Kategorie: correctnessStandardschweregrad: error - [artifact/types-metadata-missing](https://mfdoctor.kevinbeier.com/de/rules/artifact/types-metadata-missing.md): Kategorie: toolingStandardschweregrad: warning - [artifact/types-missing](https://mfdoctor.kevinbeier.com/de/rules/artifact/types-missing.md): Kategorie: toolingStandardschweregrad: warning - [reliability/async-startup-library-promise](https://mfdoctor.kevinbeier.com/de/rules/reliability/async-startup-library-promise.md): Kategorie: reliabilityStandardschweregrad: warning - [reliability/external-runtime-provider-unverified](https://mfdoctor.kevinbeier.com/de/rules/reliability/external-runtime-provider-unverified.md): Kategorie: reliabilityStandardschweregrad: warning - [reliability/shared-import-false](https://mfdoctor.kevinbeier.com/de/rules/reliability/shared-import-false.md): Kategorie: reliabilityStandardschweregrad: warning - [reliability/snapshot-capability-disabled](https://mfdoctor.kevinbeier.com/de/rules/reliability/snapshot-capability-disabled.md): Kategorie: reliabilityStandardschweregrad: warning - [reliability/tree-shaking-server-calc-contract](https://mfdoctor.kevinbeier.com/de/rules/reliability/tree-shaking-server-calc-contract.md): Kategorie: reliabilityStandardschweregrad: warning - [reliability/version-first-offline-remotes](https://mfdoctor.kevinbeier.com/de/rules/reliability/version-first-offline-remotes.md): Kategorie: reliabilityStandardschweregrad: warning - [reliability/vite-fixed-parse-timeout](https://mfdoctor.kevinbeier.com/de/rules/reliability/vite-fixed-parse-timeout.md): Kategorie: reliabilityStandardschweregrad: info - [runtime/error-correlated](https://mfdoctor.kevinbeier.com/de/rules/runtime/error-correlated.md): Kategorie: reliabilityStandardschweregrad: error - [runtime/init-failed](https://mfdoctor.kevinbeier.com/de/rules/runtime/init-failed.md): Kategorie: reliabilityStandardschweregrad: error - [runtime/remote-load-failed](https://mfdoctor.kevinbeier.com/de/rules/runtime/remote-load-failed.md): Kategorie: reliabilityStandardschweregrad: error - [runtime/remote-unknown](https://mfdoctor.kevinbeier.com/de/rules/runtime/remote-unknown.md): Kategorie: toolingStandardschweregrad: warning - [runtime/shared-mismatch](https://mfdoctor.kevinbeier.com/de/rules/runtime/shared-mismatch.md): Kategorie: reliabilityStandardschweregrad: error - [runtime-plugins/create-script-cors-parity](https://mfdoctor.kevinbeier.com/de/rules/runtime-plugins/create-script-cors-parity.md): Kategorie: reliabilityStandardschweregrad: warning - [runtime-plugins/create-script-without-link](https://mfdoctor.kevinbeier.com/de/rules/runtime-plugins/create-script-without-link.md): Kategorie: reliabilityStandardschweregrad: info - [runtime-plugins/invalid-factory](https://mfdoctor.kevinbeier.com/de/rules/runtime-plugins/invalid-factory.md): Kategorie: correctnessStandardschweregrad: warning - [federation/circular-remote-graph](https://mfdoctor.kevinbeier.com/de/rules/federation/circular-remote-graph.md): Kategorie: reliabilityStandardschweregrad: warning - [federation/external-runtime-provider-missing](https://mfdoctor.kevinbeier.com/de/rules/federation/external-runtime-provider-missing.md): Kategorie: correctnessStandardschweregrad: error - [federation/ghost-shares](https://mfdoctor.kevinbeier.com/de/rules/federation/ghost-shares.md): Kategorie: performanceStandardschweregrad: info - [federation/host-gaps](https://mfdoctor.kevinbeier.com/de/rules/federation/host-gaps.md): Kategorie: performanceStandardschweregrad: warning - [federation/missing-provider](https://mfdoctor.kevinbeier.com/de/rules/federation/missing-provider.md): Kategorie: reliabilityStandardschweregrad: error - [federation/name-conflict](https://mfdoctor.kevinbeier.com/de/rules/federation/name-conflict.md): Kategorie: correctnessStandardschweregrad: error - [federation/share-scope-mismatch](https://mfdoctor.kevinbeier.com/de/rules/federation/share-scope-mismatch.md): Kategorie: correctnessStandardschweregrad: error - [federation/share-strategy-mismatch](https://mfdoctor.kevinbeier.com/de/rules/federation/share-strategy-mismatch.md): Kategorie: reliabilityStandardschweregrad: warning - [federation/version-conflict](https://mfdoctor.kevinbeier.com/de/rules/federation/version-conflict.md): Kategorie: correctnessStandardschweregrad: error - [performance/asset-budget](https://mfdoctor.kevinbeier.com/de/rules/performance/asset-budget.md): Kategorie: performanceStandardschweregrad: warning - [performance/version-first-startup](https://mfdoctor.kevinbeier.com/de/rules/performance/version-first-startup.md): Kategorie: performanceStandardschweregrad: info - [performance/vite-bundle-all-css](https://mfdoctor.kevinbeier.com/de/rules/performance/vite-bundle-all-css.md): Kategorie: performanceStandardschweregrad: warning - [vite/alias-share-bypass](https://mfdoctor.kevinbeier.com/de/rules/vite/alias-share-bypass.md): Kategorie: correctnessStandardschweregrad: warning - [vite/hashed-remote-filename](https://mfdoctor.kevinbeier.com/de/rules/vite/hashed-remote-filename.md): Kategorie: reliabilityStandardschweregrad: warning - [vite/host-init-inject-ssr](https://mfdoctor.kevinbeier.com/de/rules/vite/host-init-inject-ssr.md): Kategorie: correctnessStandardschweregrad: error - [vite/ignore-origin](https://mfdoctor.kevinbeier.com/de/rules/vite/ignore-origin.md): Kategorie: reliabilityStandardschweregrad: info - [vite/manual-chunks-conflict](https://mfdoctor.kevinbeier.com/de/rules/vite/manual-chunks-conflict.md): Kategorie: reliabilityStandardschweregrad: info - [vite/remote-hmr-dev](https://mfdoctor.kevinbeier.com/de/rules/vite/remote-hmr-dev.md): Kategorie: toolingStandardschweregrad: info - [vite/remotes-prefer-module](https://mfdoctor.kevinbeier.com/de/rules/vite/remotes-prefer-module.md): Kategorie: correctnessStandardschweregrad: warning - [vite/server-origin](https://mfdoctor.kevinbeier.com/de/rules/vite/server-origin.md): Kategorie: reliabilityStandardschweregrad: info - [vite/ssr-nitro-externals](https://mfdoctor.kevinbeier.com/de/rules/vite/ssr-nitro-externals.md): Kategorie: reliabilityStandardschweregrad: warning - [vite/var-filename-interop](https://mfdoctor.kevinbeier.com/de/rules/vite/var-filename-interop.md): Kategorie: toolingStandardschweregrad: info - [vite/virtual-module-dir](https://mfdoctor.kevinbeier.com/de/rules/vite/virtual-module-dir.md): Kategorie: correctnessStandardschweregrad: warning - [security/get-public-path-dynamic-code](https://mfdoctor.kevinbeier.com/de/rules/security/get-public-path-dynamic-code.md): Kategorie: securityStandardschweregrad: warning - [doctor/partial-analysis](https://mfdoctor.kevinbeier.com/de/rules/doctor/partial-analysis.md): Kategorie: toolingStandardschweregrad: warning ## Others - [Öffentliche API-Oberfläche](https://mfdoctor.kevinbeier.com/de/api.md): Generierter Katalog der öffentlichen Einstiegspunkte und JSON-Schemas des Pakets. - [Capability matrix](https://mfdoctor.kevinbeier.com/de/capabilities.md): Analysis depth per supported bundler. For supported / partial / unsupported product cells (Node, package managers, report surfaces), see the compatibility matrix. Rules consult recorded capabilities. Missing optional input creates doctor/partial-analysis instead of pretending full analysis happened. Agents must not claim green while that finding (or exit code 2) remains, see the agent loop. The "Manifest and stats" row is not a blanket Yes: Vite/Rolldown omit mf-manifest.json / mf-stats.json unless manifest: true, and missing webpack compilation stats on those bundlers is expected. Enhanced Webpack/Rspack/Rsbuild builds with remotes and capabilities.stats: false are incomplete (missing-stats or artifact/manifest-disabled), not the Vite opt-in path. See the per-bundler matrix. Adapters must not scrape private Module Federation plugin fields to invent coverage, see permanent guarantees / non-goals. mfdoctor capabilities is the versioned CLI contract (commands, formats, exit codes). It does not load Module Federation capability-pack tables. Those tables are not re-exported from @tonoizer/mfdoctor and are not queried by the engine, adapters, or other CLI commands. - [Compatibility matrix](https://mfdoctor.kevinbeier.com/de/compatibility.md): Documented and CI-exercised support for every bundler and runtime mfdoctor claims in v1. Status labels are tied to analysis capabilities and real build+mfdoctor paths, not fixture-only confidence. Related: capabilities · limitations · #15 (MFDOCTOR-106). - [Lebenszyklus der Dokumentation](https://mfdoctor.kevinbeier.com/de/docs-lifecycle.md): Regeln für Releases, Sprachen und Zuständigkeiten der mfdoctor-Dokumentation. - [Examples](https://mfdoctor.kevinbeier.com/de/examples.md): Runnable fixtures that show how mfdoctor behaves on real Module Federation graphs. Start here, then open a specific page for commands and expected findings. Root helpers: vp run demo:showcase, vp run demo:standalone, vp run demo:mixed-issues, vp run demo:nested, and vp run demo:examples (showcase + standalone + mixed-issues + nested). - [Mixed federation example](https://mfdoctor.kevinbeier.com/de/mixed-example.md): The repository example uses a Vite host on 5173, a direct Rspack remote on 3001, and an Rsbuild remote on 3002. Both remotes expose visible React components and share React as a singleton. Each app registers the mfdoctor plugin next to Module Federation (federationDoctor, moduleFederationDoctorPlugin, pluginModuleFederationDoctor, or ModuleFederationDoctorPlugin). Playwright proves both remotes render without console errors. This path stays clean on purpose so e2e and adapter dogfood stay green. The Vite host intentionally turns off config/remote-manifest-recommended and reliability/version-first-offline-remotes with comments, that is the canonical suppression pattern for accepted host choices (see Suppressions and allowlists). For nested multi-bundler orchestration (Vite → Vite/Rsbuild → Rspack/Webpack), see Nested federation example. For intentional mfdoctor findings: Examples overview, full catalogOne-rule showcase, CLI one-rule fixturesStandalone findings, per-bundler build+mfdoctor demosMixed federation issues, same multi-bundler shape, red on purpose - [Mixed federation issues example](https://mfdoctor.kevinbeier.com/de/mixed-issues-example.md): Same Vite + Rspack + Rsbuild topology as the healthy mixed example, but configured so mfdoctor reports shared and cross-project conflicts. This suite is a CLI demo only. Playwright e2e stays on the green mixed federation path. - [Nested federation example](https://mfdoctor.kevinbeier.com/de/nested-example.md): A multi-level Module Federation graph across bundlers: Each app wires the mfdoctor adapter for its bundler. Build the suite, then gate cross-app facts: This path stays green. Nested remotes that both expose and consume remotes set dts.generateTypes.extractRemoteTypes so config/nested-producer-dts-extract does not fire. Consumers that use remoteEntry.js turn off config/remote-manifest-recommended (and Vite consumers also turn off reliability/version-first-offline-remotes) with comments, same suppression pattern as the mixed example. For intentional red findings, use mixed issues or the one-rule showcase. Per-bundler build+mfdoctor demos: standalone findings. - [Performance checks](https://mfdoctor.kevinbeier.com/de/performance.md): Performance advice must preserve runtime correctness. Module Federation owns part of the chunk and initialization graph, so generic bundler advice can be harmful. - [Report schemas](https://mfdoctor.kevinbeier.com/de/report-schemas.md): Host teams usually need the build artifacts below and the Setup / CI path. Additive 1.1.0+ library contracts (identity, waivers, graph, capture schemas) are listed in the table for authors extending Doctor, see also Library / extension. mfdoctor writes: .mf/doctor/project.json: portable, schema-versioned project facts..mf/doctor/report.json: capabilities, status, summary, and sorted findings..mf/doctor/results.sarif: source locations and stable fingerprints..mf/doctor/evidence.json will be the v2 evidence graph output in the next compatibility slice. Its public contract ships now. Comparable content has no timestamps. Paths are workspace relative. Schema version 1 changes only through an intentional compatibility change. Additive import-analysis fields (dynamicPackages, remotes, unresolvedDynamic, evidenceSources) document mfdoctor's dynamic-import completeness bar without breaking older project.json files that omit them. - [External runtime capture contract](https://mfdoctor.kevinbeier.com/de/runtime-capture.md): Library / extension docs for authors wiring an external capture tool. Host teams integrating mfdoctor should start with Setup, CI, Rules, and Limitations. The runtime capture contract is an explicit handoff boundary for an external capture/export tool. It is not a mfdoctor runtime agent. The design record is ADR 0084: External runtime capture boundary. Capture must be invoked by a user with an approved target or export file. It must not run from check, a bundler adapter, application startup, or a client bundle. The current adapter slices read existing public Observability, DevTools, app-owned, and Node/SSR exports, provide an explicitly requested browser transport, and project supplied snapshot/runtime-instance fallback evidence. It never injects plugins, calls runtime mutators, reads storage, or exports headers, bodies, cookies, source, props, factories, or raw stacks. The contract records source capabilities as exact, partial, unavailable, not-applicable, or unknown. Missing old/preview fields stay unknown. It also scopes every record by capture, navigation, realm, and sequence so equal trace IDs from separate realms do not merge. The default limits are 5 MiB, 100 reports, 5,000 events, 500 snapshots, 100 instances, 2,000 network records, 200 errors, 4 KiB strings, depth 12, and 100 object keys. The hard total ceiling is 25 MiB; truncation must be recorded. The contract, bounded file-only import, existing file/export adapters, explicit read-only browser transport, safe snapshot/runtime-instance projections, and network/error fallback are the shipped safe slices. The atomic validated JSON handoff is available through the capture entry point; automatic export remains outside this boundary. The bounded file-only import is available through the existing offline runtime command: For the common Observability path (.mf/observability/latest.json → mfdoctor runtime, no in-browser agent), see Observability latest.json → mfdoctor runtime. The command accepts only contract version 1, rejects oversized or unsafe files before analysis, and keeps the existing runtime output shape. Runtime mutation and automatic export remain outside the boundary. mfdoctor runtime uses the file-import contract only: it validates a v1 envelope and never calls the library browser, snapshot/instance, or network/error transports. Those transports stay on @tonoizer/mfdoctor/capture for external tools; they are not invoked by check, adapters, or application startup, and they never inject a doctor into a page. - [Runtime, manifests, and snapshots](https://mfdoctor.kevinbeier.com/de/runtime-manifests.md) - [One-rule CLI showcase](https://mfdoctor.kevinbeier.com/de/showcase.md): examples/showcase holds themed, intentional misconfigs for the CLI. Run them to see the exact rule IDs mfdoctor reports one fixture at a time: For per-bundler build+mfdoctor demos (Vite / Webpack / Rspack / Rsbuild, plus a partial Modern.js stub), see standalone findings (vp run demo:standalone). Prefer fixtures where a missing or weak config would still reach a Module Federation plugin or build. Hard plugin failures (for example an empty name) stay as rules, not showcases. - [Standalone per-bundler findings](https://mfdoctor.kevinbeier.com/de/standalone-findings.md): examples/standalone-findings has five standalone cells that run a real vp run build with the matching mfdoctor adapter and emit intentional findings. Vite, Webpack, Rspack, and Rsbuild are first-class. modern/ is a documented partial stub using the same modifyBundlerChain afterEmit path as examples/compatibility/modern (Rspack-under-the-hood; not @modern-js/app-tools). They are not nested. Nested multi-app orchestration lives in examples/nested-federation (nested docs). Each cell sets failOn: "never" so the build still completes and writes .mf/doctor/report.json. The demo script asserts the expected rule IDs are present. The Modern cell also asserts project.json records bundler: "modern". It does not change the compatibility matrix status, Modern.js stays partial until a real @modern-js/app-tools build lands (#130). For one-rule CLI fixtures, see the one-rule showcase. For a flat multi-bundler red combo, see mixed federation issues.