Commit 77e63793adc for nodejs

commit 77e63793adc78164cd3b5b5147d0c7ef02b543c2
Author: Aviv Keller <me@aviv.sh>
Date:   Wed Nov 11 03:27:59 2026 -0500

    lib: enable web worker api by default

    Signed-off-by: avivkeller <me@aviv.sh>
    PR-URL: https://github.com/nodejs/node/pull/65323
    Refs: https://github.com/nodejs/node/pull/64894
    Refs: https://github.com/nodejs/node/issues/43583
    Reviewed-By: Filip Skokan <panva.ip@gmail.com>
    Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
    Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

diff --git a/doc/api/cli.md b/doc/api/cli.md
index 415b65ac5ef..d9d1559c924 100644
--- a/doc/api/cli.md
+++ b/doc/api/cli.md
@@ -1766,14 +1766,6 @@ changes:

 Enable experimental WebAssembly System Interface (WASI) support.

-### `--experimental-web-worker`
-
-<!-- YAML
-added: v26.9.0
--->
-
-Enable experimental support for the Web Worker API.
-
 ### `--experimental-worker-inspection`

 <!-- YAML
@@ -2392,6 +2384,20 @@ changes:

 Disable the experimental [`node:vfs`][] module and `--vfs-load`.

+### `--no-experimental-web-worker`
+
+<!-- YAML
+added: v26.9.0
+changes:
+  - version: REPLACEME
+    pr-url: https://github.com/nodejs/node/pull/65323
+    description: This feature is now enabled by default.
+-->
+
+> Stability: 1.1 - Active Development
+
+Disable support for the Web Worker API.
+
 ### `--no-experimental-webstorage`

 <!-- YAML
@@ -4327,7 +4333,6 @@ one is included in the list below.
 * `--experimental-top-level-await`
 * `--experimental-vm-modules`
 * `--experimental-wasi-unstable-preview1`
-* `--experimental-web-worker`
 * `--experimental-websocket`
 * `--force-context-aware`
 * `--force-fips`
@@ -4360,6 +4365,7 @@ one is included in the list below.
 * `--no-experimental-sqlite`
 * `--no-experimental-strip-types`
 * `--no-experimental-vfs`
+* `--no-experimental-web-worker`
 * `--no-experimental-webstorage`
 * `--no-extra-info-on-fatal-exception`
 * `--no-force-async-hooks-checks`
diff --git a/doc/api/globals.md b/doc/api/globals.md
index f07ac97431b..15a741a242f 100644
--- a/doc/api/globals.md
+++ b/doc/api/globals.md
@@ -1320,10 +1320,14 @@ A browser-compatible implementation of {WebSocket}.

 <!-- YAML
 added: v26.9.0
+changes:
+  - version: REPLACEME
+    pr-url: https://github.com/nodejs/node/pull/65323
+    description: This feature is now enabled by default.
 -->

-> Stability: 1 - Experimental. Enable this API with the
-> [`--experimental-web-worker`][] CLI flag.
+> Stability: 1 - Experimental. Disable this API with the
+> [`--no-experimental-web-worker`][] CLI flag.

 A mostly browser-compatible implementation of Web Workers of the [HTML Standard][],
 implemented on top of [`node:worker_threads`][]. Threads created with it
@@ -1481,9 +1485,9 @@ A browser-compatible implementation of [`WritableStreamDefaultWriter`][].
 [Refable protocol]: process.md#processrefmayberefable
 [Web Crypto API]: webcrypto.md
 [`--experimental-eventsource`]: cli.md#--experimental-eventsource
-[`--experimental-web-worker`]: cli.md#--experimental-web-worker
 [`--localstorage-file`]: cli.md#--localstorage-filefile
 [`--no-experimental-global-navigator`]: cli.md#--no-experimental-global-navigator
+[`--no-experimental-web-worker`]: cli.md#--no-experimental-web-worker
 [`--no-experimental-webstorage`]: cli.md#--no-experimental-webstorage
 [`ByteLengthQueuingStrategy`]: webstreams.md#class-bytelengthqueuingstrategy
 [`CompressionStream`]: webstreams.md#class-compressionstream
diff --git a/doc/node.1 b/doc/node.1
index 7419eb9a34d..dcbd7251c80 100644
--- a/doc/node.1
+++ b/doc/node.1
@@ -954,9 +954,6 @@ Enable experimental ES Module support in the \fBnode:vm\fR module.
 .It Fl -experimental-wasi-unstable-preview1
 Enable experimental WebAssembly System Interface (WASI) support.
 .
-.It Fl -experimental-web-worker
-Enable experimental support for the Web Worker API.
-.
 .It Fl -experimental-worker-inspection
 Enable experimental support for the worker inspection with Chrome DevTools.
 .
