Weekly GitHub Report for Node: June 09, 2025 - June 16, 2025 (12:01:00)
Weekly GitHub Report for Node
Thank you for subscribing to our weekly newsletter! Each week, we deliver a comprehensive summary of your GitHub project's latest activity right to your inbox, including an overview of your project's issues, pull requests, contributors, and commit activity.
Table of Contents
I. News
1.1 Recent Version Releases:
The current version of this repository is v23.10.0
1.2 Version Information:
The version released on March 13, 2025, introduces the --experimental-config-file
feature, allowing developers to use a JSON configuration file to streamline the use of multiple flags, enhancing the developer experience and potentially increasing adoption. Notable updates include improvements in error handling, updates to root certificates, and the addition of new methods such as tls.getCACertificates()
and v8.getCppHeapStatistics()
, reflecting a trend towards enhancing security, performance, and developer convenience.
II. Issues
2.1 Top 5 Active Issues:
We consider active issues to be issues that that have been commented on most frequently within the last week. Bot comments are omitted.
-
--experimental-test-coverage empty since 23.5.0: This issue reports a problem with the
--experimental-test-coverage
feature in Node.js, which has been producing empty coverage reports since version 23.5.0, despite functioning correctly in version 23.4.0. The user expects a non-empty coverage report that identifies uncovered lines, but instead, the report is empty, indicating a potential bug or misconfiguration in the newer versions.- The comments discuss confusion over the coverage feature, with some users noting that files are excluded based on global paths, which can lead to unexpected exclusions if a directory is named 'test'. There is a suggestion to match paths relative to the project root instead. Some users believe this is a bug, while others argue it is expected behavior but poorly documented. A potential solution is to align the exclusion behavior with the files matched by
node --test
. The issue is not reproducible on a Node.js git build, indicating it might be resolved in future releases. - Number of comments this week: 12
- The comments discuss confusion over the coverage feature, with some users noting that files are excluded based on global paths, which can lead to unexpected exclusions if a directory is named 'test'. There is a suggestion to match paths relative to the project root instead. Some users believe this is a bug, while others argue it is expected behavior but poorly documented. A potential solution is to align the exclusion behavior with the files matched by
-
fs.cpSync / fs.cp / fs.promises.cp fails when src/dest args are Buffer/URL: This issue addresses a bug in the Node.js file system module where the
fs.cpSync
,fs.cp
, andfs.promises.cp
functions fail when the source and destination arguments are provided as Buffer or URL objects instead of strings. The problem arises because the underlying implementation incorrectly assumes that paths are always strings, leading to errors when attempting to concatenate paths usingpath.join
, which does not support Buffer and URL types.- The comments discuss the challenges of fixing the issue without introducing breaking changes, with suggestions including converting paths to strings as a temporary solution, using Buffers for path handling, and introducing a new
options.predicate
for filtering. There is debate over whether to make the change semver-major, with some advocating for a breaking change to ensure a more robust solution. - Number of comments this week: 9
- The comments discuss the challenges of fixing the issue without introducing breaking changes, with suggestions including converting paths to strings as a temporary solution, using Buffers for path handling, and introducing a new
-
Remove
Symbol.dispose
integration insetTimeout
andsetInterval
: This issue discusses the removal of theSymbol.dispose
integration from thesetTimeout
andsetInterval
functions in Node.js, as these functions' return types are incompatible with the web platform's implementation, which returns a number. The concern is that maintaining this integration could lead to code that is incompatible between Node.js and browser environments, creating discrepancies and potential errors in cross-runtime interoperability.- The comments reflect a debate on whether to deprecate the current implementation, with some suggesting a deprecation cycle and others proposing new APIs for Node.js timers. There is a discussion on maintaining compatibility with the HTML spec versus creating Node-specific implementations. Some participants express concerns about the feasibility of deprecating the current return values, while others suggest explicit imports to differentiate between Node.js and browser implementations.
- Number of comments this week: 9
-
Inconsistent EPERM errno: This issue addresses the inconsistency in the
EPERM
error number returned by theprocess.setgid(100)
function, where theerrno
is set to1
instead of the expected negative value, which contradicts the convention that UV_ error numbers should always be negative. The expected behavior is for the error code to be-1
to maintain consistency with other parts of the system, but currently, it is always reported as1
.- The comments discuss the inconsistency of
errno
values, with some suggesting that the positive value is expected in certain contexts, while others point out that it contradicts the documentation and existing tests. A proposed fix involves changing the sign of the error number, but this breaks a test and is considered a semver-major change. There is a consensus that a comprehensive audit is needed to ensure allerrno
values align with the UV error codes, but this would require significant changes. - Number of comments this week: 8
- The comments discuss the inconsistency of
-
[node-api] Creating a reference-counted env-less JavaScript object that can be shared between threads: This issue discusses the challenges faced by a Node.js build tool at Atlassian that heavily utilizes worker threads, leading to high memory consumption and complex synchronization due to the limitations of JavaScript's single-threaded nature. The proposal suggests adding new N-API functions to create a reference-counted, zero-copy JavaScript object that can be shared between threads, potentially alleviating the need for a complete rewrite of the tool in Rust.
- The comments explore potential solutions like shared structs and shared memory features in V8, though these are experimental and may not fully address the issue. Suggestions include consulting an expert for a more tailored solution, and discussions highlight the complexity of the current system and the potential benefits of using shared memory techniques.
- Number of comments this week: 5
2.2 Top 5 Stale Issues:
We consider stale issues to be issues that has had no activity within the last 30 days. The team should work together to get these issues resolved and closed as soon as possible.
- Flaky GC-related tests with V8 12.2: This issue concerns flaky garbage collection-related tests in the V8 12.2 engine, specifically affecting
test-shadow-realm-gc-module
,test-shadow-realm-gc
, andtest-net-write-fully-async-hex-string
. The problem seems to stem from incorrect assumptions in the tests that are disrupted by V8's new garbage collection strategy, leading to a suggestion to skip these tests temporarily and track the issue for a more reliable testing approach in the future. - Flaky
test-worker-arraybuffer-zerofill
with V8 12.2: This issue concerns a flaky test namedtest-worker-arraybuffer-zerofill
associated with V8 version 12.2, which has been failing intermittently, as indicated by a timeout error in the console output. The problem might be due to a real bug or broken timing assumptions/messages getting lost, and it has been suggested to mark the test as flaky and add logs to aid in debugging. - Support loading dynamic addon modules (
.node
files) when embedding the Node.js shared library without needing to link withnode.def
: This issue addresses the challenge of loading dynamic addon modules, specifically.node
files, when embedding the Node.js shared library into a different executable without the need to link withnode.def
. The proposed solution suggests modifying the delay load hook to utilize an environment variable, potentially namedNODE_LIBRARY
, to facilitate the loading process, although the security implications of this approach are still uncertain. - Please make Node.js embeddable (e.g. libnode): This issue is about a request to make Node.js embeddable by creating a
libnode
library that would allow Node.js capabilities to be exported and enable N-API access to the host context. The proposal aims to facilitate the integration of Node.js within other environments, such as a Rust-based host process, to enhance the reuse of existing tooling and dependencies, addressing the current limitations faced by projects that require an embedded runtime. - unable to sign with external OpenSSL engine after usage of crypto.hash: This issue involves a problem with signing using an external OpenSSL engine after utilizing the
crypto.hash
function in Node.js, specifically affecting versions v21.7.0 and v21.7.1. The error occurs consistently and is believed to be linked to recent changes in the Node.js codebase, as the functionality worked correctly in version v21.6.2 and earlier.
2.3 Open Issues
This section lists, groups, and then summarizes issues that were created within the last week in the repository.
Issues Opened This Week: 15
Summarized Issues:
- JavaScript Object Sharing in Node.js: The challenge of efficiently sharing JavaScript objects between worker threads in a Node.js build tool is addressed by proposing N-API functions for creating reference-counted, zero-copy objects. This aims to alleviate high memory usage and complex synchronization, with potential solutions including shared structs and memory-mapped files.
- Deprecation and False Warnings: Node.js faces issues with deprecated features and false warnings, such as the REPL module's use of
require.extensions
and a false deprecation warning (DEP0155) on Windows. These issues cause confusion and build problems for developers, necessitating updates and clarifications in the codebase.
- Test Coverage and Error Handling in Node.js: Problems with the
--experimental-test-coverage
feature and error handling in tests are highlighted, where coverage reports are empty and errors indescribe()
do not result in non-zero exit codes. These issues lead to confusion and incorrect CI results, prompting the need for fixes and workarounds.
- Concurrency and Deadlock Issues: Node.js version 22.13.1 experiences a deadlock due to conflicts between TLS operations and the V8 garbage collector, causing indefinite process hangs. This issue highlights the need for careful management of concurrent operations to prevent such deadlocks.
- File System and Permission Errors: A bug in Node.js version 24.2.0 causes
fs.glob
andfs/promises.glob
functions to fail with aTypeError
when reading directories without permissions. This issue affects both callback and async versions, while the sync version works as expected, indicating a need for consistent error handling across methods.
- API Surface and Configuration Enhancements: Node.js is addressing the need for API surface regression tests and new configuration namespaces to prevent unintentional exposure of internal methods and enhance developer experience. These proposals aim to manage the public API surface and organize configuration options effectively.
- Memory Management and Environment Configuration: The proposal to enable setting the
--max-heap-size
flag viaNODE_OPTIONS
aims to facilitate dynamic memory management in environments like Kubernetes. This change would align with existing support for other memory-related flags, enhancing flexibility in resource-constrained environments.
- Installation and Execution Issues: Users face issues with Node.js installation and execution, such as a prompt to "select an app to open" when checking npm version, indicating potential misconfigurations. These problems highlight the need for clear installation guidelines and troubleshooting steps.
- Cross-Platform Compatibility and Integration: The proposal to remove
Symbol.dispose
fromsetTimeout
andsetInterval
functions addresses incompatibility with the web platform. This change aims to ensure cross-runtime interoperability and prevent discrepancies between browser and Node.js environments.
- Segmentation Faults and Assertion Failures: Node.js version 24.2.0 experiences segmentation faults on WSL2, and assertion failures in the libuv subsystem on Windows 11, linked to recent updates. These issues necessitate workarounds and highlight the importance of stability across different platforms and versions.
- Error Number Inconsistencies: An inconsistency in handling the
EPERM
error number within Node.js results in a positiveerrno
value, contradicting expected behavior. This issue requires a review and potential semver-major change to ensure consistency across the codebase.
2.4 Closed Issues
This section lists, groups, and then summarizes issues that were closed within the last week in the repository. This section also links the associated pull requests if applicable.
Issues Closed This Week: 6
Summarized Issues:
- AsyncLocalStorage Resource Management: The proposal suggests adding explicit resource management to AsyncLocalStorage in Node.js by introducing a method that returns a Disposable. This aims to simplify the current callback and nesting structure used with
.run
, and suggests an alternative implementation that could be built in user-land.
- Node.js Import Meta Main Bug: A bug in Node.js version 24.2.0 causes the
import.meta.main
property to not returntrue
as expected when running TypeScript (.ts) files. JavaScript (.js) files exhibit the correct behavior, highlighting an inconsistency in handling different file types.
- Node.js Process Exit on Ctrl+C: A problem arises when a Node.js process, run using
node --run
, exits upon pressingctrl + c
, contrary to the expected behavior of continuing to run. This poses a risk for backend applications as it may lead to premature termination when receiving signals like SIGINT or SIGTERM, especially in environments like Docker.
- CommonJS Module Using Declaration: Unexpected behavior occurs in Node.js where a top-level
using
declaration in a CommonJS module does not throw an error as expected by the ECMAScript specification. This is due to the module being wrapped in a function, which deviates from the script source type and raises concerns about maintaining consistency with the spec.
- Undocumented Methods in fs.Dir: There is a lack of documentation for certain methods (
processReadResult
andreadSyncRecursive
) in thefs.Dir
object returned by thefs.opendir
APIs. This raises questions about whether these methods are intended for internal use only or as part of the public API, and discusses the appropriate process for potentially deprecating and hiding them due to their undocumented status.
- Node.js Download Page Inquiry: An issue pertains to a problem or inquiry related to the Node.js download page. The title and the comment link to the URL "https://nodejs.org/en/download", indicating a concern or question about the page.
2.5 Issue Discussion Insights
This section will analyze the tone and sentiment of discussions within this project's open and closed issues that occurred within the past week. It aims to identify potentially heated exchanges and to maintain a constructive project environment.
Based on our analysis, there are no instances of toxic discussions in the project's open or closed issues from the past week.
III. Pull Requests
3.1 Open Pull Requests
This section provides a summary of pull requests that were opened in the repository over the past week. The top three pull requests with the highest number of commits are highlighted as 'key' pull requests. Other pull requests are grouped based on similar characteristics for easier analysis. Up to 25 pull requests are displayed in this section, while any remaining pull requests beyond this limit are omitted for brevity.
Pull Requests Opened This Week: 24
Key Open Pull Requests
1. [v22.x backport] esm: implement import.meta.main: This pull request aims to backport the implementation of import.meta.main
, a feature that provides a boolean value to determine if an ES Module is the entry point of the current process, along with several related fixes and improvements, from the main branch to the v22.x release line of the Node.js project.
- URL: pull/58693
- Merged: No
2. New SQlite database options: This pull request introduces new SQLite database options, including support for readBigInts
, returnArrays
, allowBareNamedParameters
, and allowUnknownNamedParameters
at the database connection level, and includes documentation for these new options.
- URL: pull/58697
- Merged: No
3. fs: fix TypeError in glob when directory access is denied: This pull request addresses a TypeError in the asynchronous version of fs.glob()
by ensuring that when directory access is denied due to permission issues, the readdir()
method returns an empty array instead of null, aligning its behavior with the synchronous version and preventing errors when accessing the 'length' property, while also adding tests to verify this behavior.
- URL: pull/58674
- Merged: No
Other Open Pull Requests
- Timeout Class Modification: This pull request modifies the
Timeout
class in the Node.js library to ensure that theAbortSignal.timeout
delay is validated according to its WebIDL definition. It supports an unsigned long long as theafter
parameter, as part of a change divided from a previous pull request.
- Deprecation of require.extensions: This pull request addresses the deprecation of
require.extensions
in the Node.js REPL autocompletion logic by replacing its usage withModule._extensions
. It eliminates runtime deprecation warnings without altering functionality and includes an inline comment to explain the change.
- Web Locks API Implementation: This pull request introduces the implementation of the Web Locks API in the Node.js project, utilizing a C++ native approach to enhance performance and reliability. It coordinates access to shared resources across multiple threads through a singleton
LockManager
with thread-safe data structures.
- Test Refactoring: This pull request focuses on refactoring the
test/parallel/test-repl-tab-complete.js
file by making the tests self-contained and utilizing the test runner with clear descriptions. It extracts some tests into separate JavaScript files to enhance test isolation and address flakiness issues.
- Syntax Error Detection: This pull request addresses the issue of incorrectly detecting syntax errors as requiring ECMAScript Module (ESM) recompilation. It implements a patch to correctly identify top-level await in ambiguous contexts, while acknowledging that a more permanent solution may be needed from the V8 engine side.
- ReadableByteStreams Support: This pull request introduces support for creating ReadableByteStreams in the
.toWeb()
method for bothReadable
andDuplex
streams. It enables the use of the.getReader({ mode: "byob" })
method, facilitating operations like reading data from a socket more efficiently.
- Documentation Correction: This pull request addresses a documentation correction in the Node.js project by fixing the JSDoc type annotation for the
getTypeScriptParsingMode
function. It changes it from@type {string}
to the correct@type {() => TypeScriptMode}
.
- IPv6 Address Handling: This pull request addresses an issue in the
resolver.setLocalAddress()
function by allowing it to accept either IPv6-only or IPv4-only addresses. It corrects a previous requirement that erroneously mandated an IPv4 string even when only an IPv6 address was intended.
- SourceMappingURL Optimization: This pull request aims to optimize the detection of sourceMappingURL tags in the Node.js project by replacing multiple regex loops with a single regex using negative lookahead. It results in more concise and efficient code.
- Network Protocol Methods: This pull request introduces a new protocol method
Network.dataSent
to buffer request data and exposes additional protocol methodsNetwork.getRequestPostData
andNetwork.getResponseBody
. It enhances the capabilities of devtools in handling network data.
- Toolchain and Build Flags: This pull request aims to include
toolchain.gypi
inabseil.gyp
to set appropriate SIMD build flags for Abseil on the ia32 architecture. It relocates theinclude_dirs
ofV8_ROOT
fromtoolchain.gyp
tov8.gyp
as it primarily pertains to V8 targets.
- Node.js Configuration Schema: This pull request aims to expose help texts into the
node-config-schema.json
file, although it is currently a draft requiring significant refactoring. It is open for feedback.
- Type Error Fixes: This pull request addresses the issue of type errors in the
fs.cpSync
andcopyDir
methods by normalizingBuffer
andURL
inputs for thesrc
anddest
arguments into string paths. It ensures compatibility withpath.join()
and fixes issue #58634.
- DEP0155 Warnings on Windows: This pull request addresses the issue of false DEP0155 warnings on Windows by ensuring that the deprecation warning is only triggered for exact
"./"
export keys. It prevents incorrect warnings for"./*"
and other valid subpath export patterns.
- Private Symbol Minimization: This pull request aims to minimize the reliance on the private symbol
kEvents
within thetest/parallel/test-events-once.js
file. It facilitates easier future refactoring.
- DOMException as Native Error: This pull request aims to modify the Node.js library by making
DOMException
a native error. It addresses the limitations of usingisolate->SetJSApiWrapperNativeErrorCallback(IsNodeError)
due to its invocation constraints with native objects.
- Dir Disposers Idempotency: This pull request aims to make the
Dir
disposers in the Node.js file system module idempotent. It aligns with the draft explicit resource management guidelines.
- Default Configuration File Feature: This pull request proposes to remove the experimental flag from the default configuration file feature in Node.js version 25. It is indicated by the commit message and the associated changes in the source code.
- Crypto Module Deprecations: This pull request proposes moving the deprecated hash and mgf1Hash options in the crypto module to end-of-life status. It follows approximately three years of runtime deprecation.
- multipleResolves Event Deprecation: This pull request proposes moving the deprecated
multipleResolves
event to end-of-life (EOL) status in the Node.js project. It has been deprecated for several years and includes a commit with the necessary changes.
3.2 Closed Pull Requests
This section provides a summary of pull requests that were closed in the repository over the past week. The top three pull requests with the highest number of commits are highlighted as 'key' pull requests. Other pull requests are grouped based on similar characteristics for easier analysis. Up to 25 pull requests are displayed in this section, while any remaining pull requests beyond this limit are omitted for brevity.
Pull Requests Closed This Week: 22
Key Closed Pull Requests
1. win,tools: use Azure Trusted Signing (v20 backport): This pull request aims to finalize the integration of Azure Trusted Signing as the new signing tool for the Node.js project, transitioning the release CI to utilize these updated tools for building Node.js, as part of a backport to version 20, and is linked to a related build issue discussed in the project's repository.
- URL: pull/58659
- Merged: No
- Associated Commits: 1b37b, c0792, cc0f6, f631d, 915e5, 7b90d, 161cc, 86229, f339d, 29a8a, f8677, 83ef9, e0cf3, ebb59, df0ba, 64faa, a96ea, c04f3, 8c77f, 703f4, 6a225, 6374b, 6f333, cffb5, 75a49, 8ac34, 50954, 5480c, 39cf6, 0a13e, 4f265, 97497, 375d3, 49598, 76577, 4592b, f9676, 20607, b1aca, 7da86, a029c, 0d244, 54a8c
2. module: refactor commonjs typescript loader: This pull request refactors the CommonJS TypeScript loader to remove TypeScript-specific extensions from the require.extensions
object, addressing compatibility issues with external TypeScript loaders and unblocking the backport of Type Stripping in Node v22, as well as fixing a breaking change in a specific webpack configuration.
- URL: pull/58657
- Merged: Yes
3. Geereddynehareddy patch 1: This pull request involves updates to the README.md file in the Node.js project, as indicated by two separate commits, but it was not merged into the main codebase.
- URL: pull/58694
- Merged: No
Other Closed Pull Requests
- Code Enhancements and Refactoring: This topic includes pull requests that focus on improving the codebase by introducing new functions, cleaning up existing code, and making methods private. The
CopyUtimes
function was added to reduce code duplication, and methods likeprocessReadResult()
andreadSyncRecursive()
were made private to prevent unnecessary exposure.
- Documentation and Typings Updates: These pull requests focus on updating documentation and adding typings to improve clarity and usability. The
fs.cp
API documentation was updated to specify accepted argument types, and typings for ZSTD functions were added to the internalBinding module.
- Testing and Workflow Improvements: This topic covers pull requests aimed at enhancing testing and workflow processes. Indirect eval import tests were split to address dependency issues, and the commit-queue workflow was edited to improve efficiency and consistency.
- Error Handling and Messaging: These pull requests focus on improving error messages and handling within the project. Enhancements were made to error messages for unknown options, and the release proposal linter was improved to provide clearer error annotations.
- Feature Updates and Deprecations: This topic includes pull requests related to feature updates and deprecations. The experimental warning for type stripping was removed, and a new API
fileURLToPathBuffer()
was introduced to handle non-Unicode encodings.
- Miscellaneous Fixes and Updates: These pull requests address various fixes and updates, such as correcting a typographical error in a deprecation warning and updating test files to use appropriate functions.
- Serialization and Deserialization Support: This pull request adds support for serialization and deserialization of
DOMException
using theJSTransferable
mechanism, providing an alternative to a previous proposal.
- Release and CI Updates: This pull request finalizes the integration of Azure Trusted Signing for the Node.js project, updating the release CI to utilize these tools as part of the v22 backport.
- TypeScript and Import Meta Updates: This pull request resolves an issue related to the TypeScript
import.meta.main
functionality, ensuring it works correctly within the Node.js project.
- Unmerged README Updates: These pull requests involve updates to the README.md file, which were not merged into the main codebase, including a detailed certification of origin statement.
- Status File and JSON Cleanup: This pull request involves cleaning up status files by removing empty expectations and aligning empty status files to be single-line JSON.
3.3 Pull Request Discussion Insights
This section will analyze the tone and sentiment of discussions within this project's open and closed pull requests that occurred within the past week. It aims to identify potentially heated exchanges and to maintain a constructive project environment.
Based on our analysis, there are no instances of toxic discussions in the project's open or closed pull requests from the past week.
IV. Contributors
4.1 Contributors
Active Contributors:
We consider an active contributor in this project to be any contributor who has made at least 1 commit, opened at least 1 issue, created at least 1 pull request, or made more than 2 comments in the last month.
If there are more than 10 active contributors, the list is truncated to the top 10 based on contribution metrics for better clarity.
Contributor | Commits | Pull Requests | Issues | Comments |
---|---|---|---|---|
jasnell | 14 | 11 | 3 | 49 |
dario-piotrowicz | 20 | 5 | 0 | 25 |
LiviaMedeiros | 9 | 4 | 2 | 17 |
legendecas | 9 | 7 | 0 | 8 |
aduh95 | 7 | 3 | 0 | 14 |
marco-ippolito | 7 | 5 | 1 | 5 |
IlyasShabi | 3 | 1 | 0 | 13 |
anonrig | 0 | 0 | 0 | 13 |
cjihrig | 1 | 1 | 0 | 10 |
joyeecheung | 4 | 0 | 0 | 7 |