<?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>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>
    <item>
      <title>Node 26.8 reads and writes ZIP files</title>
      <link>https://nodeweekly.com/issues/638</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;#​638 — August 27, 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/189512/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! If you missed us last week, we took a brief summer vacation :-)&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/189477/rss" style=" color: #20824B;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/jndmfwg6izjwgqc7sfs9.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/189477/rss" title="nodejs.org" style=" color: #20824B;   "&gt;A Recap of Node.js Interactive 2026&lt;/a&gt;&lt;/span&gt; — &lt;em&gt;Node.js Interactive&lt;/em&gt; returned for the first time since 2019 as part of this month's &lt;em&gt;RenderATL&lt;/em&gt; event with Node contributors and invited speakers tackling Node's near-term roadmap in areas like AI, supply chain security, WinterCG becoming Ecma TC55, work on QUIC and HTTP/3 support, and Node's move to one major release a year.&lt;/p&gt;
  &lt;p&gt;Aviv Keller &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/189476/rss" style=" color: #20824B;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/4509c04e.png" width="130" height="130" 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/189476/rss" title="agentfield.ai" style=" color: #20824B;   "&gt;Open Source Just Out-Reviewed the Commercial Tools&lt;/a&gt;&lt;/span&gt; — PR-AF places #2 of 42 on Martian's Code-Review-Bench, ahead of CodeRabbit, Copilot, and Devin, at ~10x lower cost per review. It plans the review per PR, runs reviewer agents in parallel, and verifies every finding against your source. Self-hosted.&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/189478/rss" title="nodejs.org" style=" color: #20824B;   "&gt;Node.js 26.8.0 (Current) Released&lt;/a&gt;&lt;/span&gt; — Among a variety of additions, Node can &lt;a href="https://nodeweekly.com/link/189479/rss" style=" color: #20824B;   "&gt;read and write ZIP archives&lt;/a&gt; without a third-party dependency. Plus &lt;strong&gt;Node's REPL now has &lt;a href="https://nodeweekly.com/link/189480/rss" style=" color: #20824B;   "&gt;basic syntax highlighting&lt;/a&gt; support.&lt;/strong&gt; &lt;a href="https://nodeweekly.com/link/189481/rss" style=" color: #20824B;   "&gt;v26.8.1&lt;/a&gt; landed hours later to fix a broken version string.&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/189482/rss" style=" color: #20824B; font-weight: 600;"&gt;Node 24.20.0 (LTS)&lt;/a&gt; also landed with several backported features including package maps, permission auditing, &lt;code&gt;node:stream/iter&lt;/code&gt;, and &lt;a href="https://nodeweekly.com/link/189483/rss" style=" color: #20824B; font-weight: 600;"&gt;WebAssembly JSPI&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;&lt;strong&gt;IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;🤚 The &lt;a href="https://nodeweekly.com/link/189484/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;latest annual Node.js user survey&lt;/a&gt; has just launched. As always, your responses help shape the future priorities of the Node.js team.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💡 Aviv Keller has proposed &lt;a href="https://nodeweekly.com/link/189485/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;reimplementing &lt;code&gt;fs.glob&lt;/code&gt; natively in C++&lt;/a&gt;, calling straight into libuv and benching at over twice the speed of the current version. Not landed yet, but there are some &lt;em&gt;big&lt;/em&gt; names on this thread.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;James Snell is &lt;a href="https://nodeweekly.com/link/189486/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;seeking early feedback&lt;/a&gt; on a proposed Fetch Server API, part of Node's unified HTTP API initiative, offering one handler model for HTTP/1.1, 2 and 3.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189487/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;TermDOM&lt;/a&gt;, featured in our &lt;a href="https://nodeweekly.com/link/189513/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;last issue&lt;/a&gt;, lets you build TUI apps with HTML and CSS in Node, and &lt;a href="https://nodeweekly.com/link/189488/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;now&lt;/a&gt; supports CSS Grid for layout.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AWS Lambda has introduced &lt;a href="https://nodeweekly.com/link/189489/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;a new Node.js 26 runtime in preview&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;span&gt;🤖&lt;/span&gt; &lt;a href="https://nodeweekly.com/link/189490/rss" title="github.com" style=" color: #20824B;   "&gt;Node's Official AI Use Policy and Guidelines&lt;/a&gt;&lt;/span&gt; — Merged into Node's contributing docs after months of debate, PRs with AI code you haven't understood or tested can be closed unreviewed, bot-opened PRs need pre-approval, and more to be aware of. Plus, don't use AI to claim &lt;em&gt;"good first issue"&lt;/em&gt; tasks!&lt;/p&gt;
  &lt;p&gt;Node.js 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;a href="https://nodeweekly.com/link/189491/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;Query Pipelining in node-postgres: 2-3x More Throughput&lt;/a&gt; – More throughput and lower latency from one config change is always worth looking into. &lt;cite&gt;Matteo Collina&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://nodeweekly.com/link/189492/rss" style=" color: #20824B; font-weight: 500 !important;"&gt;ESM vs CommonJS: What &lt;code&gt;import&lt;/code&gt; and &lt;code&gt;require&lt;/code&gt; Actually Do&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; 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/189493/rss" title="pnpm.io" style=" color: #20824B;   "&gt;pnpm 12: Rewritten in Rust, Same Commands and Lockfile&lt;/a&gt;&lt;/span&gt; — The Rust rewrite is stable, but all of v11's commands, flags and lockfile format carry over with only a &lt;a href="https://nodeweekly.com/link/189494/rss" style=" color: #20824B;   "&gt;handful of changes&lt;/a&gt;. A global &lt;code&gt;node&lt;/code&gt; now follows the version your project pins, too. Note that npm's &lt;code&gt;latest&lt;/code&gt; tag still points to pnpm 11, so you'll need &lt;code&gt;pnpm self-update next-12&lt;/code&gt; to upgrade.&lt;/p&gt;
  &lt;p&gt;Zoltan Kochan &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/189495/rss" title="better-auth.com" style=" color: #20824B;   "&gt;Better Auth 1.7 Ships a Standards-Based OAuth Server&lt;/a&gt;&lt;/span&gt; — A big OAuth provider release with DPoP, per-API token rules and device code flow, plus MCP auth in its own package. Breaking changes make the upgrade guide required reading.&lt;/p&gt;
  &lt;p&gt;Gustavo Valverde &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/189496/rss" title="" style=" color: #20824B;   "&gt;Outgrowing Cron? Meet xyOps for Self-Hosted Ops Automation&lt;/a&gt;&lt;/span&gt; — Schedule jobs, run Node scripts, monitor servers, and automate response. Open source, from the Cronicle team.&lt;/p&gt;
  &lt;p&gt;xyOps &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/189497/rss" title="gtkx.dev" style=" color: #20824B;   "&gt;GTKX: Build Linux Desktop Apps with Node, GTK and React&lt;/a&gt;&lt;/span&gt; — Build Linux desktop apps with real GTK4 and Adwaita widgets with no webview involved. Write JSX and get real widgets in an ordinary Node process with npm package and Fast Refresh support.&lt;/p&gt;
  &lt;p&gt;Eugenio Depalo &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/189498/rss" title="stryker-mutator.io" style=" color: #20824B;   "&gt;Stryker Mutator 10.0: Test Your Tests with Mutation Testing&lt;/a&gt;&lt;/span&gt; — Stryker deliberately &lt;a href="https://nodeweekly.com/link/189499/rss" style=" color: #20824B;   "&gt;changes&lt;/a&gt; your code to see if your test suite catches the mutations. If not, your tests are too lax and need work. Here's &lt;a href="https://nodeweekly.com/link/189500/rss" style=" color: #20824B;   "&gt;how to get started&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Jansen, de Lang, 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/189501/rss" title="svgo.dev" style=" color: #20824B;   "&gt;SVGO 4.1: Node-Powered SVG Optimizer&lt;/a&gt;&lt;/span&gt; — SVGs often contain redundant information. You can use SVGO as a CLI tool or Node library to slim them down. &lt;a href="https://nodeweekly.com/link/189502/rss" style=" color: #20824B;   "&gt;v4.1&lt;/a&gt; has stricter XML validation and security improvements.&lt;/p&gt;
  &lt;p&gt;Kir Belevich &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/189503/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Electron 44&lt;/a&gt; – 32-bit builds are gone, macOS 13+ is now required, &lt;code&gt;clipboard&lt;/code&gt; is aligned with the W3C Clipboard API, &lt;code&gt;net.WebSocket&lt;/code&gt; is added, plus the ability to set window opacity on Linux.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189504/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;lz4-napi 2.10.0&lt;/a&gt; – N-API bindings for LZ4 compression/decompression, implemented in Rust and backed by &lt;a href="https://nodeweekly.com/link/189505/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;lz4_flex&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤖 &lt;a href="https://nodeweekly.com/link/189506/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;grammY 1.46.0&lt;/a&gt; – The framework for building Telegram bots from Node now supports the latest &lt;a href="https://nodeweekly.com/link/189507/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Telegram Bot API 10.3&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189508/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;Axios 1.20.0&lt;/a&gt; – The long-standing HTTP client for the browser and Node.js.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189509/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;node-mongodb-native 7.6&lt;/a&gt; – MongoDB 4.2 support has been dropped entirely.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📺 &lt;a href="https://nodeweekly.com/link/189510/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;YouTube.js 18.0&lt;/a&gt; – JavaScript client for YouTube's internal API.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nodeweekly.com/link/189514/rss" style=" color: #20824B; font-weight: 500 !important;   "&gt;node-x11 4.1&lt;/a&gt; – Feature-rich X11 protocol client 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;"&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/638/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://nodeweekly.com/issues/638</guid>
    </item>
  </channel>
</rss>
