From 7a6da3633bf5d46aec37f12b669bcf7bb48aa199 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 22 May 2025 00:22:23 +0200 Subject: [PATCH 1/7] content(blog/events): add trip report of 2025 Paris summit --- .../blog/events/collab-summit-2025-paris.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 apps/site/pages/en/blog/events/collab-summit-2025-paris.md diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md new file mode 100644 index 0000000000000..15e2a0b05a57b --- /dev/null +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -0,0 +1,96 @@ +--- +date: '2025-05-22T00:00:00.000Z' +category: events +title: 'Trip report: Node.js collaboration summit (2025 Paris)' +layout: blog-post +author: joyeecheung +--- + +About twice per year, Node.js contributors and community members get together in an unconference called [the Node.js collaboration summit](https://nodejs.org/en/about/get-involved/collab-summit). At the summit, we share knowledge about the project and the ecosystem, brainstorm solutions to technical and non-technical issues, make progress in decision-making discussions, and push forward new initiatives. + +This April, the first collaboration summit of 2025 was hosted by Datadog in Paris. In this edition, we welcomed almost 40 in-person participants, and around a dozen more joined remotely. + +Here is a recap of what happened at the summit. + +## CI reliability and security + +Before the collaboration summit, a [security incident](https://nodejs.org/en/blog/vulnerability/march-2025-ci-incident) happened in the CI infrastructure. While it only had a limited impact on the development process and did not affect any of the releases, it prompted us to take another look into our CI infrastructure management and the state of CI reliability. Richard Lau provided a walkthrough of the CI automation, and Joyee Cheung did an introduction to the current state of CI flake detection in order to spread the knowledge to more contributors. + +## Lightning talks + +We took advantage of the free time before the discussion-focused sessions to share more knowledge about new work-in-progress in the code base. + +### Experimental WASM Modules + +Chengzhong Wu gave an introduction to the experimental WASM modules (`import wasm`) and the plan to [unflag it](https://github.com/nodejs/node/pull/57038) in the next Node.js releases soon. The timing of unflagging needs some coordination with the browsers, and the general agreement in the room is that it can land as semver-minor when it's ready and does not have to be bound by major release cycles. + +### Cppgc integration + +Joyee Cheung showcased the initial integration with V8's [Oilpan library](https://v8.dev/blog/oilpan-library) and the planned migration work that aims to improve memory safety and garbage collection throughput by managing native embedder objects in the V8 heap. + +## Mentorship + +Jacob Smith facilitated a session about mentorship in the project. We reviewed ongoing informal mentorship efforts and past efforts like [nodejs/mentorship](https://github.com/nodejs/mentorship), how we can improve sharing knowledge about niche parts of the code base, and the expectations about mentees. The next step is to collect feedback from collaborators, and update in the Next-10 initiative. + +## Improving Collaborator Experience + +Jean Burellier facilitated a session using a retrospective board to gather feedback about contributor experience in Node.js core. Many brought up the flaky CI as a significant pain point. One of the main source of flakes is a [deadlock issue](https://github.com/nodejs/node/issues/54918) - fortuntely, after the summit it was allieviated by a [workaround](https://github.com/nodejs/node/pull/58047). + +Another issue that many brought up came from the extreme cases of consensus seeking. In Node.js, decision-making is based on the consensus from the 100+ collaborators. When collaborators cannot reach a consensus, the disagreement can be escalated to the TSC, and a vote can be initiated to break the standstill. But often the vote can be started too late, after the conversations have become exhausting, and those summoned to vote may also have a hard time digesting all of the debates. We brainstormed about ideas to improve the process, for example, using emoji votes to test the temperature, using AI to help summarize the arguments, or setting a deadline for conclusions, though the benefits of these ideas are not conclusive. + +Some mentioned that finding information about niche components in the codebase can be challenging. We could do better at linking and promoting [CONTRIBUTING.md](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md) and various [internal documentation](https://github.com/nodejs/node/tree/main/doc/contributing). Building a tool using AI services that takes the codebase and documentation as context may also help answer contributors' queries. + +We also discussed how to handle stale pull requests and prevent beginner pull requests from getting stalled and closed. Ideas include adding more automation or better pull request templates. + +## Bring AsyncLocalStorage to the Web + +Chengzhong Wu gave the audience an overview of the efforts to bring the Node.js [AsyncLocalStorage](https://nodejs.org/api/async_context.html#class-asynclocalstorage) into JavaScript as a language feature that's also available to the Web - the [AsyncContext](https://github.com/tc39/proposal-async-context) proposal, which is currently at stage 2 in the TC39 process. We were joined by TC39 delegates Nicolò Ribaudo and Andreu Botella to discuss the APIs that should propagate the contexts, and how to fill the gap from use cases that require using an `enterWith()`-like escape-hatch. + +AsyncLocalStorage and its akin APIs have been adopted not only in Node.js and JavaScript runtimes like Deno and Bun, but also in major programming language runtimes like .NET, Python, Go, and more. It is one of the key features that observability libraries like OpenTelemetry need to instrument a user application. + +The main challenge of the AsyncContext proposal is the complexity it would bring to Web platforms. Web platforms define a different security model compared to Node.js, and the proposal has to prove that it does not open up unintended behavior through implicit context propagation. Additionally, the proposal requires efforts on the Web APIs to propagate the contexts across asynchronous boundaries. This needs specification and test facilities like [Web Platform Tests](https://github.com/web-platform-tests/wpt) to align all browsers implementing the feature uniformly. + +We recognize that the `enterWith()` might be essential to certain use cases, and the proposal does not close the door to future extensions. However, it is also recognized that `enterWith()` is not perfect and can often lead to mistakes if not used with caution. There is a follow-up TC39 proposal [Disposable AsyncContext](https://github.com/tc39/proposal-async-context-disposable) to integrate AsyncContext with the `using` declaration syntax, addressing the use cases of `enterWith()`. + +We also discussed that there are [alternatives](https://github.com/tc39/proposal-async-context/blob/master/CONTINUATION.md) to the AsyncLocalStorage data flow. Considering that the current AsyncLocalStorage data flow is a key model to APM vendors and OpenTelemetry, it is important to prioritize the existing model that has also been widely adopted so that the users at large can benefit from the feature being available on the Web. + +## Single Executable Applications + +We were joined remotely by Darshan Sen (champion of the SEA initiative). Luke Karrys went through the current outstanding feature requests and issues of the SEA (Single Executable Application) feature, including: + +- ESM support +- Injecting CLI flags +- Sourceless code cache +- JS APIs +- streamlining toolchain +- Virtual file system + +Most of the issues are addressable - we spent some time discussing streamlining the toolchain in core, which may be possible, but needs investigation into the binary size increase from bundling more of postject in core. The most important blocker to the progress of the SEA initiative remains the lack of volunteers or funding to gain momentum. We discussed setting up a team vs. a working group and how to resume more work. + +## Embedding Undici + +Matteo chaired a session about next steps in improving user experience when they need more from Undici. We reviewed the issues with existing http builtins, whose status change as legacy was discussed, and how to prevent these issues with Undici once users need more powerful customizations. For now, exposing the dispatcher configuration from the bundled undici would help with most use cases, though it still requires stabilizing the dispatcher API, and the documentation needs more work. We discussed participating in WinterTC to standardize agent support, though it's unclear how much effort it would take to match the existing solutions with a standard and where the funding would come from. + +There is still interest in finishing [Milo](https://github.com/milojs/milo), and the plan is to integrate it only via WASM and not through native bindings. + +To support newer protocols, we discussed advertising HTTP/2 via ALPN for HTTPS and auto‑upgrade if the server agrees, which can be opt-in by 24 as semver-minor and become a default in future major releases. Work on QUIC will resume once OpenSSL 3.5 upgrade is in. + +## Node.js integration with Chrome DevTools + +Chengzhong went through the concept of Chrome DevTools Frontend and Chrome DevTools Protocol. Node.js implements Chrome DevTools Protocol via V8, providing essential JavaScript debugging features, and extends the protocol to provide additional functionality like performance tracing, Network inspection, and automatic discovery of worker thread targets. + +The support for network inspection is still in active development. It needs collaborative efforts to add side-effect-free observability diagnostic channels to both the `http` built-in module and Undici to support inspecting network traffic sent by `http.request` and `fetch` APIs. Additionally, there are plans to support WebSocket traffic inspection. + +Node.js supports debugging worker threads, but people are often confused because Chrome DevTools frontend can not automatically connect to a worker thread spawned in an inspected Node.js process. There is an open work to add experimental target discovery to Node.js Chrome DevTools Protocol implementation. + +## Next 10 Survey + +In this session, Marco Ippolito started an on-site review of the questions that would be asked in [Next-10 survey for 2025](https://github.com/nodejs/next-10/pull/331), including suggestions to existing questions, questions/options to add and to remove. It was a productive session and the results of the discussions had been incorporated into the survey, which would be open until the end of May - submit your response [here](https://linuxfoundation.research.net/r/2025nodenext10). + +## Module customization & instrumentation + +We combined two topics about modules into one session block. + +Joyee Cheung gave a status update on the module loader hooks and what's next for `module.registerHooks()`. The consensus in the room was that we can make the internal module loading paths synchronous for better performance and reduce quirks/bugs, then implement `module.register()` as a helper on top of `module.registerHooks()` for those who want out-of-the-box worker orchestration and compatibility of the older API. For those who wish to run asynchronous code from `module.registerHooks()`, we can provide a utility similar to [everysync](https://www.npmjs.com/package/everysync). For the upcoming [evaluate hook](https://github.com/nodejs/node/pull/57139), we think that it could land with the current naming, so that it can make at least part of the lives of module customizers easier, even though it won't cover all evaluation edges due to JS spec constraints. + +Bryan English introduced a new mechanism to instrument ESM - instead of patching module exports externally, which can run into issues with live binding of exports that are lazily initialized, patch the exports internally by parsing, analysing, and rewriting the AST of the target exports to inject tracing channels. This rust-based instrumentation library has now been open-sourced on [GitHub](https://github.com/DataDog/orchestrion-js). We discussed what Node.js core can provide to make instrumentation like this more streamlined, and how to integrate AsyncContext with it to improve handling of edge cases like constructors with `super()`. While it's still in development and there are still some open issues to solve, hopefully this can be a breeding ground for adding official tracing channel support in libraries for observability without rewritting the AST in a third-party tool. From ad38f0d2b7714a4c51f39b4ead7fa801b88e677e Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 22 May 2025 00:26:56 +0200 Subject: [PATCH 2/7] Update apps/site/pages/en/blog/events/collab-summit-2025-paris.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Joyee Cheung --- apps/site/pages/en/blog/events/collab-summit-2025-paris.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md index 15e2a0b05a57b..d072971856c68 100644 --- a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -34,7 +34,7 @@ Jacob Smith facilitated a session about mentorship in the project. We reviewed o ## Improving Collaborator Experience -Jean Burellier facilitated a session using a retrospective board to gather feedback about contributor experience in Node.js core. Many brought up the flaky CI as a significant pain point. One of the main source of flakes is a [deadlock issue](https://github.com/nodejs/node/issues/54918) - fortuntely, after the summit it was allieviated by a [workaround](https://github.com/nodejs/node/pull/58047). +Jean Burellier facilitated a session using a retrospective board to gather feedback about contributor experience in Node.js core. Many brought up the flaky CI as a significant pain point. One of the main sources of flakes is a [deadlock issue](https://github.com/nodejs/node/issues/54918) - fortunately, after the summit it was alleviated by a [workaround](https://github.com/nodejs/node/pull/58047). Another issue that many brought up came from the extreme cases of consensus seeking. In Node.js, decision-making is based on the consensus from the 100+ collaborators. When collaborators cannot reach a consensus, the disagreement can be escalated to the TSC, and a vote can be initiated to break the standstill. But often the vote can be started too late, after the conversations have become exhausting, and those summoned to vote may also have a hard time digesting all of the debates. We brainstormed about ideas to improve the process, for example, using emoji votes to test the temperature, using AI to help summarize the arguments, or setting a deadline for conclusions, though the benefits of these ideas are not conclusive. From cf5e1dd699b1b36d7452452c2373c018987439d0 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 22 May 2025 00:32:15 +0200 Subject: [PATCH 3/7] Update apps/site/pages/en/blog/events/collab-summit-2025-paris.md Co-authored-by: Augustin Mauroy <97875033+AugustinMauroy@users.noreply.github.com> Signed-off-by: Joyee Cheung --- apps/site/pages/en/blog/events/collab-summit-2025-paris.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md index d072971856c68..43152394ad60f 100644 --- a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -8,7 +8,7 @@ author: joyeecheung About twice per year, Node.js contributors and community members get together in an unconference called [the Node.js collaboration summit](https://nodejs.org/en/about/get-involved/collab-summit). At the summit, we share knowledge about the project and the ecosystem, brainstorm solutions to technical and non-technical issues, make progress in decision-making discussions, and push forward new initiatives. -This April, the first collaboration summit of 2025 was hosted by Datadog in Paris. In this edition, we welcomed almost 40 in-person participants, and around a dozen more joined remotely. +This April, the first collaboration summit of 2025 was hosted by [Datadog](https://www.datadoghq.com) in Paris. In this edition, we welcomed almost 40 in-person participants, and around a dozen more joined remotely. Here is a recap of what happened at the summit. From 6356b47f7413b791aee9ba93bdf66a0fe50c8b65 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 22 May 2025 00:45:45 +0200 Subject: [PATCH 4/7] update --- apps/site/pages/en/blog/events/collab-summit-2025-paris.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md index 43152394ad60f..c9e61c98914bd 100644 --- a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -77,9 +77,10 @@ To support newer protocols, we discussed advertising HTTP/2 via ALPN for HTTPS a ## Node.js integration with Chrome DevTools -Chengzhong went through the concept of Chrome DevTools Frontend and Chrome DevTools Protocol. Node.js implements Chrome DevTools Protocol via V8, providing essential JavaScript debugging features, and extends the protocol to provide additional functionality like performance tracing, Network inspection, and automatic discovery of worker thread targets. -The support for network inspection is still in active development. It needs collaborative efforts to add side-effect-free observability diagnostic channels to both the `http` built-in module and Undici to support inspecting network traffic sent by `http.request` and `fetch` APIs. Additionally, there are plans to support WebSocket traffic inspection. +In this session we were joined remotely by Simon Zünd and Danil Somsikov from the Chrome DevTools team. Chengzhong Wu went through the concept of Chrome DevTools Frontend and Chrome DevTools Protocol. Node.js implements Chrome DevTools Protocol via V8, providing essential JavaScript debugging features, and extends the protocol to provide additional functionality like performance tracing, Network inspection, and automatic discovery of worker thread targets. + +The support for network inspection is still in active development. We discussed collaborative efforts to add side-effect-free observability diagnostic channels to both the `http` built-in module and Undici to support inspecting network traffic sent by `http.request` and `fetch` APIs. Additionally, there are plans to support WebSocket traffic inspection. Node.js supports debugging worker threads, but people are often confused because Chrome DevTools frontend can not automatically connect to a worker thread spawned in an inspected Node.js process. There is an open work to add experimental target discovery to Node.js Chrome DevTools Protocol implementation. From e729dc42b4a450aa60114d7a823be3b86fc95c47 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 22 May 2025 00:52:24 +0200 Subject: [PATCH 5/7] remove whitespace --- apps/site/pages/en/blog/events/collab-summit-2025-paris.md | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md index c9e61c98914bd..723c47cf1f17a 100644 --- a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -77,7 +77,6 @@ To support newer protocols, we discussed advertising HTTP/2 via ALPN for HTTPS a ## Node.js integration with Chrome DevTools - In this session we were joined remotely by Simon Zünd and Danil Somsikov from the Chrome DevTools team. Chengzhong Wu went through the concept of Chrome DevTools Frontend and Chrome DevTools Protocol. Node.js implements Chrome DevTools Protocol via V8, providing essential JavaScript debugging features, and extends the protocol to provide additional functionality like performance tracing, Network inspection, and automatic discovery of worker thread targets. The support for network inspection is still in active development. We discussed collaborative efforts to add side-effect-free observability diagnostic channels to both the `http` built-in module and Undici to support inspecting network traffic sent by `http.request` and `fetch` APIs. Additionally, there are plans to support WebSocket traffic inspection. From 8257644d58dcbbb9c4a594659e78306b9988971e Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 22 May 2025 00:53:32 +0200 Subject: [PATCH 6/7] correct author --- apps/site/pages/en/blog/events/collab-summit-2025-paris.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md index 723c47cf1f17a..0fd8fa2c1b088 100644 --- a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -3,7 +3,7 @@ date: '2025-05-22T00:00:00.000Z' category: events title: 'Trip report: Node.js collaboration summit (2025 Paris)' layout: blog-post -author: joyeecheung +author: Joyee Cheung --- About twice per year, Node.js contributors and community members get together in an unconference called [the Node.js collaboration summit](https://nodejs.org/en/about/get-involved/collab-summit). At the summit, we share knowledge about the project and the ecosystem, brainstorm solutions to technical and non-technical issues, make progress in decision-making discussions, and push forward new initiatives. From f37144b6025d295b4dbefa6b5266c22f2831dd98 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Fri, 23 May 2025 14:08:19 +0200 Subject: [PATCH 7/7] add legendecas to the author list --- apps/site/authors.json | 5 +++++ apps/site/pages/en/blog/events/collab-summit-2025-paris.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/site/authors.json b/apps/site/authors.json index f3dcd7fa4e86f..cd266914cba64 100644 --- a/apps/site/authors.json +++ b/apps/site/authors.json @@ -49,6 +49,11 @@ "name": "Charlie Robbins", "website": "https://github.com/indexzero" }, + "Chengzhong Wu": { + "id": "legendecas", + "name": "Chengzhong Wu", + "website": "https://github.com/legendecas" + }, "Claudio Wunder": { "id": "ovflowd", "name": "Claudio Wunder", diff --git a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md index 0fd8fa2c1b088..9bd77541e405f 100644 --- a/apps/site/pages/en/blog/events/collab-summit-2025-paris.md +++ b/apps/site/pages/en/blog/events/collab-summit-2025-paris.md @@ -3,7 +3,7 @@ date: '2025-05-22T00:00:00.000Z' category: events title: 'Trip report: Node.js collaboration summit (2025 Paris)' layout: blog-post -author: Joyee Cheung +author: Joyee Cheung, Chengzhong Wu --- About twice per year, Node.js contributors and community members get together in an unconference called [the Node.js collaboration summit](https://nodejs.org/en/about/get-involved/collab-summit). At the summit, we share knowledge about the project and the ecosystem, brainstorm solutions to technical and non-technical issues, make progress in decision-making discussions, and push forward new initiatives.