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');