diff --git a/apps/host/README.md b/apps/host/README.md
index ea3f690..e8b46bb 100644
--- a/apps/host/README.md
+++ b/apps/host/README.md
@@ -47,6 +47,10 @@ The page consumes it like any other Nuxt component:
```
+### Bridge application remote
+
+`/bridge/*` mounts `remote/bridge/export-app` via `@module-federation/bridge-vue3` (`createRemoteAppComponent`) as a client-only island. Component federation on `/` is unchanged. The host registers a Vue Router catch-all (`/bridge/:pathMatch(.*)*`) so basename auto-detect works with current `bridge-vue3` releases.
+
## SSR behavior
Nuxt 4.5 runs development with Vite 8 and Rolldown. Remote components render on the server during `pnpm dev`, then hydrate and remain interactive in the browser.
diff --git a/apps/host/app/app.vue b/apps/host/app/app.vue
index b457ed5..c55bf94 100644
--- a/apps/host/app/app.vue
+++ b/apps/host/app/app.vue
@@ -1,29 +1,15 @@
-
-
-
-
+
+
+
+
diff --git a/apps/host/app/types/remote.d.ts b/apps/host/app/types/remote.d.ts
index 2f5c114..07cf145 100644
--- a/apps/host/app/types/remote.d.ts
+++ b/apps/host/app/types/remote.d.ts
@@ -9,3 +9,11 @@ declare module "remote/Counter" {
const component: Component;
export default component;
}
+
+declare module "remote/bridge/export-app" {
+ const createProvider: () => {
+ render: (info: Record) => void | Promise;
+ destroy: (info: { dom: HTMLElement }) => void;
+ };
+ export default createProvider;
+}
diff --git a/apps/host/nuxt.config.ts b/apps/host/nuxt.config.ts
index 7870de6..f392f80 100644
--- a/apps/host/nuxt.config.ts
+++ b/apps/host/nuxt.config.ts
@@ -9,6 +9,18 @@ export default defineNuxtConfig({
buildCache: false,
},
+ hooks: {
+ // Vue Router catch-all name so bridge-vue3 basename auto-detect works
+ // without waiting for explicit-basename releases.
+ "pages:extend"(pages) {
+ pages.push({
+ name: "bridge-remote",
+ path: "/bridge/:pathMatch(.*)*",
+ file: "~/components/BridgeRemotePage.vue",
+ });
+ },
+ },
+
moduleFederation: {
remoteComponents: {
remote: ["Widget", "Counter"],
diff --git a/apps/host/package.json b/apps/host/package.json
index 48c2a32..34c858f 100644
--- a/apps/host/package.json
+++ b/apps/host/package.json
@@ -10,6 +10,7 @@
"typecheck": "nuxt typecheck"
},
"dependencies": {
+ "@module-federation/bridge-vue3": "^2.8.2",
"@module-federation/nuxt": "workspace:*",
"@pinia/nuxt": "0.11.3",
"nuxt": "4.5.1",
diff --git a/apps/remote/README.md b/apps/remote/README.md
index 0e461b0..e45f5b9 100644
--- a/apps/remote/README.md
+++ b/apps/remote/README.md
@@ -6,6 +6,7 @@ This Nuxt application provides Vue components to the host example and runs stand
- Host consumer: `http://localhost:4173`
- Configuration: [`nuxt.config.ts`](nuxt.config.ts)
- Exposed components: [`app/components/exposed`](app/components/exposed)
+- Bridge app export: [`app/export-app.ts`](app/export-app.ts) → `./bridge/export-app`
## Run
@@ -33,6 +34,14 @@ The port is fixed because the host configuration points to `4174`.
To add another auto-registered component, create `app/components/exposed/Example.vue`. After restarting the applications, a single-remote host can render it as ``.
+### Bridge application export
+
+In addition to components, this remote exposes an application-level Bridge module:
+
+- `./bridge/export-app` — `createBridgeComponent` wrapping a small vue-router app under `app/bridge/`
+
+Hosts load it with `@module-federation/bridge-vue3` `createRemoteAppComponent` (see host `/bridge/*`). The same Bridge export can be consumed from React/Next via `@module-federation/bridge-react`. Use a slashed expose name so host manifest discovery does not treat it as a Vue component.
+
## Federation assets
Development and production serve the federation contract from the public root:
@@ -52,4 +61,4 @@ pnpm build
pnpm preview
```
-Verify all three federation URLs above return successfully, then open the host at `http://localhost:4173`. Its initial HTML should already include both remote components, and their counters should become interactive after hydration.
+Verify all three federation URLs above return successfully, then open the host at `http://localhost:4173`. Its initial HTML should already include both remote components, and their counters should become interactive after hydration. Open `/bridge` to exercise the Bridge remote (client island).
diff --git a/apps/remote/app/bridge/App.vue b/apps/remote/app/bridge/App.vue
new file mode 100644
index 0000000..adae53b
--- /dev/null
+++ b/apps/remote/app/bridge/App.vue
@@ -0,0 +1,27 @@
+
+