<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Node Weekly</title>
    <description>A free, once–weekly e-mail round-up of Node.js news and articles.</description>
    <link>https://nodeweekly.com/</link>
    <item>
      <title>When worker threads beat processes for Node efficiency</title>
      <link>https://nodeweekly.com/issues/643</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​643 — October 8, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191306/rss" style=" color: #20824B;"&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;📝 We're back after taking last week off – you didn't miss an issue :-) If you want one neat thing to check out today, look for the voice synth package below, it's a fun way to relive a bit of 80s nostalgia!&lt;br&gt;__&lt;br&gt;Peter Cooper, your editor&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border="0"&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em; margin: 0; padding: 0;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/v1653576619/lgfqinzbdqttwmhvljxb.png" width="100%" style="    line-height: 100%; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/191261/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/etusntxehcije4b6ody0.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191261/rss" title="medium.com" style=" color: #20824B;   "&gt;How Booking.com Cut the Cost of Its Biggest Node.js Service by 38%&lt;/a&gt;&lt;/span&gt; — The online travel company moved its biggest React SSR service from pm2’s process-based cluster approach to Platformatic’s &lt;a href="https://nodeweekly.com/link/191262/rss" style=" color: #20824B;   "&gt;Watt&lt;/a&gt; and worker threads, then tuned load balancing and V8’s GC to get noteworthy gains.&lt;/p&gt;
  &lt;p&gt;Ilya Malyavin (Booking.com) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://nodeweekly.com/link/191260/rss" style=" color: #20824B;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/195cf43d.png" width="160" height="98" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191260/rss" title="serpapi.com" style=" color: #20824B;   "&gt;100+ Search Engines. One Simple API&lt;/a&gt;&lt;/span&gt; — Build with real-time search data from Google, YouTube, Amazon, and more. SerpApi delivers structured results in JSON and Markdown for AI agents and your next app. Skip scraping headaches. &lt;a href="https://nodeweekly.com/link/191260/rss" style=" color: #20824B;   "&gt;Start building with a simple API&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;SerpApi &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191263/rss" title="nodejs.org" style=" color: #20824B;   "&gt;Node.js 26.11.0 (Current) Released&lt;/a&gt;&lt;/span&gt; — A more substantial minor release than usual with a new &lt;a href="https://nodeweekly.com/link/191264/rss" style=" color: #20824B;   "&gt;&lt;code&gt;--process-timeout&lt;/code&gt; flag&lt;/a&gt; that ends a process after a set time (even mid-busy-loop), &lt;code&gt;node:sqlite&lt;/code&gt; gets &lt;a href="https://nodeweekly.com/link/191265/rss" style=" color: #20824B;   "&gt;virtual table support&lt;/a&gt;, &lt;a href="https://nodeweekly.com/link/191266/rss" style=" color: #20824B;   "&gt;&lt;code&gt;Buffer.stringLength()&lt;/code&gt;&lt;/a&gt;, and Alpine (x64) is promoted to tier 2 support.&lt;/p&gt;
  &lt;p&gt;Antoine du Hamel &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;⚠️ 26.11 also rolled out &lt;a href="https://nodeweekly.com/link/191267/rss" style=" color: #20824B; font-weight: 600;"&gt;the new docs design&lt;/a&gt;, but a bug was found that caused the docs to not render to HTML, so &lt;a href="https://nodeweekly.com/link/191268/rss" style=" color: #20824B; font-weight: 600;"&gt;v26.11.1&lt;/a&gt; reverts back to the old docs design for now.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;strong&gt;IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;While we were away last week, VoidZero dropped &lt;a href="https://nodeweekly.com/link/191269/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Vite+ 1.0&lt;/a&gt;, its single command (&lt;code&gt;vp&lt;/code&gt;) Node.js version, package, and frontend toolchain manager. Node's &lt;a href="https://nodeweekly.com/link/191270/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;download page&lt;/a&gt; has already updated to offering Vite+ as an option.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;With &lt;a href="https://nodeweekly.com/link/191271/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;this commit&lt;/a&gt;, future releases of Node should &lt;a href="https://nodeweekly.com/link/191272/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;load most ES modules synchronously&lt;/a&gt;, only taking the async path for top-level &lt;code&gt;await&lt;/code&gt;, loader hooks and the like.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191273/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;V8 15.5 has landed&lt;/a&gt; on Node's main branch, ahead of Node 27. A big jump from Node 26's V8 14.6.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191274/rss" title="adventures.nodeland.dev" style=" color: #20824B;   "&gt;Optimizing Objects with &lt;code&gt;null&lt;/code&gt; Prototypes&lt;/a&gt;&lt;/span&gt; — In V8, objects created with &lt;code&gt;{ __proto__: null }&lt;/code&gt; or &lt;code&gt;Object.create(null)&lt;/code&gt; start off in a slower ‘dictionary mode’. Creating a plain object and nulling the prototype afterwards keeps it fast, as Matteo shows.&lt;/p&gt;
  &lt;p&gt;Matteo Collina &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191275/rss" title="blog.gaborkoos.com" style=" color: #20824B;   "&gt;I Tested 11 HTTP Resilience Libraries&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://nodeweekly.com/link/191276/rss" style=" color: #20824B;   "&gt;ffetch&lt;/a&gt;'s creator tests how a variety of fetch wrappers (like &lt;a href="https://nodeweekly.com/link/191277/rss" style=" color: #20824B;   "&gt;Ky&lt;/a&gt;, &lt;a href="https://nodeweekly.com/link/191278/rss" style=" color: #20824B;   "&gt;ofetch&lt;/a&gt;, and &lt;a href="https://nodeweekly.com/link/191279/rss" style=" color: #20824B;   "&gt;Wretch&lt;/a&gt;) handle retries, timeouts and cancellation, and where those policies interact badly.&lt;/p&gt;
  &lt;p&gt;Gabor Koos &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191280/rss" title="fandf.co" style=" color: #20824B;   "&gt;Find Auth Gaps in Your Node APIs Before Hackers Do&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://nodeweekly.com/link/191280/rss" style=" color: #20824B;   "&gt;SonarQube Hunter Agent&lt;/a&gt; hunts intent-based vulnerabilities and drops verified findings right into your issue list.&lt;/p&gt;
  &lt;p&gt;SonarSource &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/191281/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Node.js Thread Pools on Busy Machines&lt;/a&gt; – Why sizing the thread pool from the CPU count backfires when other processes share the machine. &lt;cite&gt;Matteo Collina (Platformatic)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/191282/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Maintaining &lt;code&gt;wait-on&lt;/code&gt; at Agent Speed&lt;/a&gt; – &lt;a href="https://nodeweekly.com/link/191283/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;wait-on&lt;/a&gt;'s new co-maintainer reflects on his first week managing things agent-style. &lt;cite&gt;Kevin Old&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/191284/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;How to Compile JavaScript into a Single Executable&lt;/a&gt; – A comparison of the Node, Bun and Deno approaches. &lt;cite&gt;Flavio Copes&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/191285/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/zl46xknjbzir2w3qx7sk.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191285/rss" title="github.com" style=" color: #20824B;   "&gt;DOCX 9.9: Generate Word &lt;code&gt;.docx&lt;/code&gt; Files from JavaScript&lt;/a&gt;&lt;/span&gt; — A comprehensive library for generating &lt;code&gt;docx&lt;/code&gt; files. 9.8 recently added support for charts, shapes and watermarks, and 9.9 adds a way to lay out documents the way Word itself does. &lt;a href="https://nodeweekly.com/link/191286/rss" style=" color: #20824B;   "&gt;Homepage&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Dolan Miu &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191287/rss" title="h3.dev" style=" color: #20824B;   "&gt;H3 v2: The UnJS HTTP Framework is Rebuilt on Web Standards&lt;/a&gt;&lt;/span&gt; — A minimal HTTP framework best known for powering Nitro and Nuxt’s server layer. v2 is a rewrite around standard &lt;code&gt;Request&lt;/code&gt; and &lt;code&gt;Response&lt;/code&gt;, so one app runs on Node, Bun, Deno and Workers, with &lt;code&gt;URLPattern&lt;/code&gt;-style routing and &lt;code&gt;(event, next)&lt;/code&gt; middleware. &lt;a href="https://nodeweekly.com/link/191288/rss" style=" color: #20824B;   "&gt;More info here&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Pooya Parsa &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;span&gt;🤖&lt;/span&gt; &lt;a href="https://nodeweekly.com/link/191289/rss" title="crashunited.itch.io" style=" color: #20824B;   "&gt;Klattsch: Retro 1980s Vocal Synthesis&lt;/a&gt;&lt;/span&gt; — 1980s-style phonemes to speech in a single npm package! It's very flexible, you can even make it sing, akin to HAL in &lt;em&gt;2001&lt;/em&gt;. Works in Node but you can also run it in the browser.&lt;/p&gt;
  &lt;p&gt;Crash United &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/191290/rss" title="feedsmith.dev" style=" color: #20824B;   "&gt;Feedsmith 3.0: Fast Web Feed Parser and Generator&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://nodeweekly.com/link/191291/rss" style=" color: #20824B;   "&gt;Parse and generate&lt;/a&gt; RSS, Atom, and JSON feeds from JavaScript, in both browsers and Node. v2.x users will find &lt;a href="https://nodeweekly.com/link/191292/rss" style=" color: #20824B;   "&gt;this migration guide&lt;/a&gt; useful.&lt;/p&gt;
  &lt;p&gt;Maciej Lamberski &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191293/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;pnpm 12.10&lt;/a&gt; – An experimental &lt;code&gt;loaded&lt;/code&gt; linker lets Node load dependencies straight from pnpm's store, skipping &lt;code&gt;node_modules&lt;/code&gt; linking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191294/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Hono 5.0 RC&lt;/a&gt; – The web-standards server framework goes ESM-only, requires Node 22.12+, and moves runtime adapters into separate packages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191295/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Execa 10.1&lt;/a&gt; – The process execution library fixes behaviors you may have relied on, like &lt;code&gt;extendEnv: false&lt;/code&gt; still inheriting &lt;code&gt;process.env&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191296/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Effect 4.0&lt;/a&gt; – The TypeScript effect system gets a rewritten dependency-free core and consolidated packages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⚠️ &lt;a href="https://nodeweekly.com/link/191297/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Handlebars 4.7.10&lt;/a&gt; – Fixes two critical JavaScript injection flaws. Earlier 4.x releases are affected.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191298/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;he 2.0&lt;/a&gt; – Mathias Bynens' HTML entity encoder/decoder gets its first release in 8 years and moves to ESM with named exports.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px;"&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📰 Classifieds&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/191299/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;CodeAF&lt;/a&gt; fixed 2x OpenCode's issues and nearly 4x Claude Code's on the same model, at up to 4.8x less per fix. &lt;a href="https://nodeweekly.com/link/191299/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;New release, open source&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;🚫 Ban the device, not just the account. &lt;a href="https://nodeweekly.com/link/191307/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Fingerprint's visitor ID&lt;/a&gt; catches ban evaders — even incognito or behind a proxy.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;📢  Elsewhere in the ecosystem&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.node&lt;/code&gt; domains?&lt;/strong&gt; Confused by the huge number of TLDs available to register? Get ready for more as ICANN has unveiled &lt;a href="https://nodeweekly.com/link/191300/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a whole new round of them&lt;/a&gt; – you can browse &lt;a href="https://nodeweekly.com/link/191301/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;the proposed new gTLDs here&lt;/a&gt; which… includes &lt;code&gt;.node&lt;/code&gt;!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sindre Sorhus, the prolific npm package author, &lt;a href="https://nodeweekly.com/link/191302/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;has disabled outside pull requests&lt;/a&gt; on his repos due to AI, but will keep maintaining them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Daniel Lemire &lt;a href="https://nodeweekly.com/link/191303/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;timed linking the Node binary&lt;/a&gt; with GNU &lt;code&gt;ld&lt;/code&gt;, &lt;code&gt;gold&lt;/code&gt;, and &lt;code&gt;mold&lt;/code&gt;. Mold won easily, which may be useful if you're rebuilding Node a &lt;em&gt;lot&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Theo Browne's &lt;a href="https://nodeweekly.com/link/191304/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;ts-rust&lt;/a&gt; is an experimental Rust port of the TypeScript 7 compiler, built almost entirely by AI agents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📊 The &lt;a href="https://nodeweekly.com/link/191305/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;2026 &lt;em&gt;Stack Overflow&lt;/em&gt; Developer Survey results&lt;/a&gt; are out, drawing on 30,903 responses.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;