@@ -1251,6 +1248,9 @@ Disable the experimental \fBnode:sqlite\fR module.
 .It Fl -no-experimental-vfs
 Disable the experimental \fBnode:vfs\fR module and \fB--vfs-load\fR.
 .
+.It Fl -no-experimental-web-worker
+Disable support for the Web Worker API.
+.
 .It Fl -no-experimental-webstorage
 Disable \fBWeb Storage\fR support.
 .
@@ -2305,8 +2305,6 @@ one is included in the list below.
 .It
 \fB--experimental-wasi-unstable-preview1\fR
 .It
-\fB--experimental-web-worker\fR
-.It
 \fB--experimental-websocket\fR
 .It
 \fB--force-context-aware\fR
@@ -2371,6 +2369,8 @@ one is included in the list below.
 .It
 \fB--no-experimental-vfs\fR
 .It
+\fB--no-experimental-web-worker\fR
+.It
 \fB--no-experimental-webstorage\fR
 .It
 \fB--no-extra-info-on-fatal-exception\fR
diff --git a/src/node_options.cc b/src/node_options.cc
index e141fab9e82..31bee077ccf 100644
--- a/src/node_options.cc
+++ b/src/node_options.cc
@@ -791,7 +791,7 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {
             "experimental Web Worker API",
             BOOL_FIELD(experimental_web_worker),
             kAllowedInEnvvar,
-            false);
+            true);
   AddOption("--experimental-websocket", "", NoOp{}, kAllowedInEnvvar);
   AddOption("--experimental-global-customevent", "", NoOp{}, kAllowedInEnvvar);
   AddOption("--experimental-sqlite",
diff --git a/src/node_options.h b/src/node_options.h
index d28560c5a53..dedd480fb4e 100644
--- a/src/node_options.h
+++ b/src/node_options.h
@@ -219,7 +219,7 @@ class EnvironmentOptions : public Options {
   DEFINE_BOOL_FIELD(experimental_bench) = EXPERIMENTALS_DEFAULT_VALUE;
   DEFINE_BOOL_FIELD(experimental_eventsource) = EXPERIMENTALS_DEFAULT_VALUE;
   DEFINE_BOOL_FIELD(experimental_ffi) = HAVE_FFI;
-  DEFINE_BOOL_FIELD(experimental_web_worker) = EXPERIMENTALS_DEFAULT_VALUE;
+  DEFINE_BOOL_FIELD(experimental_web_worker) = true;
   DEFINE_BOOL_FIELD(experimental_websocket) = true;
   DEFINE_BOOL_FIELD(experimental_sqlite) = HAVE_SQLITE;
   DEFINE_BOOL_FIELD(experimental_stream_iter) = EXPERIMENTALS_DEFAULT_VALUE;
diff --git a/test/common/wpt.js b/test/common/wpt.js
index 29180fdeb35..6eea223635b 100644
--- a/test/common/wpt.js
+++ b/test/common/wpt.js
@@ -865,11 +865,7 @@ class WPTRunner {
     this.resource = new ResourceLoader(path);
     this.concurrency = concurrency;

-    // Since we need to prepare the Web Worker APIs
-    // in the harness that runs on all WPT workers,
-    // we enable the API globally. This has no practical
-    // effect on the non-web-worker tests, however.
-    this.flags = ['--experimental-web-worker'];
+    this.flags = [];
     if (this.inspectBrk) {
       this.flags.push('--inspect-brk=0');
     }
diff --git a/test/parallel/test-common-wpt-allowed-rejections.js b/test/parallel/test-common-wpt-allowed-rejections.js
index e8f8ed113f3..1f02ddd4b01 100644
--- a/test/parallel/test-common-wpt-allowed-rejections.js
+++ b/test/parallel/test-common-wpt-allowed-rejections.js
@@ -45,7 +45,7 @@ async function check(backend, webWorker, {

   let result;
   const statuses = [];
-  const handle = backends[backend](['--experimental-web-worker'], workerData, {
+  const handle = backends[backend]([], workerData, {
     message(message) {
       if (message.type === 'result') {
         statuses.push(message.result.status);
diff --git a/test/parallel/test-common-wpt-backends.js b/test/parallel/test-common-wpt-backends.js
index 093ecd4dfd1..fdaf21a020d 100644
--- a/test/parallel/test-common-wpt-backends.js
+++ b/test/parallel/test-common-wpt-backends.js
@@ -18,7 +18,7 @@ const backendProbe = process.env.NODE_TEST_WPT_BACKEND_PROBE;

 const harnessPath = fixtures.path('wpt', 'resources', 'testharness.js');
 const specPath = fixtures.path('wpt-backends-spec.js');
-const execArgv = ['--experimental-web-worker'];
+const execArgv = [];

 function payload(throws) {
   return {
diff --git a/test/parallel/test-common-wpt-webworker-error.js b/test/parallel/test-common-wpt-webworker-error.js
index 76738303cdf..685832a640b 100644
--- a/test/parallel/test-common-wpt-webworker-error.js
+++ b/test/parallel/test-common-wpt-webworker-error.js
@@ -10,7 +10,7 @@ const { Worker } = require('worker_threads');

 const workerPath = path.join(__dirname, '../common/wpt/worker.js');
 const harnessPath = fixtures.path('wpt', 'resources', 'testharness.js');
-const execArgv = ['--experimental-web-worker'];
+const execArgv = [];
 const workerData = {
   testRelativePath: 'workers/error-after-result.any.js',
   wptRunner: path.join(__dirname, '../common/wpt.js'),
diff --git a/test/parallel/test-webworker-blob-module-url.js b/test/parallel/test-webworker-blob-module-url.js
index 7e51b727446..bf2365632eb 100644
--- a/test/parallel/test-webworker-blob-module-url.js
+++ b/test/parallel/test-webworker-blob-module-url.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-webworker-disabled.js b/test/parallel/test-webworker-disabled.js
new file mode 100644
index 00000000000..cd9d154872b
--- /dev/null
+++ b/test/parallel/test-webworker-disabled.js
@@ -0,0 +1,10 @@
+// Flags: --no-experimental-web-worker
+'use strict';
+
+// The Web Worker API is enabled by default, but can be opted out of.
+// Refs: https://github.com/nodejs/node/pull/65323
+
+require('../common');
+const assert = require('assert');
+
+assert.strictEqual(typeof Worker, 'undefined');
diff --git a/test/parallel/test-webworker-enabled-by-default.js b/test/parallel/test-webworker-enabled-by-default.js
new file mode 100644
index 00000000000..57409bb9aba
--- /dev/null
+++ b/test/parallel/test-webworker-enabled-by-default.js
@@ -0,0 +1,13 @@
+'use strict';
+
+// Regression test: the Web Worker API is enabled by default and must not
+// require the `--experimental-web-worker` flag.
+// Refs: https://github.com/nodejs/node/pull/65323
+
+require('../common');
+const assert = require('assert');
+const { Worker: WorkerThread } = require('worker_threads');
+
+assert.strictEqual(typeof Worker, 'function');
+assert.strictEqual(Worker.name, 'Worker');
+assert.notStrictEqual(Worker, WorkerThread);
diff --git a/test/parallel/test-webworker-importscripts-conversion.js b/test/parallel/test-webworker-importscripts-conversion.js
index 5ea25281428..df194a7a892 100644
--- a/test/parallel/test-webworker-importscripts-conversion.js
+++ b/test/parallel/test-webworker-importscripts-conversion.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-webworker-postmessage-lifecycle.js b/test/parallel/test-webworker-postmessage-lifecycle.js
index e4199ed5372..2af58b78a82 100644
--- a/test/parallel/test-webworker-postmessage-lifecycle.js
+++ b/test/parallel/test-webworker-postmessage-lifecycle.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-webworker-postmessage-overloads.js b/test/parallel/test-webworker-postmessage-overloads.js
index 17b83191b30..88c8542b3da 100644
--- a/test/parallel/test-webworker-postmessage-overloads.js
+++ b/test/parallel/test-webworker-postmessage-overloads.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-webworker-ref-unref.js b/test/parallel/test-webworker-ref-unref.js
index cff2bb5d097..4b43d86be05 100644
--- a/test/parallel/test-webworker-ref-unref.js
+++ b/test/parallel/test-webworker-ref-unref.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-webworker-typescript-disabled.js b/test/parallel/test-webworker-typescript-disabled.js
index a19e5b122ab..78f32971170 100644
--- a/test/parallel/test-webworker-typescript-disabled.js
+++ b/test/parallel/test-webworker-typescript-disabled.js
@@ -1,4 +1,4 @@
-// Flags: --experimental-web-worker --no-strip-types
+// Flags: --no-strip-types
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-webworker-typescript.js b/test/parallel/test-webworker-typescript.js
index 058c1728f34..08762f7fd4a 100644
--- a/test/parallel/test-webworker-typescript.js
+++ b/test/parallel/test-webworker-typescript.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');
diff --git a/test/parallel/test-worker-spec-differences.js b/test/parallel/test-worker-spec-differences.js
index 871745b99e0..7f67db5c43a 100644
--- a/test/parallel/test-worker-spec-differences.js
+++ b/test/parallel/test-worker-spec-differences.js
@@ -1,4 +1,3 @@
-// Flags: --experimental-web-worker
 'use strict';

 const common = require('../common');