
React 19.3, Bun 1.4 and Node.js: what the August and September releases bring
Releases from August 4 to October 4, 2026: React 19.3, Bun 1.4.2, Node.js 26.10 and 24.21 LTS. New APIs, fixes and a method for checking upgrades.
What shipped during this period
This review covers August 4 to October 4, 2026. The table lists selected releases that explain the changes discussed below; the full changelogs are available in the official sources. Dates come from the release notes. For Node.js 24.21.0, that means September 8, although its blog card is dated September 9.
| Release | Date, 2026 | Change for developers |
|---|---|---|
| Bun 1.4 | August 20 | First release of Bun rewritten in Rust; a larger standard library. [2] |
| Bun 1.4.1 | September 4 | HTTP/2 in Bun.serve and streaming Response bodies to disk. [3] |
| Bun 1.4.2 | September 5 | Fixes for Elysia build regressions and memory retention in AsyncLocalStorage. [4] |
| Node.js 24.21.0 · LTS | September 8 | OpenSSL and Undici updates; changes to histograms and net.BlockList. [5] |
| React 19.3 | September 9 | Stable View Transitions and Fragment Refs; the browser() API. [1] |
| Node.js 26.9.0 · Current | September 16 | Web Workers, VFS integration with module loading, and node:bench. [6] |
| Node.js 26.10.0 · Current | September 22 | crypto.parsePKCS12(), openAsBlobSync and SlidingWindowHistogram. [7] |
| Node.js 22.23.3 · LTS | September 23 | Updates to root certificates, npm, Corepack and ICU. [8] |
React 19.3 adds tools for transitions and DOM access
React released 19.3 on September 9. <ViewTransition> moved from an experimental API to a stable one: the component coordinates animations as elements enter, exit or move, using the browser's View Transition API. The update must be marked as a Transition, for example through startTransition. This provides a specific tool for switching screens or revealing Suspense content. [1]
Fragment Refs let a component pass a ref to <Fragment> and work with a group of DOM nodes: managing focus, events or visibility observation. This can remove a wrapper previously added solely to hold a ref. use(browser()) from react-dom suspends a component's rendering on the server; the initial HTML shows the nearest Suspense fallback. [1]
For our static-first approach, this means choosing individual interactive areas. The main text, navigation and page content should remain in the initial HTML. A widget that reads local browser data can be evaluated separately; browser() moves its content to the client. After upgrading, check the page with JavaScript disabled, hydration and keyboard navigation.
A stable React API still requires checking its integration with the framework. If a site already has its own transition component, enable the new mechanism in one scenario first: overlapping animations, Back navigation and reduced-motion settings are easier to inspect in a small example.
Bun's 1.4 release and the patch a day after 1.4.1 both deserve attention
Bun 1.4 shipped on August 20 as the first release of Bun written in Rust. The announcement also collects capabilities added since 1.3.0; the label next to each API identifies the version that introduced it. For example, Bun.Image appearing in this broader overview does not, by itself, mean the API debuted in 1.4. [2]
The Bun team reports 1,517 additional tests from the Node.js suite passing in the new version. That is a useful indicator of compatibility work. For our API, dependencies, native modules and request behavior remain separate migration requirements; the overall test count does not establish those. Rewriting the runtime in Rust also does not, by itself, demonstrate a measured speedup for an application. [2]
Version 1.4.1 added HTTP/2 to Bun.serve and streaming a Response to disk through Bun.write. For a service that downloads large files, the latter gives a specific reason to check peak memory during concurrent downloads. HTTP/2 has limitations: the release notes say WebSockets and response trailers are not yet supported over it. [3]
Version 1.4.2 followed on September 5. The patch fixed a variable-name collision in bun build that broke Elysia, and an AsyncLocalStorage regression introduced in 1.4.1. A timer or promise created inside exit() or a nested run() could retain the outer store in memory. getStore() returned the correct value, so an ordinary request-ID check could pass while memory remained occupied. [4]
This case informs our recommendation: use 1.4.2 for a pilot of the 1.4 line and include a long-running process scenario. A single successful request is insufficient here. Observe memory after a series of requests with a large context, nested run() calls and background timers; this is a proposed check, and we do not report our own results from such a test in this article.
PAS7 diagram of an SSG site with a separate API: React renders HTML during the build, the browser receives static files, and a separate Bun or Node.js process handles API requests. Check upgrades to the build environment and API separately.
Section bun-patches screenshotNode.js: new APIs in Current, dependency updates in LTS
Several Node.js lines received updates during this period. Version 26.9.0 added Web Workers, virtual filesystem integration with CJS/ESM loaders, and node:bench. The changelog lists an --experimental-bench flag for bench; check the documentation for your version to confirm an individual API's status. Version 26.10.0 expanded support for cryptography, files and histograms. Both releases have Current status. [6][7]
For a production API, we would start with a supported LTS line. Node.js 24.21.0 updated OpenSSL to 3.5.8 and Undici to 7.29.1, while 22.23.3 brought certificate and tooling updates. The official Node.js policy recommends Active LTS or Maintenance LTS for production. New 26.x capabilities can be evaluated in a separate pilot when a specific task needs them. [5][8][9]
For a static site, the build runtime and the hosting runtime need separate consideration. When the output consists of HTML, CSS and JavaScript files, a visitor does not run the Node.js build server. Updating Node.js in CI affects package installation and export; moving a separate API to Bun changes server behavior. Keeping these tasks in separate changes makes the cause of a regression easier to identify.
One route for checking an upgrade
This is a PAS7 comparison template, not a report of a completed benchmark. Choose a page or API route that uses the changed mechanism. Record the exact versions, operating system, commit and load parameters; change one dependency or runtime at a time. Fill in numerical results after your own run.
| Scenario | What to record before upgrading | What to check in the new version |
|---|---|---|
| Static page / SSR | Initial HTML content; console output during hydration | Text and links remain available; the browser-only widget has an understandable fallback |
| React transition | Focus, Back navigation and reduced motion in one scenario | Focus behaves correctly; existing and new animations do not conflict |
| Bun API with AsyncLocalStorage | Request-ID isolation and RSS after a series of requests and an idle period | Contexts remain isolated; retention of large stores by background tasks has been investigated |
| Writing a large file | Output size / hash; peak RSS at the same concurrency | Bytes match; backpressure and memory have been measured in the target version |
| CI build | Clean installation with a fixed lockfile; duration and exported route list | The same routes are exported; the build passes in the deployment environment |
What to check next
For performance comparisons, use the same warm-up procedure and repeated runs. Evaluate p95 and errors alongside memory, and decide the acceptable regression in advance. The duration of bun install, static build time and HTTP request latency describe different tasks; each needs its own result record.
For a team with a React frontend and a Node.js API, the next step can be small: check one transition on React 19.3, update LTS in CI separately, and compare Bun 1.4.2 with the existing runtime on one route. A decision about a broader migration should follow from that comparison. The next signals to watch are your framework's support for the React APIs you need and runtime patches affecting your particular dependencies.
Official sources
Related Articles

How to Add Mau Saver to a Telegram Group and Save Media in Chat
A practical guide to adding Mau Saver to a Telegram group and downloading videos, audio, and posts directly in the chat.

How to Advertise to an International Telegram Media Audience
A practical guide for advertisers: reach an international Telegram audience through Mau Saver Bot, group placements, pinned posts, and native media integrations.

AI Assistant Development Cost in 2026: RAG Chatbots, CRM Integrations, Guardrails, and Support
A practical buyer guide to AI assistant development cost in 2026: prototypes, RAG chatbots, knowledge-base assistants, CRM and website integrations, guardrails, evaluations, monitoring, and support.

AI Can Make More. Not Better: What Game Development Research Actually Says
Generative AI is entering game production, but the evidence is more nuanced than the hype. We examine developer adoption, player reception, quality risks, and a practical production model for using AI without outsourcing taste.