&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://nodeweekly.com/open/643/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 8 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://nodeweekly.com/issues/643</guid>
    </item>
    <item>
      <title>12 Node built-ins that replace npm packages</title>
      <link>https://nodeweekly.com/issues/642</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​642 — September 24, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190799/rss" style=" color: #20824B;"&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;⚠️ We're taking a week off next week, so we'll be back on Thursday, October 8.&lt;br&gt;__&lt;br&gt;&lt;em&gt;Your editor, Peter Cooper&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border="0"&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em; margin: 0; padding: 0;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/v1653576619/lgfqinzbdqttwmhvljxb.png" width="100%" style="    line-height: 100%; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190758/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/rjkg96w3qff4rlobgivq.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190758/rss" title="flaviocopes.com" style=" color: #20824B;   "&gt;Node.js Built-ins That Replaced npm Packages&lt;/a&gt;&lt;/span&gt; — A practical tour of 12 Node built-ins that replace packages like &lt;code&gt;axios&lt;/code&gt;, &lt;code&gt;dotenv&lt;/code&gt;, &lt;code&gt;nodemon&lt;/code&gt; and &lt;code&gt;chalk&lt;/code&gt;. Each is explained with its stability level in Node 24 LTS and gotchas that might make you want to stick with your existing dependency anyway.&lt;/p&gt;
  &lt;p&gt;Flavio Copes &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://nodeweekly.com/link/190757/rss" style=" color: #20824B;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/9a068ba0.jpg" width="110" height="110" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190757/rss" title="agentfield.ai" style=" color: #20824B;   "&gt;CodeAF: The Open-Source Software Factory for Open Models&lt;/a&gt;&lt;/span&gt; — Instead of juggling a terminal for every agent, you get one window for every project. Hand work off: it splits it into parts, runs them in parallel, tests what comes back and merges what passes. Many models, one session: the right one for each call.&lt;/p&gt;
  &lt;p&gt;AgentField.ai &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190759/rss" title="nodejs.org" style=" color: #20824B;   "&gt;Node.js 26.10.0 (Current) Released&lt;/a&gt;&lt;/span&gt; — Built-in, promise-based &lt;a href="https://nodeweekly.com/link/190760/rss" style=" color: #20824B;   "&gt;&lt;code&gt;util.debounce()&lt;/code&gt; and &lt;code&gt;util.throttle()&lt;/code&gt;&lt;/a&gt; arrive, complete with &lt;code&gt;AbortSignal&lt;/code&gt; support. There’s also &lt;code&gt;&lt;a href="https://nodeweekly.com/link/190761/rss" style=" color: #20824B;   "&gt;util.markPromiseAsHandled()&lt;/a&gt;&lt;/code&gt; to help retire &lt;code&gt;.catch(() =&amp;gt; {})&lt;/code&gt; hacks. Plus a little more besides.&lt;/p&gt;
  &lt;p&gt;Antoine du Hamel &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 &lt;a href="https://nodeweekly.com/link/190762/rss" style=" color: #20824B; font-weight: 600;"&gt;Node v22.23.3 (LTS)&lt;/a&gt; also landed with updated root certificates and dependencies (OpenSSL, npm, and Undici) plus minor fixes.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;strong&gt;IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;From Node.js 27, &lt;a href="https://nodeweekly.com/link/190763/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Intel Macs drop to only having 'experimental' support&lt;/a&gt;, meaning no official x64 macOS builds and an arm64-only installer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;James Snell has proposed &lt;a href="https://nodeweekly.com/link/190764/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a &lt;code&gt;--process-timeout&lt;/code&gt; flag&lt;/a&gt; that kills a stuck process, even one in a tight loop, and reports what kept it alive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GitHub Actions has &lt;a href="https://nodeweekly.com/link/190765/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;removed Node 20 from its runners&lt;/a&gt; so if you maintain an action, switch &lt;code&gt;runs.using&lt;/code&gt; to &lt;code&gt;node24&lt;/code&gt; and publish a new release.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Yagiz Nizipli has opened &lt;a href="https://nodeweekly.com/link/190766/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a PR that shrinks the &lt;code&gt;node&lt;/code&gt; binary by about a third&lt;/a&gt; (147MB to 95MB on macOS arm64) using extra compression and stripping symbols. Notably, 𝕏 &lt;a href="https://nodeweekly.com/link/190767/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Grok was used&lt;/a&gt; to do this work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Daniel Lemire explains how AI-assisted experimentation &lt;a href="https://nodeweekly.com/link/190768/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;made several libraries that ship in Node faster&lt;/a&gt;, including Ada, simdjson and simdutf.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190769/rss" title="github.blog" style=" color: #20824B;   "&gt;npm Tokens Can Now Stage Releases Without Publishing Them&lt;/a&gt;&lt;/span&gt; — A new token permission lets CI stage npm releases but not publish them, with a maintainer approving each staged version with 2FA. It offers a migration path ahead of npm's planned ending of direct publishing using bypass-2FA tokens in January 2027 if you can’t use &lt;a href="https://nodeweekly.com/link/190770/rss" style=" color: #20824B;   "&gt;trusted publishing&lt;/a&gt; yet.&lt;/p&gt;
  &lt;p&gt;GitHub / npm team &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190771/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;How I Traced a Node.js Streams Bug in &lt;code&gt;Duplex.from()&lt;/code&gt;&lt;/a&gt; – A first-time core contributor's path from issue to PR. &lt;cite&gt;Aman Chadha&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190772/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Publishing a Subfolder to npm for Cleaner Package Paths&lt;/a&gt; – How to keep &lt;code&gt;dist/&lt;/code&gt; (or &lt;code&gt;src/&lt;/code&gt;) out of your package's import paths. &lt;cite&gt;Bramus&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190773/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Faster SSE Responses with Async Generators and &lt;code&gt;Promise.race()&lt;/code&gt;&lt;/a&gt; &lt;cite&gt;Valeri Karpov&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190774/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/ooj579buk2rduxf6awis.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190774/rss" title="blog.platformatic.dev" style=" color: #20824B;   "&gt;secure-eval-worker: A Safer &lt;code&gt;eval()&lt;/code&gt; via Node's Permission Model&lt;/a&gt;&lt;/span&gt; — A new way to run untrusted (or AI-generated) JavaScript in a locked-down worker with timeouts, memory caps, and access only to the host functions you choose. Node 26 only, and not a true sandbox.&lt;/p&gt;
  &lt;p&gt;Matteo Collina and Luca Maraschi &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;span&gt;🔒&lt;/span&gt; &lt;a href="https://nodeweekly.com/link/190775/rss" title="owasp.github.io" style=" color: #20824B;   "&gt;CVE Lite CLI: Scan Your Lockfile, Get the Upgrades to Run&lt;/a&gt;&lt;/span&gt; — An OWASP-backed scanner that reads your lockfile, checks it against OSV and npm’s advisories, and gives you npm/pnpm/Yarn/Bun commands to use, including which parent package(s) to bump for transitive issues.&lt;/p&gt;
  &lt;p&gt;Sonu Kapoor and OWASP &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190776/rss" title="www.tigerdata.com" style=" color: #20824B;   "&gt;Your Nightly Rollup Job Is a Query That Got Too Big&lt;/a&gt;&lt;/span&gt; — TimescaleDB extends Postgres with continuous aggregates to keep rollups fresh. No batch job. &lt;a href="https://nodeweekly.com/link/190776/rss" style=" color: #20824B;   "&gt;Get $1000 credit to start&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Tiger Data (creators of TimescaleDB) &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;span&gt;🤖&lt;/span&gt; &lt;a href="https://nodeweekly.com/link/190777/rss" title="github.com" style=" color: #20824B;   "&gt;Transformers.js v4.3: Run AI Models from JavaScript&lt;/a&gt;&lt;/span&gt; — Adds support for structured output (e.g. JSON), using WebGPU on Safari 26+, and DeepSeek v4. &lt;a href="https://nodeweekly.com/link/190778/rss" style=" color: #20824B;   "&gt;The docs&lt;/a&gt; have had an overhaul and there’s now an &lt;a href="https://nodeweekly.com/link/190779/rss" style=" color: #20824B;   "&gt;agent skill&lt;/a&gt; you can use.&lt;/p&gt;
  &lt;p&gt;Hugging Face &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190780/rss" title="ben3d.ca" style=" color: #20824B;   "&gt;vitest-gpu and jest-gpu: Test WebGL and WebGPU Code Without a Browser&lt;/a&gt;&lt;/span&gt; — Vitest and Jest environments that give tests WebGL and WebGPU contexts in Node, so you can compile shaders, run compute passes, or diff frames against baselines &lt;em&gt;sans&lt;/em&gt; browser.&lt;/p&gt;
  &lt;p&gt;Ben Houston &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190781/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/lsy7rbj3vk6l9lzqxhgd.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190782/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Superdiff 4.3&lt;/a&gt; – A library that produces diffs of objects, arrays and text. &lt;a href="https://nodeweekly.com/link/190781/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;v4.3 can now diff code&lt;/a&gt; by line and token too &lt;em&gt;(above)&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190783/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;dotenv 18.0&lt;/a&gt; – The popular &lt;code&gt;.env&lt;/code&gt; file loader. &lt;a href="https://nodeweekly.com/link/190784/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;v18 adds a CLI&lt;/a&gt; and a faster opt-in parser, but drops &lt;code&gt;-r dotenv/config&lt;/code&gt; preloading in favor of &lt;code&gt;dotenv run --&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190785/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Tinypool 2.2&lt;/a&gt; – Minimal worker thread pool and Piscina fork. Now &lt;a href="https://nodeweekly.com/link/190786/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;accepts a &lt;code&gt;URL&lt;/code&gt; instance&lt;/a&gt; as the filename.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190787/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;NestJS 12.1&lt;/a&gt; – Now with &lt;a href="https://nodeweekly.com/link/190788/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;built-in cookie support&lt;/a&gt;, &lt;a href="https://nodeweekly.com/link/190789/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;CSRF&lt;/a&gt; protection, and security headers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190790/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;mongodb-memory-server 11.3&lt;/a&gt; – Spin up real MongoDB servers for tests.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190791/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;SuperTest 7.3&lt;/a&gt; – Library for testing Node HTTP servers using a fluent API.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190792/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;SQL Formatter 15.9&lt;/a&gt; – Library for pretty-printing SQL queries.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px;"&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📰 Classifieds&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;🚫 Ban the device, not just the account. &lt;a href="https://nodeweekly.com/link/190793/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Fingerprint's visitor ID&lt;/a&gt; catches ban evaders — even incognito or behind a proxy.&lt;/p&gt;
 
