Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9cf2ce7
deps: update perfetto to 57.2
nodejs-github-bot Aug 14, 2026
38e3955
deps: cherry-pick libuv/libuv@e640dc9
Aug 14, 2026
553aec1
doc: document open pull request limit
mcollina Aug 14, 2026
bc813a7
stream: preserve falsy cancellation reasons
trivikr Aug 14, 2026
c4b755e
sqlite: reject connection access from authorizer callbacks
TrevorBurnham Aug 14, 2026
c8996ea
sqlite: add stmt persistent flag
araujogui Aug 14, 2026
4551732
stream: speed up async iteration of Readable
mcollina Aug 14, 2026
3e4d2e4
benchmark: apply `highWaterMark` in webstreams `pipe-to`
mcollina Aug 8, 2026
ec1a8df
stream: cut promise churn in webstreams hot paths
mcollina Aug 8, 2026
2929417
stream: consolidate non-op algorithm callbacks
mcollina Aug 8, 2026
91aaf05
doc: fix SQLite changeset constant descriptions
greenheadHQ Aug 15, 2026
c55fa12
test: wait for FFI background optimization
trivikr Aug 15, 2026
9ad097b
quic: fix wake up blob
martenrichter Aug 15, 2026
c2b2e3f
test: use for-of instead of forEach
devfep Aug 15, 2026
c7b962c
sqlite: add diagnostic channel
araujogui Aug 15, 2026
5615b25
test: accomodate multi-global tests in WPT{Runner,TestSpec,Report}
panva Aug 1, 2026
c757550
test: add opt-in process WPT runner
panva Aug 4, 2026
b9afdd0
worker: add support for Web Workers
avivkeller Aug 1, 2026
78cca36
test: enable multi-global WPTs
panva Aug 4, 2026
c73d0b1
worker: add wpt tests for Web Workers
avivkeller Aug 1, 2026
30bff4a
test: convert forEach to for in test-constant.js file
Nixxy25 Aug 13, 2026
8606604
cli: add No-Op `--experimental-repl-await`
avivkeller Aug 4, 2026
86c871e
test: replace `forEach()` with `for...of` in parallel tests
pmarkert Aug 15, 2026
d099639
test: convert test-async-local-storage-bind to async loop
freida-code Aug 13, 2026
04a0c27
tools: update nixpkgs-unstable to 6b5e5b7a6631f065bf6908986990b37d845
nodejs-github-bot Aug 16, 2026
46cac5a
doc: add missing `added:` tags to `fs.lchmod`
lazerg Aug 16, 2026
ad7a5b8
build: update binary-upload to use correct tarball name
sxa Aug 16, 2026
fbb6c1c
http,http2: speed up header validation and write coalescing
anonrig Aug 16, 2026
62327c4
http,http2: coalesce chunked end() and cache status lines
anonrig Aug 16, 2026
1a2c1ed
http: write coalesced chunked headers as latin1
anonrig Aug 16, 2026
69766d5
http: keep regex header-value checks
anonrig Aug 16, 2026
1ec86ff
http: keep incoming headers in C++ until accessed
anonrig Aug 16, 2026
5554cbc
http: keep incoming headers packed until accessed
anonrig Aug 16, 2026
4ca2f93
http: format and lint node_http_parser.cc
anonrig Aug 17, 2026
1663db2
http: address review feedback for packed headers
cursoragent Aug 17, 2026
df53247
http: fix lint in review-feedback follow-up
cursoragent Aug 17, 2026
855b729
test: add --expose-internals flags for packed header tests
cursoragent Aug 18, 2026
37317f2
test: cover packed-header fallbacks after materialization
cursoragent Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,8 @@ See [details on our policy on Code of Conduct](./doc/contributing/code-of-conduc

Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `nodejs/node` repository.
Contributors who are not Collaborators may have no more than 10 pull requests
open at a time.

*[Dependencies](./doc/contributing/pull-requests.md#dependencies)
*[Setting up your local environment](./doc/contributing/pull-requests.md#setting-up-your-local-environment)
Expand Down
16 changes: 8 additions & 8 deletions Makefile
Original file line numberDiff line numberDiff line change
Expand Up@@ -1449,15 +1449,15 @@ binary: $(BINARYTAR) ## Build release binary tarballs.
# Note: this is strictly for release builds on release machines only.
binary-upload: binary
ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)"
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.gz.done"
chmod 664 $(BINARYNAME).tar.gz
scp -p $(BINARYNAME).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.gz.done"
ifeq ($(XZ), 1)
chmod 664 $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
scp -p $(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-$(OSTYPE)-$(ARCH).tar.xz.done"
chmod 664 $(BINARYNAME).tar.xz
scp -p $(BINARYNAME).tar.xz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz
ssh $(STAGINGSERVER) "rclone copyto nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz $(CLOUDFLARE_BUCKET)/nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz"
ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(BINARYNAME).tar.xz.done"
endif

.PHONY: bench-all
Expand Down
1 change: 1 addition & 0 deletions benchmark/misc/startup-core.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -64,6 +64,7 @@ function main({ n, script, mode }) {
const warmup = 3;
const state = { n, finished: -warmup };
if (mode === 'worker') {
// eslint-disable-next-line no-global-assign
Worker = require('worker_threads').Worker;
spawnWorker(script, bench, state);
} else {
Expand Down
42 changes: 42 additions & 0 deletions benchmark/sqlite/sqlite-diagnostic-channel.js
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
'use strict';
const common = require('../common.js');
const sqlite = require('node:sqlite');
const dc = require('node:diagnostics_channel');
const assert = require('node:assert');

const bench = common.createBenchmark(main, {
n: [1e5],
mode: ['none', 'subscribed', 'unsubscribed'],
});

function main(conf) {
const { n, mode } = conf;

const db = new sqlite.DatabaseSync(':memory:');
db.exec('CREATE TABLE t (x INTEGER)');
const insert = db.prepare('INSERT INTO t VALUES (?)');

let subscriber;
if (mode === 'subscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
} else if (mode === 'unsubscribed') {
subscriber = () => {};
dc.subscribe('sqlite.db.query', subscriber);
dc.unsubscribe('sqlite.db.query', subscriber);
}
// mode === 'none': no subscription ever made

let result;
bench.start();
for (let i = 0; i < n; i++) {
result = insert.run(i);
}
bench.end(n);

if (mode === 'subscribed') {
dc.unsubscribe('sqlite.db.query', subscriber);
}

assert.ok(result !== undefined);
}
10 changes: 4 additions & 6 deletions benchmark/webstreams/pipe-to.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,29 +7,27 @@ const {

const bench = common.createBenchmark(main, {
n: [5e5],
highWaterMarkR: [512, 1024, 2048, 4096],
highWaterMarkW: [512, 1024, 2048, 4096],
highWaterMarkR: [1, 1024, 4096],
highWaterMarkW: [1, 1024, 4096],
});


async function main({ n, highWaterMarkR, highWaterMarkW }) {
const b = Buffer.alloc(1024);
let i = 0;
const rs = new ReadableStream({
highWaterMark: highWaterMarkR,
pull: function(controller) {
if (i++ < n) {
controller.enqueue(b);
} else {
controller.close();
}
},
});
}, { highWaterMark: highWaterMarkR });
const ws = new WritableStream({
highWaterMark: highWaterMarkW,
write(chunk, controller) {},
close() { bench.end(n); },
});
}, { highWaterMark: highWaterMarkW });

bench.start();
rs.pipeTo(ws);
Expand Down
20 changes: 20 additions & 0 deletions deps/perfetto/LICENSE
Original file line numberDiff line numberDiff line change
Expand Up@@ -224,6 +224,26 @@ Files: src/trace_processor/perfetto_sql/stdlib/chromium/*, protos/third_party/ch
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


------------------

Files: src/trace_processor/perfetto_sql/syntaqlite/syntaqlite_perfetto.{c, h}

Copyright 2025 The syntaqlite Authors. All rights reserved.

Machine-generated amalgamation of syntaqlite runtime + Perfetto dialect
sources (https://github.com/LalitMaganti/syntaqlite). Portions derive
from SQLite's public-domain `parse.y` grammar.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


------------------

Files: src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.{c, h}
Expand Down
2 changes: 1 addition & 1 deletion deps/perfetto/VERSION
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
54.0
57.2
Loading