<?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>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>
    <item>
      <title>Bun now passes 80.5% of Node's test suite</title>
      <link>https://nodeweekly.com/issues/639</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;#​639 — September 3, 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/189847/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/189810/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/qgfr3ewk2uld85sd6ry6.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/189810/rss" title="trilon.io" style=" color: #20824B;   "&gt;NestJS 12 Released with ESM-First Packages, Rspack and Vitest&lt;/a&gt;&lt;/span&gt; — The progressive framework gets its biggest release in years, going ESM-first (CJS is still an option), replacing webpack with Rspack, adding &lt;a href="https://nodeweekly.com/link/189811/rss" style=" color: #20824B;   "&gt;Standard Schema&lt;/a&gt; support for easy interop with Zod, Valibot and friends, plus structured logging, &lt;a href="https://nodeweekly.com/link/189812/rss" style=" color: #20824B;   "&gt;a brand new homepage&lt;/a&gt;, and more.&lt;/p&gt;
  &lt;p&gt;Kamil Mysliwiec &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/189809/rss" style=" color: #20824B;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/e81c4a7d.png" width="120" height="120" 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/189809/rss" title="www.tigerdata.com" style=" color: #20824B;   "&gt;One Slow Query Starves Your Whole Connection Pool&lt;/a&gt;&lt;/span&gt; — A heavy analytics query holds a connection while everything else waits. TimescaleDB extends Postgres so those queries return fast, freeing the pool. Hypertables, compression, continuous aggregates. One database, not two. &lt;a href="https://nodeweekly.com/link/189809/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/189813/rss" title="bun.com" style=" color: #20824B;   "&gt;Bun 1.4 Now Passes 80% of Node's Test Suite&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://nodeweekly.com/link/189814/rss" style=" color: #20824B;   "&gt;Bun 1.4&lt;/a&gt;'s headline feature is a &lt;a href="https://nodeweekly.com/link/189815/rss" style=" color: #20824B;   "&gt;big jump in Node.js compatibility&lt;/a&gt; as part of its goal of being a &lt;em&gt;"drop-in replacement"&lt;/em&gt;. This page lets you see the project's progress and where Bun is strong and weak.&lt;/p&gt;
  &lt;p&gt;Bun Project &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;Matteo Collina has landed &lt;a href="https://nodeweekly.com/link/189816/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;&lt;code&gt;node:ffi&lt;/code&gt; enabled by default&lt;/a&gt;, so calling into a native C library will no longer need &lt;code&gt;--experimental-ffi&lt;/code&gt;, an addon, or &lt;code&gt;node-gyp&lt;/code&gt;. It remains experimental, warns on first load, and hasn't shipped in a release yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Matteo has also added support for &lt;em&gt;Single Executable Applications&lt;/em&gt; to &lt;a href="https://nodeweekly.com/link/189817/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;mount their bundled assets as a read-only virtual file system&lt;/a&gt; by setting &lt;code&gt;"useVfs": true&lt;/code&gt; in the config.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 Express has patched &lt;a href="https://nodeweekly.com/link/189818/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;six vulnerabilities across &lt;code&gt;hbs&lt;/code&gt;, &lt;code&gt;multer&lt;/code&gt; and &lt;code&gt;morgan&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Node's issue tracker reaches issue &lt;code&gt;2**16&lt;/code&gt; with &lt;a href="https://nodeweekly.com/link/189819/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a proposal to remove dual ESM/CJS code samples in the API docs&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/189820/rss" title="www.checklyhq.com" style=" color: #20824B;   "&gt;Rewriting a Node.js Service in Go with AI Agents&lt;/a&gt;&lt;/span&gt; — A very 2026 tale of an overnight porting run, with a focus on doing agentic engineering well. Good takeaways on building a test harness &lt;em&gt;first&lt;/em&gt; and the rollout experience.&lt;/p&gt;
  &lt;p&gt;Edvinas Janusevicius (Checkly) &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/189823/rss" title="blog.sentry.io" style=" color: #20824B;   "&gt;Your Trace Shows the Slow Span. Not the Exception&lt;/a&gt;&lt;/span&gt; — OTLP carries traces and logs, not errors. Sentry's OtlpIntegration connects both in one trace waterfall. &lt;a href="https://nodeweekly.com/link/189823/rss" style=" color: #20824B;   "&gt;Learn more about Sentry’s OTLP&lt;/a&gt;.&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/189824/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Detecting SQLite Full Table Scans in Node.js&lt;/a&gt; – Did you know SQLite counts the rows scanned by statements and you can read it after the query runs? &lt;cite&gt;CodeSilva&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/189825/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Workers vs Processes in Node&lt;/a&gt; &lt;cite&gt;Ishtmeet Singh&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/189826/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/deovjytt53exk0rla8fs.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/189826/rss" title="drydock.org" style=" color: #20824B;   "&gt;Drydock: Diff Your &lt;code&gt;npm&lt;/code&gt; Tarballs Before You Publish&lt;/a&gt;&lt;/span&gt; — From a Preact core team member comes a tool to diff built npm tarballs against the last published version, flagging install scripts, network access and new binaries. It can then gate your &lt;em&gt;Actions&lt;/em&gt; publish job or watch npm's new staged publishing flow.&lt;/p&gt;
  &lt;p&gt;Jovi De Croock &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;💡 You can get a quick taste without installing anything: &lt;a href="https://nodeweekly.com/link/189827/rss" style=" color: #20824B; font-weight: 600;"&gt;this web-based diff viewer&lt;/a&gt; can compare two versions of an npm package file by file.&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/189828/rss" title="srvx.h3.dev" style=" color: #20824B;   "&gt;srvx 1.0: One &lt;code&gt;fetch&lt;/code&gt; Handler for Node, Deno and Bun&lt;/a&gt;&lt;/span&gt; — You can export a handler that takes a web-standard &lt;code&gt;Request&lt;/code&gt; and returns a &lt;code&gt;Response&lt;/code&gt;, then run it unchanged on Node, Deno or Bun. Includes a CLI with watcher and static serving, and &lt;code&gt;srvx fetch&lt;/code&gt; can hit your handler without starting a server.&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;a href="https://nodeweekly.com/link/189829/rss" title="docs.nvm-windows.com" style=" color: #20824B;   "&gt;NVM for Windows 2.0: Node Version Manager for Windows&lt;/a&gt;&lt;/span&gt; — A modern Node workflow for Windows users with version pinning, native integrations, auto-install of missing versions, and more. v2 is a rewrite that introduces a lighter shim-based mechanism and &lt;em&gt;no longer needs admin privileges&lt;/em&gt;. &lt;a href="https://nodeweekly.com/link/189830/rss" style=" color: #20824B;   "&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Author Software Inc &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/189831/rss" title="github.com" style=" color: #20824B;   "&gt;Got 16.0: Built-In HTTP/2 and QUERY Method Support&lt;/a&gt;&lt;/span&gt; — The popular Node HTTP client now has a built-in HTTP/2 client, its own DNS cache, fewer dependencies, and support for the newly standardized &lt;a href="https://nodeweekly.com/link/189832/rss" style=" color: #20824B;   "&gt;&lt;code&gt;QUERY&lt;/code&gt; HTTP method&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Sindre Sorhus &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/189833/rss" title="github.com" style=" color: #20824B;   "&gt;SimpleWebAuthn 14.0: Now with Post-Quantum Passkeys&lt;/a&gt;&lt;/span&gt; — The passkeys library now verifies post-quantum ML-DSA passkeys and, on Node 24.7 and up, prefers ML-DSA-44 at registration by default.&lt;/p&gt;
  &lt;p&gt;Matthew Miller &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/189834/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Restify 12.0&lt;/a&gt; – The REST API framework returns after a two and a half year gap with Node 26 support and &lt;code&gt;url.parse()&lt;/code&gt; replaced with WHATWG URL. Existing users have &lt;a href="https://nodeweekly.com/link/189835/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a few breaking changes&lt;/a&gt; to note.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189836/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Zod 4.5&lt;/a&gt; – A big performance release for the popular TypeScript-first schema validation library.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189837/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;np 12.1&lt;/a&gt; – Sindre Sorhus's improved &lt;code&gt;npm publish&lt;/code&gt; workflow gets some speedups.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189838/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;express-rate-limit 8.7&lt;/a&gt; – Rate-limiting middleware for Express.&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/189839/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/189839/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Try it free&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;📉 Headout cut chargebacks 90% with Fingerprint. &lt;a href="https://nodeweekly.com/link/189840/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Stop payment fraud&lt;/a&gt; with 100+ signals such as Browser Bot and VPN detection.&lt;/p&gt;
 
