diff --git a/.changeset/miniflare-v8-flags-env.md b/.changeset/miniflare-v8-flags-env.md new file mode 100644 index 0000000000..63fc540f47 --- /dev/null +++ b/.changeset/miniflare-v8-flags-env.md @@ -0,0 +1,9 @@ +--- +"miniflare": minor +--- + +Support passing V8 flags to `workerd` via the `MINIFLARE_WORKERD_V8_FLAGS` environment variable + +The generated `workerd` config already supports `v8Flags`, but Miniflare never populated it, so the runtime always ran with V8's default heap limit (~1.4 GB). Large dev applications (e.g. big SSR module graphs under `@cloudflare/vite-plugin`, where each server-file edit grows the runner isolate's heap) can reach that limit, at which point `workerd` aborts with `V8 fatal error; location = Reached heap limit` and every subsequent `dispatchFetch()` fails with `fetch failed` until the dev server is manually restarted. + +Setting e.g. `MINIFLARE_WORKERD_V8_FLAGS="--max-old-space-size=4096"` raises the limit and keeps long dev sessions alive. The variable follows the same space-separated format as `MINIFLARE_WORKERD_AUTOGATES`. diff --git a/packages/miniflare/src/index.ts b/packages/miniflare/src/index.ts index 0b7e3ecd6e..a34e0aae7d 100644 --- a/packages/miniflare/src/index.ts +++ b/packages/miniflare/src/index.ts @@ -2456,6 +2456,9 @@ export class Miniflare { autogates: process.env.MINIFLARE_WORKERD_AUTOGATES ? process.env.MINIFLARE_WORKERD_AUTOGATES.split(" ") : [], + v8Flags: process.env.MINIFLARE_WORKERD_V8_FLAGS + ? process.env.MINIFLARE_WORKERD_V8_FLAGS.split(" ") + : [], }; } diff --git a/packages/miniflare/types/env.d.ts b/packages/miniflare/types/env.d.ts index bfb7c05362..31c96c76ab 100644 --- a/packages/miniflare/types/env.d.ts +++ b/packages/miniflare/types/env.d.ts @@ -6,5 +6,6 @@ declare namespace NodeJS { MINIFLARE_WORKERD_CONFIG_DEBUG?: string; MINIFLARE_ASSERT_BODIES_CONSUMED?: "true"; MINIFLARE_WORKERD_AUTOGATES?: string; + MINIFLARE_WORKERD_V8_FLAGS?: string; } }