From f809e04a359460ba1e2d82ec5439267547126879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Thu, 5 Mar 2026 09:37:16 +0100 Subject: [PATCH 1/2] bundler-metro: allow configuring metro bind host --- packages/bundler-metro/src/factory.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/bundler-metro/src/factory.ts b/packages/bundler-metro/src/factory.ts index ed1d9d25..965b03ec 100644 --- a/packages/bundler-metro/src/factory.ts +++ b/packages/bundler-metro/src/factory.ts @@ -66,9 +66,15 @@ export const getMetroInstance = async ( .use('/status', getStatusMiddleware(projectRoot)); const ready = waitForBundler(reporter, abortSignal); + const metroBindHost = process.env.HARNESS_METRO_BIND_HOST?.trim(); + if (metroBindHost) { + logger.debug(`Binding Metro server to host ${metroBindHost}`); + } + const maybeServer = await Metro.runServer(config, { waitForBundler: true, unstable_extraMiddleware: [middleware], + ...(metroBindHost ? { host: metroBindHost } : {}), }); // Metro <0.83 returns the server directly, while 0.83+ returns an object with the server as a property. From 266276bce272281d7ec794ea2b9f53201c3c78b7 Mon Sep 17 00:00:00 2001 From: Szymon Chmal Date: Fri, 6 Mar 2026 16:27:12 +0100 Subject: [PATCH 2/2] feat(config): add host option for Metro bind address --- .nx/version-plans/version-plan-1772810670470.md | 5 +++++ packages/bundler-metro/src/factory.ts | 2 +- packages/config/src/types.ts | 1 + website/src/docs/getting-started/configuration.mdx | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .nx/version-plans/version-plan-1772810670470.md diff --git a/.nx/version-plans/version-plan-1772810670470.md b/.nx/version-plans/version-plan-1772810670470.md new file mode 100644 index 00000000..4e3a4417 --- /dev/null +++ b/.nx/version-plans/version-plan-1772810670470.md @@ -0,0 +1,5 @@ +--- +__default__: patch +--- + +Add a new host option to rn-harness.config for Metro bind host, replacing HARNESS_METRO_BIND_HOST. diff --git a/packages/bundler-metro/src/factory.ts b/packages/bundler-metro/src/factory.ts index 965b03ec..30915f06 100644 --- a/packages/bundler-metro/src/factory.ts +++ b/packages/bundler-metro/src/factory.ts @@ -66,7 +66,7 @@ export const getMetroInstance = async ( .use('/status', getStatusMiddleware(projectRoot)); const ready = waitForBundler(reporter, abortSignal); - const metroBindHost = process.env.HARNESS_METRO_BIND_HOST?.trim(); + const metroBindHost = harnessConfig.host?.trim(); if (metroBindHost) { logger.debug(`Binding Metro server to host ${metroBindHost}`); } diff --git a/packages/config/src/types.ts b/packages/config/src/types.ts index 1123dd04..e94d934b 100644 --- a/packages/config/src/types.ts +++ b/packages/config/src/types.ts @@ -21,6 +21,7 @@ export const ConfigSchema = z .min(1, 'App registry component name is required'), runners: z.array(RunnerSchema).min(1, 'At least one runner is required'), defaultRunner: z.string().optional(), + host: z.string().min(1, 'Host is required').optional(), webSocketPort: z.number().optional().default(3001), bridgeTimeout: z .number() diff --git a/website/src/docs/getting-started/configuration.mdx b/website/src/docs/getting-started/configuration.mdx index f1ca8417..2c12a27f 100644 --- a/website/src/docs/getting-started/configuration.mdx +++ b/website/src/docs/getting-started/configuration.mdx @@ -84,6 +84,7 @@ For Expo projects, the `entryPoint` should be set to the path specified in the ` | `appRegistryComponentName` | **Required.** Name of the component registered with AppRegistry. | | `runners` | **Required.** Array of test runners (at least one required). | | `defaultRunner` | Default runner to use when none specified. | +| `host` | Hostname or IP address to bind the Metro server to (default: Metro default). | | `bridgeTimeout` | Bridge timeout in milliseconds (default: `60000`). | | `bundleStartTimeout` | Bundle start timeout in milliseconds (default: `15000`). | | `maxAppRestarts` | Maximum number of app restarts when app fails to report ready (default: `2`). |