&lt;p&gt;🎟️ Join us at &lt;a href="https://nodeweekly.com/link/190794/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Supabase Select&lt;/a&gt; on October 2. Get first-hand information about what's coming soon in Supabase. &lt;a href="https://nodeweekly.com/link/190794/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Apply to attend with 25% off: SUPAWEEKLY&lt;/a&gt;.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;📢  Elsewhere in the ecosystem&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190795/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;pnpm 12.6&lt;/a&gt; can now dedupe dependency versions across a workspace as it installs, keeps &lt;code&gt;node_modules&lt;/code&gt; working after a project is moved (macOS and Linux only), and adds &lt;code&gt;--save-types&lt;/code&gt; for &lt;code&gt;@types/*&lt;/code&gt; packages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Coding agents quadrupled Linear's test suite, so &lt;a href="https://nodeweekly.com/link/190796/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;its team reworked their CI&lt;/a&gt; to get costs down: rewriting type-aware ESLint rules as plain AST checks cut lint time 55%, and selectively disabling Vitest's isolation saved a further 17% a month.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cloudflare's Sunil Pai wrote about &lt;a href="https://nodeweekly.com/link/190797/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;the senior engineer 'death spiral'&lt;/a&gt;, where you go quiet for weeks to prove yourself in a new role and end up burning out.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🧪 &lt;a href="https://nodeweekly.com/link/190798/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;A 'periodic table' of all 115 standard HTML elements!&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;


