Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
6735585
deps: update googletest to 279f847
nodejs-github-bot Oct 14, 2025
42729f0
src: stop using deprecated v8::Context::GetIsolate
targos Oct 14, 2025
8c8525c
doc: fix not working code example in vm docs
arturgawlik Oct 14, 2025
64fc625
inspector: support handshake response for websocket inspection
islandryu Oct 14, 2025
4395fe1
http: add optimizeEmptyRequests server option
RafaelGSS Oct 14, 2025
be1b84f
module: handle null source from async loader hooks in sync hooks
joyeecheung Oct 14, 2025
f1aa1ea
inspector: add network payload buffer size limits
legendecas Oct 15, 2025
21bcd0e
deps: V8: cherry-pick 3d0f462a17ff
joyeecheung Sep 16, 2025
1bbcdf9
benchmark: add vm.SourceTextModule benchmark
joyeecheung Oct 10, 2025
6f3b16d
esm: use index-based resolution callbacks
joyeecheung Aug 7, 2025
a40e533
src: add a default branch for module phase
legendecas Oct 15, 2025
14f3189
tools: add inspector_protocol updater
legendecas Oct 15, 2025
0f0d3c0
doc: fix `blob.bytes()` heading level
xty Oct 16, 2025
8492bc6
doc: add --heap-snapshot-on-oom to useful v8 flag
jakecastelli Oct 17, 2025
afdb362
src: use `Utf8Value` and `TwoByteValue` instead of V8 helpers
addaleax Oct 13, 2025
11ebb04
tools: add C++ lint rule to avoid using `String::Utf8Value`
addaleax Oct 13, 2025
5dd670b
src: initial enablement of IsolateGroups
jasnell Oct 17, 2025
8caae1a
test: move sea tests into test/sea
joyeecheung Oct 13, 2025
26b01bf
test: skip sea tests on x64 macOS
joyeecheung Oct 13, 2025
bac70c6
doc: document wildcard supported by tools/test.py
joyeecheung Oct 17, 2025
ffeebeb
test: make test-worker-prof more tolerant
joyeecheung Oct 17, 2025
405a9c4
test: parallelize test-without-async-context-frame correctly
joyeecheung Oct 17, 2025
9ecaf41
typings: delete undefined property in ConfigBinding
whsung0330 Oct 14, 2025
09ae6fc
typings: add missing properties in HTTPParser
whsung0330 Oct 14, 2025
ef4c596
typings: add missing properties and method in Worker
whsung0330 Oct 14, 2025
e3c3b48
test: ignore EPIPE errors in https proxy invalid URL test
joyeecheung Oct 18, 2025
df8396a
src: replace Environment::GetCurrent with args.GetIsolate
KimSH39 Oct 18, 2025
47fa765
tools: optimize wildcard execution in tools/test.py
joyeecheung Oct 18, 2025
e600711
benchmark: add benchmark for leaf source text modules
joyeecheung Oct 12, 2025
79b2387
vm: make vm.Module.evaluate() conditionally synchronous
joyeecheung Oct 10, 2025
30451d3
test: fix incorrect calculation in test-perf-hooks.js
joyeecheung Oct 18, 2025
8a6de38
doc, assert: correct order of changes entries
Flarna Oct 18, 2025
9e6d6ce
util: mark special properties when inspecting them
BridgeAR Oct 18, 2025
a507308
tools: fix inspector_protocol updater
legendecas Oct 18, 2025
8ccff0d
doc: update decorator documentation to reflect actual policy
salman-aziz-4425 Oct 19, 2025
36837fa
src: use cached primordials_string
KimSH39 Oct 19, 2025
04cc7aa
build: remove V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE defs
joyeecheung Oct 19, 2025
a07f32e
test: split test-runner-watch-mode-kill-signal
joyeecheung Oct 19, 2025
59223a7
meta: loop userland-migrations in deprecations
legendecas Oct 19, 2025
17fde3f
build: build v8 with -fvisibility=hidden -fvisibility-inlines-hidden
joyeecheung Oct 19, 2025
4b23ac8
test: fix status when compiled without inspector
aduh95 Oct 19, 2025
99e357a
doc: use `any` for `worker_threads.Worker` 'error' event argument `err`
jonasgeiler Oct 19, 2025
f437204
src: add watch config namespace
marco-ippolito Oct 9, 2025
4a86016
util: use more defensive code when inspecting error objects
aduh95 Oct 20, 2025
a02897e
meta: move one or more collaborators to emeritus
nodejs-github-bot Oct 20, 2025
8596891
deps: update inspector_protocol to af7f5a8173fdbc29f0835ec94395932e328b
nodejs-github-bot Oct 21, 2025
aacfc0d
deps: update corepack to 0.34.1
nodejs-github-bot Oct 21, 2025
9310284
build: use call command when calling python configure
ZenMasterJacob20011 Oct 21, 2025
6e8b029
tools: limit inspector protocol PR title length
legendecas Oct 21, 2025
063fbd8
msi: fix WiX warnings
StefanStojanovic Oct 22, 2025
3d89331
test_runner: use module.registerHooks in module mocks
joyeecheung Oct 22, 2025
6bacb65
doc, module: change async customization hooks to experimental
Flarna Oct 22, 2025
6de2407
test: fix small compile warning in test_network_requests_buffer.cc
xiaocainiao633 Oct 22, 2025
e8fdd8d
tools: update gyp-next to 0.20.5
nodejs-github-bot Oct 22, 2025
064c8c5
doc: add missing CAA type to dns.resolveAny() & dnsPromises.resolveAny()
hkleungai Oct 22, 2025
2d48d17
module: refactor and clarify async loader hook customizations
joyeecheung Oct 23, 2025
22fa6bd
build: ibmi follow aix visibility
sravani1510 Oct 24, 2025
563e131
doc: remove unnecessary statement of web storage
deokjinkim Oct 24, 2025
0b38de3
test: put helper in test-runner-output into common
joyeecheung Oct 24, 2025
12773d1
test: increase debugger waitFor timeout on macOS
legendecas Oct 24, 2025
e83dbcb
test,crypto: sha3 algorithms aren't supported with BoringSSL
codebytere Oct 25, 2025
8a20530
crypto: update root certificates to NSS 3.116
nodejs-github-bot Oct 25, 2025
e5559f3
win: upgrade Visual Studio workload from 2019 to 2022
gengjiawen Oct 25, 2025
3d183e3
test,crypto: fix conditional SHA3-* skip on BoringSSL
panva Oct 25, 2025
29a5855
test: ensure assertions are reachable in `test/addons`
aduh95 Oct 25, 2025
4a5d7a4
src: conditionally disable source phase imports by default
codebytere Oct 26, 2025
377e8ce
tls: avoid external memory leak on invalid protocol versions
codebytere Oct 26, 2025
7a6542c
test: skip failing test on macOS 15.7+
aduh95 Oct 26, 2025
5d5c848
tools: run CI with shared libs on GHA
aduh95 Oct 17, 2025
f402b4e
tools: show diff alongside the error in Nix linter
aduh95 Oct 19, 2025
ffec592
meta: fix typo in test-shared workflow name
Ronitsabhaya75 Oct 19, 2025
03b0347
tools: disable inspector on macOS-shared to reduce flakiness
aduh95 Oct 21, 2025
cb615b1
tools: skip test-shared workflow for draft PRs
targos Oct 24, 2025
ae4858c
tools: add an option to generate lighter archives
aduh95 Sep 8, 2025
425a187
doc: mention more codemods in `deprecations.md`
AugustinMauroy Oct 27, 2025
95644a4
http: lazy allocate cookies array
ronag Oct 27, 2025
2e55c6a
sqlite: allow setting defensive flag
louwers Oct 27, 2025
bb27766
benchmark: improve cpu.sh for safety and usability
meteorqz6 Oct 27, 2025
fe91c0f
deps: update simdjson to 4.0.7
nodejs-github-bot Oct 27, 2025
0ecbb80
lib: fix typo in createBlobReaderStream
SeokhunEom Oct 27, 2025
267e1b3
src: add COUNT_GENERIC_USAGE utility for tests
joyeecheung Oct 27, 2025
dc93d69
src: fix timing of snapshot serialize callback
joyeecheung Oct 27, 2025
1da054d
2025-10-28, Version 25.1.0 (Current)
aduh95 Oct 28, 2025
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
  •  
  •  
  •  