&lt;p&gt;🎟️ Join us at &lt;a href="https://nodeweekly.com/link/189848/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Supabase&lt;/a&gt; Select on Oct 2. Learn from the industry’s best builders and meet people building dev tools. &lt;a href="https://nodeweekly.com/link/189848/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;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;/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/189842/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/fcozfyfgnkfzsddwssvn.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/189842/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;htmx 4.0 has landed&lt;/a&gt;, the first major release in two years, with &lt;a href="https://nodeweekly.com/link/189843/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;lots of changes&lt;/a&gt;. It remains a neat way to add interactivity to server-rendered pages without reaching for a frontend framework.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤔 Upon finding eight versions of &lt;code&gt;glob&lt;/code&gt; across five major version lines in his employer's monorepo, James Healy is &lt;a href="https://nodeweekly.com/link/189844/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;imploring library maintainers&lt;/a&gt; to bump their major versions as rarely as they can.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A developer shares the techniques behind squeezing an implementation of Minesweeper &lt;a href="https://nodeweekly.com/link/189845/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;into just 247 bytes of JavaScript&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤚 The &lt;a href="https://nodeweekly.com/link/189846/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;2026 Node.js user survey&lt;/a&gt; is still open. Your responses guide the core team and its priorities.&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/639/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 3 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nodeweekly.com/issues/639</guid>
    </item>
  </channel>
</rss>