&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://nodeweekly.com/open/642/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nodeweekly.com/issues/642</guid>
    </item>
    <item>
      <title>Node 26.9 turns on FFI by default</title>
      <link>https://nodeweekly.com/issues/641</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​641 — September 17, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190547/rss" style=" color: #20824B;"&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border="0"&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em; margin: 0; padding: 0;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/v1653576619/lgfqinzbdqttwmhvljxb.png" width="100%" style="    line-height: 100%; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190504/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/p1qsibnkmb1pqggvhpdk.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190504/rss" title="github.blog" style=" color: #20824B;   "&gt;Why (and How) GitHub Ported Copilot's Runtime from Node to Rust&lt;/a&gt;&lt;/span&gt; — GitHub's &lt;em&gt;Copilot&lt;/em&gt; runtime moved to Rust, ported in pieces behind &lt;a href="https://nodeweekly.com/link/190505/rss" style=" color: #20824B;   "&gt;napi-rs&lt;/a&gt; shims while shipping daily. Startup times and memory usage inspired the move, but the gold for porters is in the regressions they hit involving number types, &lt;code&gt;||&lt;/code&gt; semantics, and blocking the event loop.&lt;/p&gt;
  &lt;p&gt;Stephen Toub (Microsoft) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://nodeweekly.com/link/190503/rss" style=" color: #20824B;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/fe329987.png" width="110" height="110" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190503/rss" title="www.tigerdata.com" style=" color: #20824B;   "&gt;That p99 Spike Is One Slow Analytics Query&lt;/a&gt;&lt;/span&gt; — One endpoint runs an analytics query over millions of rows, and latency spikes for everyone. TimescaleDB extends Postgres so that query returns in milliseconds at scale. Hypertables, compression, continuous aggregates. &lt;a href="https://nodeweekly.com/link/190503/rss" style=" color: #20824B;   "&gt;Get $1000 credit to start&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Tiger Data (creators of TimescaleDB) &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;strong&gt;IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Node is to get &lt;a href="https://nodeweekly.com/link/190506/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;&lt;code&gt;util.debounce()&lt;/code&gt; and &lt;code&gt;util.throttle()&lt;/code&gt; functions&lt;/a&gt;, two staples of utility libraries. They've landed on main for a future release.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 &lt;a href="https://nodeweekly.com/link/190507/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Moment.js 2.31.0&lt;/a&gt; is a key update. The date library is in 'maintenance mode', but gets 25M downloads a week, and v2.31.0 &lt;a href="https://nodeweekly.com/link/190508/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;fixes a path traversal vulnerability&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Node.js Web Team's &lt;a href="https://nodeweekly.com/link/190509/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;redesigned API docs&lt;/a&gt; have &lt;a href="https://nodeweekly.com/link/190510/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;been merged&lt;/a&gt; and should reach &lt;code&gt;nodejs.org/api&lt;/code&gt; alongside a release soon.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Node 27, the HTTP client will &lt;a href="https://nodeweekly.com/link/190511/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;reject responses with more headers than &lt;code&gt;request.maxHeadersCount&lt;/code&gt;&lt;/a&gt; (1000 by default right now) instead of just truncating them.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190512/rss" title="nodejs.org" style=" color: #20824B;   "&gt;Node.js 26.9.0 (Current) Released&lt;/a&gt;&lt;/span&gt; — A reasonably significant minor release that brings a few new things to the table:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodeweekly.com/link/190513/rss" style=" color: #20824B;   "&gt;&lt;code&gt;node:ffi&lt;/code&gt;&lt;/a&gt; is enabled by default (but still &lt;em&gt;experimental&lt;/em&gt;), so you can call functions in native libraries without writing an addon.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nodeweekly.com/link/190514/rss" style=" color: #20824B;   "&gt;&lt;code&gt;node:bench&lt;/code&gt;&lt;/a&gt; is a new benchmarking module modeled on &lt;code&gt;node:test&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nodeweekly.com/link/190515/rss" style=" color: #20824B;   "&gt;Web Workers now have an experimental implementation&lt;/a&gt; (behind a flag), so browser-style &lt;code&gt;new Worker()&lt;/code&gt; and &lt;code&gt;postMessage&lt;/code&gt;, etc. can be used.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nodeweekly.com/link/190516/rss" style=" color: #20824B;   "&gt;Worker threads start up to twice as fast&lt;/a&gt; (per initial benchmarks) and use less memory, as they now start from Node's &lt;a href="https://nodeweekly.com/link/190517/rss" style=" color: #20824B;   "&gt;built-in snapshot&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
  &lt;p&gt;Antoine du Hamel (Node.js Team) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190518/rss" title="master.dev" style=" color: #20824B;   "&gt;Stay Sharp in the Age of AI&lt;/a&gt;&lt;/span&gt; — Master.dev instructors build at Anthropic, OpenAI, Netflix, Google, and Stripe. Learn from them via courses, workshops, and AI learning paths. &lt;a href="https://nodeweekly.com/link/190518/rss" style=" color: #20824B;   "&gt;New members get $100 off a yearly membership&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Master.dev &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190519/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Connection Reuse is the Money&lt;/a&gt; – How a webhook sender cut its repeat TLS handshakes with one Undici &lt;a href="https://nodeweekly.com/link/190520/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Agent&lt;/a&gt; per destination. &lt;cite&gt;Mike Murray&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190521/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Email, Decoupled from Where and How&lt;/a&gt; – The design behind &lt;a href="https://nodeweekly.com/link/190522/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Upyo&lt;/a&gt;, a web-standards-based email library for Node, Deno, Bun and edge runtimes that works with many providers. &lt;cite&gt;Hong Minhee&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190523/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;A Deep Dive into JavaScript Engines: Writing Code That Makes V8 Happy&lt;/a&gt; &lt;cite&gt;Audrey Doyen&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190524/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Five Software Engineering Roles for Working with AI&lt;/a&gt; &lt;cite&gt;Nicholas C. Zakas&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190525/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;How to Implement a Distributed Circuit Breaker&lt;/a&gt; &lt;cite&gt;Gabor Koos&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190526/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/wyik6kkj35wmos4bkr2r.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190526/rss" title="www.eraser.io" style=" color: #20824B;   "&gt;Eraser Diagrams: Diagrams as Code, Minus the Layout Engine&lt;/a&gt;&lt;/span&gt; — A Node API/CLI for rendering JSON diagrams to PNG or HTML. Unlike Mermaid or D2, there's no auto-layout engine, so you (or your LLM!) get to control just where things go, while connection routing, icons and styling are handled for you.&lt;/p&gt;
  &lt;p&gt;Eraser &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190527/rss" title="blog.platformatic.dev" style=" color: #20824B;   "&gt;&lt;code&gt;@platformatic/memcached&lt;/code&gt;: A Faster memcached Client&lt;/a&gt;&lt;/span&gt; — A zero-dependency &lt;a href="https://nodeweekly.com/link/190528/rss" style=" color: #20824B;   "&gt;memcached&lt;/a&gt; client built on the modern meta protocol, pipelining over a single connection. Claims to be "roughly 3x" the speed of alternatives.&lt;/p&gt;
  &lt;p&gt;Matteo Collina (Platformatic) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190529/rss" title="github.com" style=" color: #20824B;   "&gt;jsdom 30.1: The Release That's 'Feeling the AGI'&lt;/a&gt;&lt;/span&gt; — The pure-JS DOM implementation gets faster DOM construction, mutations, &lt;code&gt;getComputedStyle()&lt;/code&gt; and event dispatch, plus lower memory use. Much of it came from Scott's Codex-assisted PRs, which Domenic praises for being carefully curated.&lt;/p&gt;
  &lt;p&gt;Domenic Denicola and Scott Cooper &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190530/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;XO 5.0&lt;/a&gt; – The zero-config ESLint wrapper now lints &lt;code&gt;package.json&lt;/code&gt; files and enforces import file extensions in TypeScript.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190531/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;officeParser 8.0&lt;/a&gt; – Parse Office files (&lt;code&gt;docx&lt;/code&gt;, &lt;code&gt;pptx&lt;/code&gt;, &lt;code&gt;xlsx&lt;/code&gt;, etc.) and PDFs into an AST. Now with a rewritten PDF extractor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190532/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;oclif 6.0&lt;/a&gt; – Salesforce's framework for building Node CLIs drops support for installing legacy plugins.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190533/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;pg-boss 12.33&lt;/a&gt; – The Postgres-backed job queue adds a &lt;code&gt;TestClock&lt;/code&gt; so tests needn't wait on timers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190534/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Aedes 1.2&lt;/a&gt; – Barebone MQTT broker that runs on any stream server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 &lt;a href="https://nodeweekly.com/link/190535/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Express 4.22.3&lt;/a&gt; – A security release for those on Express 4.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px;"&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📰 Classifieds&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;⚡ &lt;a href="https://nodeweekly.com/link/190536/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Zuplo&lt;/a&gt; puts every API, AI, and MCP request behind one gateway. Route traffic, guard your MCP servers, and cap your AI costs. &lt;a href="https://nodeweekly.com/link/190536/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Try it free&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;🛡️ Not all bots deserve blocking. &lt;a href="https://nodeweekly.com/link/190537/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Fingerprint Bot Detection&lt;/a&gt; stops content scrapers while letting legit AI agents through. &lt;a href="https://nodeweekly.com/link/190537/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Try for free&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;🎟️ Join us at &lt;a href="https://nodeweekly.com/link/190538/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Supabase Select&lt;/a&gt; on October 2. Bring your hardest questions to the engineers building Supabase at the Ask Supabase booth. &lt;a href="https://nodeweekly.com/link/190538/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Apply to attend with 25% off: SUPAWEEKLY&lt;/a&gt;.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;📢  Elsewhere in the ecosystem&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190539/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/ztdu0xshlulicymdyo7u.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190539/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;npmchart.com&lt;/a&gt; &lt;em&gt;(above)&lt;/em&gt; is a new option for tracking download trends and repo activity of npm packages. &lt;a href="https://nodeweekly.com/link/190540/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Here's the chart for &lt;code&gt;express&lt;/code&gt;&lt;/a&gt;, for example.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190541/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;A review of sixteen weeks of package manager releases&lt;/a&gt; across ecosystems finds similar new defences rolling out, like cooldowns, blocking install scripts (as in &lt;a href="https://nodeweekly.com/link/190542/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;npm 12&lt;/a&gt;), and publish-time scans, which &lt;a href="https://nodeweekly.com/link/190543/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;npm has done since July&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Those npm 12 defaults won't reach current Node lines, though. Last month, the Release WG &lt;a href="https://nodeweekly.com/link/190544/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;decided npm 12 is &lt;em&gt;"far too disruptive"&lt;/em&gt;&lt;/a&gt; for Node 22, 24 or 26, so it'll arrive in Node 27.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GitHub Actions has &lt;a href="https://nodeweekly.com/link/190545/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a new &lt;code&gt;cache-mode&lt;/code&gt; setting&lt;/a&gt; to limit cache access per workflow or job, a defence against the kind of cache poisoning that &lt;a href="https://nodeweekly.com/link/190546/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;compromised TanStack's npm packages in May&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;