6 changes: 4 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,7 @@
/doc/contributing/maintaining/maintaining-single-executable-application-support.md @nodejs/single-executable
/src/node_sea* @nodejs/single-executable
/test/fixtures/postject-copy @nodejs/single-executable
/test/parallel/test-single-executable-* @nodejs/single-executable
/test/sequential/test-single-executable-* @nodejs/single-executable
/test/sea @nodejs/single-executable
/tools/dep_updaters/update-postject.sh @nodejs/single-executable

# Permission Model
Expand Down Expand Up @@ -229,3 +228,6 @@
/lib/path.js @nodejs/path
/lib/path/* @nodejs/path
/test/parallel/test-path-* @nodejs/path

# userland-migrations
/doc/api/deprecations.md @nodejs/userland-migrations
16 changes: 16 additions & 0 deletions .github/workflows/linters.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,22 @@ jobs:
NODE=$(command -v node) make lint-md
env:
NODE_RELEASED_VERSIONS: ${{ steps.get-released-versions.outputs.NODE_RELEASED_VERSIONS }}
lint-nix:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
sparse-checkout: '*.nix'
sparse-checkout-cone-mode: false
- uses: cachix/install-nix-action@7be5dee1421f63d07e71ce6e0a9f8a4b07c2a487 # v31.6.1
- name: Lint Nix files
run: |
nix-shell -I nixpkgs=./tools/nix/pkgs.nix -p 'nixfmt-tree' --run '
treefmt --quiet --fail-on-change
' || git --no-pager diff --exit-code

lint-py:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
paths-ignore:
- .mailmap
- README.md
- '*.nix'
- .github/**
- '!.github/workflows/test-linux.yml'
types: [opened, synchronize, reopened, ready_for_review]
Expand All @@ -17,6 +18,7 @@ on:
paths-ignore:
- .mailmap
- README.md
- '*.nix'
- .github/**
- '!.github/workflows/test-linux.yml'

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
paths-ignore:
- .mailmap
- '**.md'
- '*.nix'
- AUTHORS
- doc/**
- .github/**
Expand All @@ -19,6 +20,7 @@ on:
paths-ignore:
- .mailmap
- '**.md'
- '*.nix'
- AUTHORS
- doc/**
- .github/**
Expand Down
127 changes: 127 additions & 0 deletions .github/workflows/test-shared.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: Test Shared libraries

on:
pull_request:
paths-ignore:
- .mailmap
- '**.md'
- AUTHORS
- doc/**
- .github/**
- '!.github/workflows/test-shared.yml'
types: [opened, synchronize, reopened, ready_for_review]
push:
branches:
- main
- canary
- v[0-9]+.x-staging
- v[0-9]+.x
paths-ignore:
- .mailmap
- '**.md'
- AUTHORS
- doc/**
- .github/**
- '!.github/workflows/test-shared.yml'

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

env:
FLAKY_TESTS: keep_retrying

permissions:
contents: read

jobs:
build-tarball:
if: github.event.pull_request.draft == false
name: ${{ github.event_name == 'workflow_dispatch' && 'Skipped job' || 'Build slim tarball' }}
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
if: ${{ github.event_name != 'workflow_dispatch' }}
with:
persist-credentials: false

- name: Make tarball
if: ${{ github.event_name != 'workflow_dispatch' }}
run: |
export DATESTRING=$(date "+%Y-%m-%d")
export COMMIT=$(git rev-parse --short=10 "$GITHUB_SHA")
./configure && make tar -j4 SKIP_XZ=1 SKIP_SHARED_DEPS=1
env:
DISTTYPE: nightly

- name: Upload tarball artifact
if: ${{ github.event_name != 'workflow_dispatch' }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: tarballs
path: '*.tar.gz'
compression-level: 0

build:
needs: build-tarball
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-24.04
system: x86_64-linux
- runner: ubuntu-24.04-arm
system: aarch64-linux
- runner: macos-13
system: x86_64-darwin
- runner: macos-latest
system: aarch64-darwin
name: '${{ matrix.system }}: with shared libraries'
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
if: ${{ github.event_name != 'workflow_dispatch' }}
with:
name: tarballs
path: tarballs

- name: Extract tarball
if: ${{ github.event_name != 'workflow_dispatch' }}
run: |
tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP"
echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV"

- uses: cachix/install-nix-action@7be5dee1421f63d07e71ce6e0a9f8a4b07c2a487 # v31.6.1
with:
extra_nix_config: sandbox = true

- name: Configure sccache
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
core.exportVariable('SCCACHE_GHA_VERSION', 'on');
core.exportVariable('ACTIONS_CACHE_SERVICE_V2', 'on');
core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');

- name: Load shell.nix
if: github.event_name != 'workflow_dispatch'
run: |
mv "$TAR_DIR"/*.nix .
mkdir tools
mv "$TAR_DIR"/tools/nix tools/.

- name: Build Node.js and run tests
run: |
nix-shell \
-I nixpkgs=./tools/nix/pkgs.nix \
--pure --keep TAR_DIR --keep FLAKY_TESTS \
--keep SCCACHE_GHA_VERSION --keep ACTIONS_CACHE_SERVICE_V2 --keep ACTIONS_RESULTS_URL --keep ACTIONS_RUNTIME_TOKEN \
--arg loadJSBuiltinsDynamically false \
--arg ccache '(import <nixpkgs> {}).sccache' \
--arg devTools '[]' \
--arg benchmarkTools '[]' \
${{ endsWith(matrix.system, '-darwin') && '--arg extraConfigFlags ''["--without-inspector"]'' \' || '\' }}
--run '
make -C "$TAR_DIR" run-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
'
25 changes: 24 additions & 1 deletion .github/workflows/tools.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ on:
- gyp-next
- histogram
- icu
- inspector_protocol
- libuv
- llhttp
- minimatch
- nbytes
- nixpkgs-unstable
- nghttp2
- nghttp3
- ngtcp2
Expand Down Expand Up @@ -149,6 +151,14 @@ jobs:
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- id: inspector_protocol
subsystem: deps
label: dependencies, inspector
run: |
./tools/dep_updaters/update-inspector-protocol.sh > temp-output
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- id: libuv
subsystem: deps
label: dependencies
Expand Down Expand Up @@ -181,6 +191,14 @@ jobs:
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- id: nixpkgs-unstable
subsystem: tools
label: tools
run: |
./tools/dep_updaters/update-nixpkgs-pin.sh > temp-output
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- id: nghttp2
subsystem: deps
label: dependencies
Expand Down Expand Up @@ -276,11 +294,16 @@ jobs:
with:
persist-credentials: false
- name: Set up Python ${{ env.PYTHON_VERSION }}
if: matrix.id == 'icu' && (github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id)
if: |
(matrix.id == 'icu' || matrix.id == 'inspector_protocol') &&
(github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id)
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHON_VERSION }}
allow-prereleases: true
- name: Set up Nix
if: matrix.id == 'nixpkgs-unstable' && (github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id)
uses: cachix/install-nix-action@7be5dee1421f63d07e71ce6e0a9f8a4b07c2a487 # v31.6.1
- run: ${{ matrix.run }}
if: github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id
env:
Expand Down
92 changes: 91 additions & 1 deletion BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ Consult previous versions of this document for older versions of Node.js:

Installation via Linux package manager can be achieved with:

* Nix, NixOS: `nix-shell`
* Ubuntu, Debian: `sudo apt-get install python3 g++-12 gcc-12 make python3-pip`
* Fedora: `sudo dnf install python3 gcc-c++ make python3-pip`
* CentOS and RHEL: `sudo yum install python3 gcc-c++ make python3-pip`
Expand All @@ -259,6 +260,75 @@ installed, you can find them under the menu `Xcode -> Open Developer Tool ->
More Developer Tools...`. This step will install `clang`, `clang++`, and
`make`.

#### Nix integration

If you are using Nix and direnv, you can use the following to get started:

```bash
echo 'use_nix --arg sharedLibDeps {} --argstr icu small' > .envrc
direnv allow .
make build-ci -j12
```

The use of `make build-ci` is to ensure you are using the `CONFIG_FLAGS`
environment variable. You can also specify it manually:

```bash
./configure $CONFIG_FLAGS
make -j12
```

Passing the `--arg sharedLibDeps {}` instructs direnv and Nix to generate an
environment that uses the vendored-in native dependencies. Using the vendored-in
dependencies result in a result closer to the official binaries, the tradeoff
being the build will take longer to complete as you'd have to build those
dependencies instead of using the cached ones from the Nix cache. You can omit
that flag to use all the shared dependencies, or specify only some dependencies:

```bash
cat -> .envrc <<'EOF'
use nix --arg sharedLibDeps '{
inherit (import <nixpkgs> {})
openssl
zlib
;
}'
EOF
```

Passing the `--argstr icu small` instructs direnv and Nix to pass `--with-intl=small` in
the `CONFIG_FLAGS` environment variable. If you omit this, the prebuilt ICU from Nix cache
will be used, which should speed up greatly compilation time.

The use of `direnv` is completely optional, you can also use `nix-shell` directly,
e.g. here's a command you can use to build a binary for benchmarking purposes:

```bash
# Passing `--arg loadJSBuiltinsDynamically false` to instruct the compiler to
# embed the JS core files so it is no longer affected by local changes
# (necessary for getting useful benchmark results).
# Passing `--arg devTools '[]' --arg benchmarkTools '[]'` since we don't need
# those to build node.
nix-shell \
--arg loadJSBuiltinsDynamically false \
--arg devTools '[]' --arg benchmarkTools '[]' \
--run 'make build-ci -j12'

mv out/Release/node ./node_old

# ...
# Make your local changes, and re-build node

nix-shell \
--arg loadJSBuiltinsDynamically false \
--arg devTools '[]' --arg benchmarkTools '[]' \
--run 'make build-ci -j12'

nix-shell --pure --run './node benchmark/compare.js --old ./node_old --new ./node http | Rscript benchmark/compare.R'
```

There are additional attributes you can pass, see `shell.nix` file for more details.

#### Building Node.js

If the path to your build directory contains a space, the build will likely
Expand All @@ -267,7 +337,6 @@ fail.
To build Node.js:

```bash
export CXX=g++-12
./configure
make -j4
```
Expand Down Expand Up @@ -352,6 +421,27 @@ You can also execute the tests in a test suite directory
tools/test.py test/message
```

You can execute tests that match a specific naming pattern using the wildcard
`*`. For example, to run all tests under `test/parallel` with a name that starts
with `test-stream-`:

```bash
tools/test.py test/parallel/test-stream-*
tools/test.py parallel/test-stream-* # The test/ prefix can be omitted
# In some shell environments, you may need to quote the pattern
tools/test.py "test/parallel/test-stream-*"
```

The whildcard `*` can be used in any part of the path. For example, to run all tests
with a name that starts with `test-inspector-`, regardless of the directory they are in:

```bash
# Matches test/sequential/test-inspector-*, test/parallel/test-inspector-*,
# test/known_issues/test-inspector-*, etc.
tools/test.py "test/*/test-inspector-*"
tools/test.py "*/test-inspector-*" # The test/ prefix can be omitted
```

If you want to check the other options, please refer to the help by using
the `--help` option:

Expand Down
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ release.
</tr>
<tr>
<td valign="top">
<b><a href="doc/changelogs/CHANGELOG_V25.md#25.0.0">25.0.0</a></b><br/>
<b><a href="doc/changelogs/CHANGELOG_V25.md#25.1.0">25.1.0</a></b><br/>
<a href="doc/changelogs/CHANGELOG_V25.md#25.0.0">25.0.0</a><br/>
</td>
<td valign="top">
<b><a href="doc/changelogs/CHANGELOG_V24.md#24.10.0">24.10.0</a></b><br/>
Expand Down
Loading
Loading