Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
e24e698
crypto: add WebCrypto CryptoJob mode
panva Apr 25, 2026
b8fc182
crypto: remove async from WebCrypto methods
panva Apr 25, 2026
0cabd66
crypto: pass CryptoKey handles to KDF jobs
panva Apr 26, 2026
dfe2d47
crypto: harden WebCrypto against prototype pollution
panva May 16, 2026
c9dbb86
inspector: expose precise coverage start to JS runtime
Han5991 May 23, 2026
c9562dd
vfs: add minimal node:vfs subsystem
mcollina May 23, 2026
985b608
doc: fix double space in modules.md
watilde May 23, 2026
837910d
stream: flush each fused stateless transform
trivikr May 23, 2026
74ccf38
test_runner: fix --test-rerun-failures swallowing failures on retry
atlowChemi May 19, 2026
df09b2a
ffi: remove function signature property aliases
Renegade334 May 24, 2026
7a9feef
doc: edit Rust toolchain general install instructions
aduh95 May 24, 2026
8c3e9bd
test: get rid of unnecessary `AbortController` instanciations
aduh95 May 24, 2026
d79aad8
tools: fix skip of `test-internet` on forks
aduh95 May 24, 2026
8bc9547
doc: move hyperlinks outside of text blocks
avivkeller May 24, 2026
1ddb754
test_runner: dont buffer unordered events in process isolation mode
MoLow May 24, 2026
c58e5a1
tools: skip commit-lint on backport pull requests
marcopiraccini May 24, 2026
e98f2ba
test: reduce watch mode restart flakiness
trivikr May 24, 2026
1dbea7a
test: avoid test_runner watch restart in spec snapshot
trivikr May 24, 2026
c55b126
test: deflake async-hooks statwatcher test
trivikr May 25, 2026
0520174
quic: add doc note about certificate size limitations
jasnell May 17, 2026
444ba16
quic: flip preferred address policy default to 'ignore'
jasnell May 17, 2026
e883466
quic: refine rate limiting
jasnell May 17, 2026
15ad3a6
quic: add session creation rate limiting
jasnell May 17, 2026
495e534
quic: cache timestamp for address lru cache
jasnell May 17, 2026
ad4db1e
quic: add rate limiting docs
jasnell May 17, 2026
38e852c
quic: handle h3 max header size option
jasnell May 17, 2026
430f89e
quic: improve peer cert verification
jasnell May 17, 2026
59a4ec1
quic: add block list support for endpoints
jasnell May 17, 2026
813e42f
src: improve token return value check
jasnell May 17, 2026
866caa6
quic: add stream idle timeout
jasnell May 17, 2026
2e3daf6
quic: support hostname verification
jasnell May 23, 2026
8c495c8
stream: wait for push writer end fallback to drain
trivikr May 25, 2026
49dcaa0
test: update WPT for url to e4a4672e9e
nodejs-github-bot May 25, 2026
15d0c61
doc: fix double spaces in ERR_TLS_INVALID_PROTOCOL_METHOD
watilde May 25, 2026
c98ab68
test: update test426-fixtures to 9b9e225b5a63139e9a95cdd1bf874a8f0b9d131
nodejs-github-bot May 25, 2026
ecee55e
doc,lib: align WebCrypto names with spec
panva May 25, 2026
742849d
test: cover webcrypto prototype pollution systematically
panva May 25, 2026
b9203ee
src,sqlite: only pass `xFilter` when user provided a callback
aduh95 May 25, 2026
e2ad744
test: remove test-node-output-v8-warning
joyeecheung May 25, 2026
73c592b
tools: update nixpkgs-unstable to 3d8f0f3f72a6cd4d93d0ad13203f2ea1cb7
nodejs-github-bot May 26, 2026
3393399
crypto: coerce -0 keylen to +0 in pbkdf2 and scrypt
ljharb May 24, 2026
8bb63ed
crypto: update root certificates to NSS 3.123.1
nodejs-github-bot May 26, 2026
460c350
debugger,test: deflake resume failure test and add debug logs
joyeecheung May 26, 2026
956e2a2
lib,permission: add permission.drop
RafaelGSS May 26, 2026
55b8a30
build,win: fix VS2022 arm64 PGO build
StefanStojanovic May 26, 2026
85d4a5f
doc: clarify `filter` option of `sqlite.database.applyChangeset`
aduh95 May 26, 2026
cebe424
test_runner: fix suite diagnostic chanel end
MoLow May 26, 2026
92f48f4
tools: enforce iterator result property order
trivikr May 26, 2026
75c1982
test: deflake test-webcrypto-crypto-job-mode
panva May 26, 2026
2d26bf4
tools: bump brace-expansion from 5.0.5 to 5.0.6 in /tools/eslint
dependabot[bot] May 26, 2026
424b9c3
doc: fix URL postMessage example in worker_threads
kovan May 26, 2026
cd58afc
doc: explicitly ask for reproducible in JS
RafaelGSS May 26, 2026
13feb34
doc: generate llms.txt
araujogui May 26, 2026
221ffc0
test: deflake test-debugger-probe-timeout
joyeecheung May 27, 2026
31c40f0
ffi: validate 'void' as parameter type in getFunction and getFunctions
Anshikakalpana May 27, 2026
fda667a
src: fix crash when reading length on Storage.prototype
3zrv May 27, 2026
7dbded2
stream: reject pending reads on iterator throw
trivikr May 27, 2026
eb73415
tools: bump @node-core/doc-kit in /tools/doc in the doc group
dependabot[bot] May 27, 2026
83991ba
lib: fix typos in esm loader comments
RonGamzu May 27, 2026
2cdea86
stream: fix lint error (#63598)
aduh95 May 27, 2026
df52c21
doc: improve `fs.StatFs` properties descriptions
aymanxdev Apr 3, 2026
8257091
src: fix ContextifyContext property definer interception result
legendecas May 27, 2026
47d964b
meta: skip scheduled workflows on forks
JamieMagee May 27, 2026
770385a
src: dispatch ToV8Value(string_view) via StringBytes::Encode
mertcanaltin May 18, 2026
4639dcb
src: skip duplicate UTF-8 validation in TextDecoder fatal path
mertcanaltin May 10, 2026
d8ac301
deps: cherry-pick e807d4e379 from SQLite
junius-sec May 28, 2026
57427b5
test: shorten path in net pipe connect errors
mcollina May 28, 2026
bac704d
http2: emit session close before stream close
mcollina May 28, 2026
8d0a3b8
test_runner: ignore erased TS lines in coverage
mcollina May 28, 2026
0d3d65c
meta: add `vfs` subsystem label
Renegade334 May 28, 2026
2cd9d2c
doc: drop --experimental from --permission
RafaelGSS May 28, 2026
d854212
module: load ESM helpers eagerly in the snapshot
joyeecheung May 28, 2026
5174c66
stream: serialize concurrent share consumer reads
trivikr May 28, 2026
4d21e86
tools: add lint rule for aborted AbortController
trivikr May 28, 2026
5c78025
doc: update `git node land` instructions for security releases
aduh95 May 28, 2026
54f7e89
build: def `NODE_USE_NODE_CODE_CACHE` only used in node_mksnapshot
legendecas May 28, 2026
e1ae3a5
quic: add proper error codes & messages for QUIC failures
pimterry May 28, 2026
793eff8
meta: label "source maps" PRs
legendecas May 29, 2026
40dc5a1
stream: use data listener for compose forwarding
trivikr May 29, 2026
dbec31c
buffer: increase Buffer.poolSize default to 64 KiB
mcollina May 29, 2026
569369f
vfs: dispatch fs/promises to mounted VFS instances
mcollina May 29, 2026
31965d6
errors: handle V8 warnings in DisallowJavascriptExecutionScope
DivyanshuX9 May 29, 2026
6f29e1a
util: create hex style cache and fast path
araujogui May 29, 2026
30a7e28
deps: upgrade npm to 11.16.0
npm-cli-bot May 29, 2026
51c89fa
http: add httpValidation option to configure header value validation
RajeshKumar11 May 30, 2026
74ec625
lib: define `kEnumerableProperty` atomically
aduh95 May 30, 2026
27199ee
stream: switch to internal `sleep` binding
aduh95 May 30, 2026
79def6d
util: remove unused functions
aduh95 May 30, 2026
edea905
Create +cc_library_shared
Premiermoney May 30, 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
  •  
  •  
  •  
52 changes: 52 additions & 0 deletions +cc_library_shared
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..bd7cc5f
--- /dev/null
+++ b/Android.bp

@@ -0,0 +1,45 @@
{
+ name: "uwb_uci.helios",
+ defaults: [
+ "hidl_defaults",
+ ],
+ proprietary: true,
+ srcs: [
+ "halimpl/fwd/sr1xx/*.cc",
+ "halimpl/inc/common/*.cc",
+ "halimpl/hal/*.cc",
+ "halimpl/log/*.cc",
+ "halimpl/tml/*.cc",
+ "halimpl/utils/*.cc",
+ ],
+ shared_libs: [
+ "android.hardware.uwb-V1-ndk",
+ "libcutils",
+ "liblog",
+ "libhardware",
+ "libbase",
+ "libchrome",
+ "libutils",
+ "libdl",
+ "libhidlbase"
+ ],
+ local_include_dirs: [
+ "halimpl/fwd/sr1xx",
+ "halimpl/inc",
+ "halimpl/inc/common",
+ "halimpl/hal",
+ "halimpl/log",
+ "halimpl/tml",
+ "halimpl/utils",
+ "extns/inc",
+ ],
+
+ cflags: [
+ "-DGENERIC",
+ "-DSOC_DEFAULT",
+ "-DBUILDCFG=1",
+ "-Wno-deprecated-register",
+ "-Wno-unused-parameter",
+ "-Wno-missing-field-initializers",
+ ],
+}
4 changes: 4 additions & 0 deletions .github/label-pr-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ subSystemLabels:
/^lib\/internal\/url\.js$/: whatwg-url
/^lib\/internal\/modules\/esm/: esm
/^lib\/internal\/modules/: module
/^lib\/internal\/source_map/: source maps
/^lib\/internal\/webstreams/: web streams
/^lib\/internal\/test_runner/: test_runner
/^lib\/internal\/v8\//: v8 module
Expand All @@ -128,6 +129,8 @@ exlusiveLabels:
/^test\/report\//: test, report
/^test\/fixtures\/es-module/: test, esm
/^test\/es-module\//: test, esm
/^test\/fixtures\/source-map/: test, source maps
/^test\/fixtures\/test-426/: test, source maps
/^test\/fixtures\/wpt\/streams\//: test, web streams
/^test\/fixtures\/typescript/: test, strip-types
/^test\/module-hooks\//: test, module, loaders
Expand Down Expand Up @@ -214,6 +217,7 @@ allJsSubSystems:
- url
- util
- v8
- vfs
- vm
- wasi
- worker
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ permissions:

jobs:
analyze:
if: github.repository == 'nodejs/node'
name: Analyze
runs-on: ubuntu-slim
permissions:
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/commit-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
pull_request:
branches:
- main
- v[0-9]+.x-staging

env:
NODE_VERSION: lts/*
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/daily.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ permissions:

jobs:
build-lto:
if: github.repository == 'nodejs/node' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ permissions: read-all

jobs:
analysis:
if: github.repository == 'nodejs/node' || github.event_name == 'workflow_dispatch'
name: Scorecard analysis
# cannot use ubuntu-slim here because ossf/scorecard-action is dockerized
# cannot use ubuntu-24.04-arm here because the docker image is x86 only
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-internet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ permissions:

jobs:
test-internet:
if: github.event_name == 'schedule' && github.repository == 'nodejs/node' || github.event.pull_request.draft == false
if: (github.event_name == 'schedule' && github.repository == 'nodejs/node') || (github.event.pull_request && github.event.pull_request.draft == false)
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
25 changes: 9 additions & 16 deletions BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,23 +237,11 @@ tarball and/or browse the git repository checked out at the relevant tag.
### Prerequisites

* [A supported version of Python][Python versions] for building and testing.
* A Rust toolchain if [building Node.js with Temporal support](#building-nodejs-with-temporal-support)
is required (enabled by default starting in Node.js 26).
* A Rust toolchain if [building Node.js with Temporal support](#building-nodejs-with-temporal-support).
* Memory: at least 8GB of RAM is typically required when compiling with 4 parallel jobs (e.g: `make -j4`).

### Unix and macOS

Consult the official [Install Rust](https://rust-lang.org/tools/install/)
instructions to install a Rust toolchain, required for Temporal support introduced in Node.js 25.4.0.
Individual packages such as `rust` and `cargo` in some operating system distributions may be considered
as an alternative, for example in CI environments.
Consult with relevant operating system documentation to ensure that packages
meet the minimum version specified in the
[Building Node.js with Temporal support](#building-nodejs-with-temporal-support) section,
as packaged versions may lag behind the `stable` version installed by the official instructions.
Avoid mixing `rustup` together with `rust` and `cargo` package installations, due to
potential version conflicts.

#### Unix prerequisites

* `gcc` and `g++` >= 13.2 or `clang` and `clang++` >= 19.1
Expand Down Expand Up @@ -1062,14 +1050,19 @@ enable FIPS support in Node.js.

Node.js supports the [Temporal](https://github.com/tc39/proposal-temporal) APIs, when
linking statically or dynamically with a version of [temporal\_rs](https://github.com/boa-dev/temporal).

Temporal support is enabled by default starting in Node.js 26. Building it
requires a Rust toolchain:
Building it requires a Rust toolchain:

* rustc >= 1.82 (with LLVM >= 19)
* cargo >= 1.82

Refer to [Install Rust](https://rust-lang.org/tools/install/) for instructions.
Individual packages such as `rust` and `cargo` in some operating system distributions may be considered
as an alternative, for example in CI environments.
Consult with relevant operating system documentation to ensure that packages
meet the minimum version specified above,
as packaged versions may lag behind the `stable` version installed by the official instructions.
Avoid mixing `rustup` together with `rust` and `cargo` package installations, due to
potential version conflicts.

If `--v8-enable-temporal-support` and `--v8-disable-temporal-support` are both
omitted, `configure.py` probes for `cargo` and `rustc`. If either is missing,
Expand Down
18 changes: 17 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -856,7 +856,7 @@ VERSION=v$(RAWVER)

.PHONY: doc-only
.NOTPARALLEL: doc-only
doc-only: $(apidoc_dirs) $(apidocs_html) $(apidocs_json) out/doc/api/all.html out/doc/api/all.json out/doc/apilinks.json ## Builds the docs with the local or the global Node.js binary.
doc-only: $(apidoc_dirs) $(apidocs_html) $(apidocs_json) out/doc/api/all.html out/doc/api/all.json out/doc/llms.txt out/doc/apilinks.json ## Builds the docs with the local or the global Node.js binary.

.PHONY: doc
doc: $(NODE_EXE) doc-only ## Build Node.js, and then build the documentation with the new binary.
Expand Down Expand Up @@ -901,6 +901,22 @@ $(apidocs_html) $(apidocs_json) out/doc/api/all.html out/doc/api/all.json &: $(a
fi
endif

out/doc/llms.txt: $(apidoc_sources) tools/doc/node_modules | out/doc
@if [ "$(shell $(node_use_openssl_and_icu))" != "true" ]; then \
echo "Skipping $@ (no crypto and/or no ICU)"; \
else \
$(call available-node, \
$(DOC_KIT) generate \
-t llms-txt \
-i doc/api/*.md \
--ignore $(skip_apidoc_files) \
-o $(@D) \
-c ./CHANGELOG.md \
-v $(VERSION) \
--type-map doc/type-map.json \
) \
fi

out/doc/apilinks.json: $(wildcard lib/*.js) tools/doc/node_modules | out/doc
@if [ "$(shell $(node_use_openssl_and_icu))" != "true" ]; then \
echo "Skipping $@ (no crypto and/or no ICU)"; \
Expand Down
3 changes: 2 additions & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ When reporting security vulnerabilities, reporters must adhere to the following

4. **Report Quality**
* Provide clear, detailed steps to reproduce the vulnerability.
* Include reproducible code written in JavaScript.
* Include only the minimum proof of concept required to demonstrate the issue.
* Remove any malicious payloads or components that could cause harm.

Expand Down Expand Up @@ -376,7 +377,7 @@ the community they pose.
#### Permission Model Boundaries (`--permission`)

The Node.js [Permission Model](https://nodejs.org/api/permissions.html)
(`--experimental-permission`) is an opt-in mechanism that limits which
(`--permission`) is an opt-in mechanism that limits which
resources a Node.js process may access. It is designed to reduce the blast
radius of mistakes in trusted application code, **not** to act as a security
boundary against intentional misuse or a compromised process.
Expand Down
62 changes: 62 additions & 0 deletions benchmark/fs/readfile-utf8-fastpath.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
'use strict';

const common = require('../common.js');
const fs = require('fs');
const path = require('path');
const tmpdir = require('../../test/common/tmpdir');

const bench = common.createBenchmark(main, {
size: [64, 1024, 16384, 262144, 4194304],
content: ['ascii', 'latin1', 'utf8_mixed'],
source: ['path', 'fd'],
n: [3e3],
});

function buildContent(kind, size) {
if (kind === 'ascii') {
return Buffer.alloc(size, 0x61); // 'a'
}
if (kind === 'latin1') {
// 'é' in UTF-8 is 0xC3 0xA9 (2 bytes per char)
const pair = Buffer.from([0xC3, 0xA9]);
const buf = Buffer.alloc(size);
for (let i = 0; i + 2 <= size; i += 2) pair.copy(buf, i);
return buf;
}
if (kind === 'utf8_mixed') {
// mixed ASCII + 3-byte CJK (U+4E2D 中 = E4 B8 AD)
const cjk = Buffer.from([0xE4, 0xB8, 0xAD]);
const buf = Buffer.alloc(size);
let i = 0;
while (i + 4 <= size) {
buf[i++] = 0x61;
cjk.copy(buf, i);
i += 3;
}
return buf;
}
throw new Error('unknown content: ' + kind);
}

function main({ n, size, content, source }) {
tmpdir.refresh();
const file = path.join(tmpdir.path, `bench-${content}-${size}.bin`);
fs.writeFileSync(file, buildContent(content, size));

let arg;
let shouldClose = false;
if (source === 'fd') {
arg = fs.openSync(file, 'r');
shouldClose = true;
} else {
arg = file;
}

bench.start();
for (let i = 0; i < n; i++) {
fs.readFileSync(arg, 'utf8');
}
bench.end(n);

if (shouldClose) fs.closeSync(arg);
}
63 changes: 60 additions & 3 deletions benchmark/streams/compose.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,35 @@ const {
} = require('node:stream');

const bench = common.createBenchmark(main, {
n: [1e3],
type: ['creation', 'throughput'],
n: [1, 1e3],
streams: [100],
chunks: [1e4],
}, {
combinationFilter({ type, n }) {
return type === 'creation' ? n === 1e3 : n === 1;
},
test: {
n: [1, 1e3],
type: ['creation', 'throughput'],
},
});

function main({ n }) {
function main({ type, n, streams, chunks }) {
switch (type) {
case 'creation':
return benchCreation(n, streams);
case 'throughput':
return benchThroughput(n, streams, chunks);
}
}

function benchCreation(n, numberOfPassThroughs) {
const cachedPassThroughs = [];
const cachedReadables = [];
const cachedWritables = [];

for (let i = 0; i < n; i++) {
const numberOfPassThroughs = 100;
const passThroughs = [];

for (let i = 0; i < numberOfPassThroughs; i++) {
Expand All @@ -40,3 +59,41 @@ function main({ n }) {
}
bench.end(n);
}

function benchThroughput(n, numberOfPassThroughs, chunks) {
const chunk = Buffer.alloc(1024);

let i = 0;
bench.start();

function run() {
if (i++ === n) {
bench.end(n * chunks);
return;
}

const passThroughs = [];
for (let i = 0; i < numberOfPassThroughs; i++) {
passThroughs.push(new PassThrough());
}

let remaining = chunks;
const composed = compose(...passThroughs);
composed.on('data', () => {});
composed.on('end', run);

write();

function write() {
while (remaining-- > 0) {
if (!composed.write(chunk)) {
composed.once('drain', write);
return;
}
}
composed.end();
}
}

run();
}
18 changes: 16 additions & 2 deletions benchmark/util/style-text.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,22 @@ const common = require('../common.js');
const { styleText } = require('node:util');
const assert = require('node:assert');

// 1000 distinct hex colors to exercise the cache under high-miss conditions.
// Spread evenly across hue space so colors are valid and maximally varied.
const kHexColorCount = 1000;
const toHex = (n) => n.toString(16).padStart(2, '0');
const hexColors = Array.from({ length: kHexColorCount }, (_, i) => {
const r = (i * 37) & 0xff;
const g = (i * 73) & 0xff;
const b = (i * 137) & 0xff;
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
});

const bench = common.createBenchmark(main, {
messageType: ['string', 'number', 'boolean', 'invalid'],
format: ['red', 'italic', 'invalid', '#ff0000'],
// '#rotating' cycles through kHexColorCount distinct colors to simulate
// the high-miss-rate / large-cache scenario (e.g. user-randomised colors).
format: ['red', 'italic', 'invalid', '#ff0000', '#rotating'],
validateStream: [1, 0],
n: [1e3],
});
Expand All @@ -31,9 +44,10 @@ function main({ messageType, format, validateStream, n }) {

bench.start();
for (let i = 0; i < n; i++) {
const fmt = format === '#rotating' ? hexColors[i % kHexColorCount] : format;
let colored = '';
try {
colored = styleText(format, str, { validateStream });
colored = styleText(fmt, str, { validateStream });
assert.ok(colored); // Attempt to avoid dead-code elimination
} catch {
// eslint-disable no-empty
Expand Down
Loading
Loading