&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://nodeweekly.com/open/641/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nodeweekly.com/issues/641</guid>
    </item>
    <item>
      <title>Node is getting a built-in benchmark runner</title>
      <link>https://nodeweekly.com/issues/640</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​640 — September 10, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190227/rss" style=" color: #20824B;"&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border="0"&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em; margin: 0; padding: 0;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/v1653576619/lgfqinzbdqttwmhvljxb.png" width="100%" style="    line-height: 100%; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190180/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/euwt3muj9vbng2e7z9gu.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190180/rss" title="blog.cloudflare.com" style=" color: #20824B;   "&gt;Cloudflare Workers Gets a New, Node.js-Aligned Module Registry&lt;/a&gt;&lt;/span&gt; — &lt;em&gt;Workers&lt;/em&gt; &lt;a href="https://nodeweekly.com/link/190181/rss" style=" color: #20824B;   "&gt;enabled Node.js compatibility&lt;/a&gt; by default last month, meaning you can use most of Node’s built-in APIs in your Workers. Now there’s an opt-in way to load modules that resolves import paths as proper URLs, bringing &lt;code&gt;import.meta&lt;/code&gt; and Node's &lt;code&gt;require(esm)&lt;/code&gt; rules with it.&lt;/p&gt;
  &lt;p&gt;Logan Gatlin and James Snell (Cloudflare) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://nodeweekly.com/link/190179/rss" style=" color: #20824B;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/3d7cb94a.png" width="110" height="110" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190179/rss" title="master.dev" style=" color: #20824B;   "&gt;Confidently Deploy and Manage Containerized Apps on Kubernetes&lt;/a&gt;&lt;/span&gt; — Join this detailed video course with Erik Reinert and learn how to deploy and manage production-grade containerized applications on Kubernetes. You'll cover infrastructure, testing, rollbacks, autoscaling and more, all before pushing your cluster to EKS.&lt;/p&gt;
  &lt;p&gt;Master.dev &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;span&gt;📊&lt;/span&gt; &lt;a href="https://nodeweekly.com/link/190182/rss" title="www.jasnell.me" style=" color: #20824B;   "&gt;&lt;code&gt;node:bench&lt;/code&gt;: Node Core Gets a Built-In Benchmark Runner&lt;/a&gt;&lt;/span&gt; — Node has had a built-in test runner for years but no benchmark runner. James's experimental &lt;code&gt;node:bench&lt;/code&gt; module has &lt;a href="https://nodeweekly.com/link/190183/rss" style=" color: #20824B;   "&gt;landed on main&lt;/a&gt;, so expect to see it soon. It's modelled on &lt;code&gt;node:test&lt;/code&gt;, with a &lt;code&gt;node --bench&lt;/code&gt; CLI and JSON reporter.&lt;/p&gt;
  &lt;p&gt;James M Snell &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;strong&gt;IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190184/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Node.js v26.8.2 (Current)&lt;/a&gt; and &lt;a href="https://nodeweekly.com/link/190185/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;v24.21.0 (LTS)&lt;/a&gt; are out, both including a security release of Undici that fixes &lt;a href="https://nodeweekly.com/link/190186/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;several vulnerabilities&lt;/a&gt;, plus OpenSSL 3.5.8 and numerous tweaks and fixes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 Researchers at GitLab found &lt;a href="https://nodeweekly.com/link/190187/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a CVSS 10.0 sandbox escape in &lt;code&gt;vm2&lt;/code&gt;&lt;/a&gt;, the widely used Node sandboxing library. The reported escape was patched in 3.11.7+, but the writeup argues &lt;code&gt;vm2&lt;/code&gt; shouldn't be used for genuinely untrusted code (though &lt;code&gt;vm2&lt;/code&gt;'s own docs &lt;a href="https://nodeweekly.com/link/190188/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;are also honest about this&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zod creator Colin McDonnell has landed &lt;a href="https://nodeweekly.com/link/190189/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a change that speeds up Node's startup&lt;/a&gt; (by a millisecond or so, granted) by seeding V8's non-cryptographic entropy from the OS rather than OpenSSL.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This year's TSC elections went uncontested: &lt;a href="https://nodeweekly.com/link/190190/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Matteo Collina staying Chair and Rafael Gonzaga becoming Vice-Chair&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190191/rss" title="blog.gaborkoos.com" style=" color: #20824B;   "&gt;Fuzzing the State Machines Inside My HTTP Client&lt;/a&gt;&lt;/span&gt; — A practical case for property-based testing, made by adding &lt;a href="https://nodeweekly.com/link/190192/rss" style=" color: #20824B;   "&gt;fast-check&lt;/a&gt; properties to &lt;a href="https://nodeweekly.com/link/190193/rss" style=" color: #20824B;   "&gt;ffetch&lt;/a&gt;’s 206 passing tests. Thousands of generated cases found 11 real bugs in code considered fully tested.&lt;/p&gt;
  &lt;p&gt;Gabor Koos &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190194/rss" title="sentry.io" style=" color: #20824B;   "&gt;Add MCP Server Monitoring to Your Node.js Project&lt;/a&gt;&lt;/span&gt; — A single function call. See who is connecting, which tools drag, and the failures MCP never throws.&lt;/p&gt;
  &lt;p&gt;Sentry &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190195/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Is Prisma 8 Ready for Long-Lived Production Apps?&lt;/a&gt; – A response to community worries about Prisma 8's new migration model. &lt;cite&gt;Will Madden (Prisma)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190196/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Containerizing and Slimming Node Apps with Paketo Buildpacks&lt;/a&gt; &lt;cite&gt;Costas Papastathis (Paketo)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/190197/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;What &lt;code&gt;await fetch()&lt;/code&gt; Actually Waits For&lt;/a&gt; &lt;cite&gt;Gabor Koos&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://nodeweekly.com/link/190198/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/pbtktrh32hrdvb3kwjjd.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190198/rss" title="rslib.rs" style=" color: #20824B;   "&gt;Rslib 1.0: A Build Tool for JavaScript Libraries and CLIs&lt;/a&gt;&lt;/span&gt; — Rspack's answer to &lt;code&gt;tsup&lt;/code&gt;/&lt;code&gt;tsdown&lt;/code&gt; goes 1.0 with a stable config and JS API. It can &lt;a href="https://nodeweekly.com/link/190199/rss" style=" color: #20824B;   "&gt;infer syntax targets&lt;/a&gt; from &lt;code&gt;engines.node&lt;/code&gt;, &lt;a href="https://nodeweekly.com/link/190200/rss" style=" color: #20824B;   "&gt;generates declarations faster&lt;/a&gt; with TypeScript 7, and (experimentally) &lt;a href="https://nodeweekly.com/link/190201/rss" style=" color: #20824B;   "&gt;build Node SEA executables&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Chenwei Dai, Elecmonkey, et al. &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190202/rss" title="vgpu.sh" style=" color: #20824B;   "&gt;vgpu: Render WebGPU Shaders in the Browser or Node.js&lt;/a&gt;&lt;/span&gt; — Provides a way to use the same shader in the browser or render headlessly with Node (to a high-resolution PNG or MP4 video). WGSL modules import and export like TypeScript does.&lt;/p&gt;
  &lt;p&gt;Vercel &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190203/rss" title="mikro-orm.io" style=" color: #20824B;   "&gt;MikroORM 7.2: Row Level Security, a WASM SQLite Driver, and More&lt;/a&gt;&lt;/span&gt; — A TypeScript ORM for SQL databases and MongoDB. 7.2 adds native Postgres row level security, with policies as entity metadata, plus &lt;code&gt;through&lt;/code&gt; relations and a WASM sql.js driver (yes, &lt;a href="https://nodeweekly.com/link/190204/rss" style=" color: #20824B;   "&gt;you can now use MikroORM in the browser!&lt;/a&gt;)&lt;/p&gt;
  &lt;p&gt;Martin Adámek &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190205/rss" title="www.caoccao.com" style=" color: #20824B;   "&gt;Javet 6.0: A Way to Embed Node.js and V8 in Java&lt;/a&gt;&lt;/span&gt; — A Java library that embeds a real Node.js runtime (now v26) in the JVM. Java code can load npm packages, call into running Node code, and run multiple Node instances side by side. &lt;a href="https://nodeweekly.com/link/190206/rss" style=" color: #20824B;   "&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Sam Cao &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 500 !important; font-size: 18px !important; color: #000;"&gt;&lt;a href="https://nodeweekly.com/link/190207/rss" title="github.com" style=" color: #20824B;   "&gt;eslint-plugin-regexp 3.3: ESLint Plugin for Finding Regex Mistakes&lt;/a&gt;&lt;/span&gt; — There’s a &lt;a href="https://nodeweekly.com/link/190208/rss" style=" color: #20824B;   "&gt;neat online demo&lt;/a&gt; to show off the things it can catch.&lt;/p&gt;
  &lt;p&gt;Yosuke Ota &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190228/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;parse-xml 5.0&lt;/a&gt; – The fast, compliant XML parser &lt;a href="https://nodeweekly.com/link/190209/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;goes ESM-only&lt;/a&gt;. The API is unchanged and &lt;code&gt;require()&lt;/code&gt; still works on Node 22+.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190210/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;dhcp.js 1.0&lt;/a&gt; – DHCPv4 client, server, and tools for Node. We covered the &lt;a href="https://nodeweekly.com/link/190211/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;explainer blog post&lt;/a&gt; about this project nine years ago!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190212/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;pnpm 12.4&lt;/a&gt; – The fast drop-in &lt;code&gt;npm&lt;/code&gt; replacement can now manage npm, Python, and Cargo dependencies in the same workspace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✉️ &lt;a href="https://nodeweekly.com/link/190213/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Nodemailer 10.0&lt;/a&gt; – The popular e-mail sending library has migrated to TypeScript with ESM and CJS builds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⚠️ &lt;a href="https://nodeweekly.com/link/190214/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Fastify 5.12.2&lt;/a&gt; – Includes fixes for four high-severity issues, including validation and auth bypasses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190215/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;tinybench 6.2&lt;/a&gt; – Simple, tiny and lightweight benchmarking library with precise timing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🌐 &lt;a href="https://nodeweekly.com/link/190216/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;supercluster 9.1&lt;/a&gt; – Mapbox's fast geospatial point clustering library.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px;"&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📰 Classifieds&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;🎯 Catch promo abuse at signup. &lt;a href="https://nodeweekly.com/link/190217/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Fingerprint’s visitor ID&lt;/a&gt; persists for months, not days, so abusers can’t hide. &lt;a href="https://nodeweekly.com/link/190217/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Try it for free&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;Your API is fast until it hits analytics. &lt;a href="https://nodeweekly.com/link/190218/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;TimescaleDB&lt;/a&gt; extends Postgres so those queries return in ms at scale. &lt;a href="https://nodeweekly.com/link/190218/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Get $1000 credit&lt;/a&gt;.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;📢  Elsewhere in the ecosystem&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/190219/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;React 19.3 is out&lt;/a&gt; with stable view transitions and fragment refs, &lt;a href="https://nodeweekly.com/link/190220/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Trusted Types&lt;/a&gt; support, and a &lt;code&gt;browser()&lt;/code&gt; API used via &lt;code&gt;use(browser())&lt;/code&gt; to let components skip server-side rendering when they need browser-only APIs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📺 Microsoft released &lt;a href="https://nodeweekly.com/link/190221/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a movie-length documentary about VS Code&lt;/a&gt;, directed by Stefan Kingham. It covers the editor's technical roots, touching on Node's arrival on Windows and its evolution through node-webkit (now &lt;a href="https://nodeweekly.com/link/190222/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;NW.js&lt;/a&gt;) and Electron.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The team behind Tailwind CSS &lt;a href="https://nodeweekly.com/link/190223/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;is joining Shopify&lt;/a&gt;, though they say &lt;em&gt;"nothing changes with Tailwind CSS or any of our other open-source projects."&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 Two men have been &lt;a href="https://nodeweekly.com/link/190224/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;arrested over the TeamPCP npm supply chain attacks&lt;/a&gt;. TeamPCP is suspected of cloning the Shai-Hulud worm, resulting in the so-called &lt;a href="https://nodeweekly.com/link/190225/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;'Mini Shai-Hulud'&lt;/a&gt; waves.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📺 &lt;a href="https://nodeweekly.com/link/190226/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;How can someone actually &lt;em&gt;change&lt;/em&gt; JavaScript?&lt;/a&gt; A two-minute explainer of the basics from TC39 delegate Mikhail Barash.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;


&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://nodeweekly.com/open/640/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nodeweekly.com/issues/640</guid>
    </item>
  </channel>
</rss>
