From cd6e15e87b1e7661456687bbb40606a687df5d40 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sat, 17 Oct 2026 16:41:50 -0400 Subject: [PATCH] lib: enable web worker api by default Signed-off-by: avivkeller --- doc/api/cli.md | 24 ++++++++++++------- doc/api/globals.md | 10 +++++--- doc/node.1 | 10 ++++---- src/node_options.cc | 2 +- src/node_options.h | 2 +- test/common/wpt.js | 6 +---- .../test-common-wpt-allowed-rejections.js | 2 +- test/parallel/test-common-wpt-backends.js | 2 +- .../test-common-wpt-webworker-error.js | 2 +- .../test-webworker-blob-module-url.js | 1 - test/parallel/test-webworker-disabled.js | 10 ++++++++ .../test-webworker-enabled-by-default.js | 13 ++++++++++ ...test-webworker-importscripts-conversion.js | 1 - .../test-webworker-postmessage-lifecycle.js | 1 - .../test-webworker-postmessage-overloads.js | 1 - test/parallel/test-webworker-ref-unref.js | 1 - .../test-webworker-typescript-disabled.js | 2 +- test/parallel/test-webworker-typescript.js | 1 - test/parallel/test-worker-spec-differences.js | 1 - 19 files changed, 57 insertions(+), 35 deletions(-) create mode 100644 test/parallel/test-webworker-disabled.js create mode 100644 test/parallel/test-webworker-enabled-by-default.js diff --git a/doc/api/cli.md b/doc/api/cli.md index b326cfeb2b94..0e3e769c783b 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -1742,14 +1742,6 @@ changes: Enable experimental WebAssembly System Interface (WASI) support. -### `--experimental-web-worker` - - - -Enable experimental support for the Web Worker API. - ### `--experimental-worker-inspection` + +> Stability: 1.1 - Active Development + +Disable support for the Web Worker API. + ### `--no-experimental-webstorage` -> 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 @@ -1475,9 +1479,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 6294c2af42cb..8d6c6447f1b0 100644 --- a/doc/node.1 +++ b/doc/node.1 @@ -938,9 +938,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. . @@ -1235,6 +1232,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. . @@ -2281,8 +2281,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 @@ -2347,6 +2345,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 6bf5a0270c78..2e0ff4a78440 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -788,7 +788,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 bb11922f84fb..e088cf634c0b 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -211,7 +211,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 29180fdeb358..6eea223635bb 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 e8f8ed113f3f..1f02ddd4b011 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 093ecd4dfd17..fdaf21a020d2 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 76738303cdf2..685832a640b6 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 7e51b7274464..bf2365632eb1 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 000000000000..cd9d154872b6 --- /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 000000000000..57409bb9aba4 --- /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 5ea252814284..df194a7a8920 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 e4199ed53726..2af58b78a82a 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 17b83191b309..88c8542b3dae 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 cff2bb5d097f..4b43d86be054 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 a19e5b122abd..78f329711700 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 058c1728f347..08762f7fd4a5 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 871745b99e04..7f67db5c43a0 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');