Bun 1.4 shipped on 20 August 2026: 5 breaking changes before you upgrade

Bun 1.4 is the first Rust build. Five breaking changes, a 99-day release gap and 20 issues filed on release day.

Read time
13 min
Word count
1.8K
Sections
11
FAQs
8
Share
Bun 1.4 breaking changes summary card for the 20 August 2026 Rust rewrite release
Bun v1.4.0 shipped 20 August 2026, the first Bun release written in Rust.
On this page · 11 sections
  1. What actually changed on 20 August
  2. The five breaking changes
  3. What the release post does not say
  4. Day one in the issue tracker
  5. The argument about where the gains came from
  6. What to do this week
  7. India-specific considerations
  8. What is still unknown
  9. FAQ
  10. How eCorpIT can help
  11. References

Summary. Bun v1.4.0 was published to npm at 14:14 UTC on 20 August 2026 and tagged on GitHub at 14:07 UTC the same day. It is the first release of Bun written in Rust rather than Zig, and it arrived 99 days after v1.3.14 on 13 May 2026, the longest gap between stable Bun releases since the project started. The release post claims 2,900 issues fixed, 1,517 newly passing Node.js tests, idle CPU down 5x and memory down "up to 35%". It also changes five defaults that will break running code. Within 90 minutes of the tag, users filed a regression against the WebSocket shim; by the end of the day 20 issues were open against the release. Vercel, which added Bun 1.4 support to Vercel Functions on the same date, made the upgrade opt-in and told teams to read the breaking changes first. Jarred Sumner, creator of Bun, has disclosed that the port was produced by roughly 64 Claude agents over 11 days at a pre-merge cost of about $165,000 in API tokens, and that it introduced 19 known regressions.

If you run Bun in production, the version number is the least interesting thing in this release. The interesting part is the gap between what the release post leads with and what its own tables, its companion post and its issue tracker say.

What actually changed on 20 August

Bun v1.3.14, published 13 May 2026, was the last version written in Zig. The Rust port was merged to main on 14 May 2026 and then sat unreleased for three months. The Bun 1.4 announcement is the first stable build of that port.

The engineering claims in the post are specific and mostly benchmark-backed. Peak memory under load, measured at 1,000,000 requests with 64 connections, drops across every server the team tested.

HTTP server Peak memory, Bun 1.4 Peak memory, Bun 1.3
fastify 120 MB 233 MB
Express 92 MB 169 MB
node:http 81 MB 135 MB
Elysia 55 MB 91 MB
Next.js 285 MB 397 MB
Bun.serve 36 MB 45 MB
Vite dev server 233 MB 268 MB

Startup improves too: 5.1 ms on Linux against 10.9 ms for Bun 1.3 and 27.2 ms for Node, and 15.5 ms on Windows against 39.0 ms and 40.1 ms. The minimum glibc requirement drops from 2.26 to 2.17, so Bun now runs on RHEL 7, CentOS 7 and Amazon Linux 1 without a separate build, and the documented minimum Linux kernel is now 3.10. FreeBSD 14.3+ gets official x86_64 and aarch64 binaries. Windows on ARM64 builds natively.

None of that is what will page your on-call engineer.

The five breaking changes

Bun's own upgrade section names five changes as the most likely to need work. Each maps to a concrete failure mode.

Change What breaks What to do
Bun now reports Node.js 26, process.versions.modules is 147 Prebuilt native addons selected by NODE_MODULE_VERSION have no build for 147; res.writeHeader() is gone Rebuild native modules for ABI 147; replace res.writeHeader() with res.writeHead()
New monorepos default to the isolated linker, bun.lock records configVersion: 1 Hoisting assumptions in existing tooling stop holding for newly created workspaces Pin linker = "hoisted" in bunfig.toml if your build depends on hoisted layout
Bun invoked as node does not load .env files bun --bun, bunx --bun and node symlinks silently lose environment config Pass --env-file explicitly in every affected script
Bun.YAML follows YAML 1.2 yes/no/on/off parse as strings, so on: in a GitHub Actions workflow becomes the string "on" Quote booleans, or read workflow keys by string
Bun.TOML and bunfig.toml are strict Unquoted strings, missing newlines between pairs and integers past Number.MAX_SAFE_INTEGER now raise SyntaxError Validate config files before deploying 1.4

Beyond those five, the release removes the separate -march=haswell x64 build, removes the bun feedback command, makes fs.rmdir({ recursive: true }) throw ERR_INVALID_ARG_VALUE, silently ignores Bun.serve({ inspector }), and changes .xml imports to return a parsed document instead of a file path. Temporal and Date.prototype.toTemporalInstant are now defined by default, which is welcome if you have been tracking the Node.js 26 Temporal migration, and disruptive if you shipped a polyfill that assumed they were absent.

The change most likely to bite quietly is the third one. An environment file that stops loading does not throw. It produces a service that starts, connects to the wrong database, and looks healthy.

What the release post does not say

The 20 August release post has no known-regressions section. The words "regression", "not yet supported" and "parity" do not appear in it, and "Zig" appears exactly once, in the headline sentence.

The companion post published on 8 July, Rewriting Bun in Rust, is more candid. Jarred Sumner, creator of Bun, writes there: "The focus of the Rust rewrite is stability, but it would be impossible to ship a massive change like this and introduce zero regressions. This rewrite introduced 19 known regressions, each of which has been fixed." The same post discloses that Bun was acquired by Anthropic in December 2025, that the port took 11 days across 6,778 commits, that about 64 Claude agents ran at peak, that the merged diff was +1,009,272 lines, and that the pre-merge token spend was "around $165,000 at API pricing". It also reports that about 4% of Bun's Rust code sits inside unsafe blocks, roughly 13,000 unsafe keywords across some 27,000 lines.

That candour is in the July post. It is not in the August one, which is the post most teams will read before upgrading.

The headline numbers understate the body numbers in one direction and overstate them in another.

Headline claim Figure in the body Gap
"reduces memory usage by up to 35%" "13% - 48% memory usage reduction", fastify at 48% Headline is lower than the measured best case
"reduces idle CPU usage by 5x" Claude Code in production: p99 24% to 10%, p50 5.8% to 2.5% The 5x figure is a hello-world app, not a real workload
"starts 50% faster on Linux" "On Windows, Bun starts 2.5x faster" The larger platform win is left out of the headline
"over 2,900 issues" fixed A Bun post on 29 July said "over 3000 issues" Two public counts, three weeks apart
bun.lock is "lockfileVersion: 2" Override-using lockfiles are "lockfileVersion: 3" and unreadable by older Bun Two lockfile versions in one release

Day one in the issue tracker

Twenty issues were opened against oven-sh/bun on 20 August 2026. Several are explicitly labelled as regressions from 1.3.14.

Issue Symptom Where it hits
#39766 ws shim handleUpgrade() throws out of abortHandshake after a macrotask; the client connection never opens and nothing is logged WebSocket servers using the Node ws shim
#39764 bun build --compile binaries are SIGKILL'd before user code runs; 1.3.14 artifacts still run on the same machine macOS 27 single-file executables
#39728 16 exports and 2 modules missing versus Node 24.11, while process.versions.node reports 26.3.0 Anything feature-detecting on the reported Node version
#39752 ClientRequest drops queued body chunks, truncating chunked uploads with a valid terminator Streaming upload paths
#39747 Piped child_process stdout has no ._handle, breaking synchronous fd-based IPC TypeScript 7 native sync API and similar tooling
#39771 bun install skips npm:-prefixed dependencies Windows installs using package aliases

Issue #39728 is the one to read carefully if your code branches on runtime capability. Bun reports Node 26.3.0 while its builtin surface is short of Node 24.11, two majors older. Any library that feature-detects by version string rather than by probing the API will take the wrong branch.

The argument about where the gains came from

The Rust port has been publicly contested since June, and the disagreement is technical rather than tribal.

Andrew Kelley, creator of the Zig programming language, published a critique on 9 July 2026 in which he wrote: "Performance increase is attributed to LTO, which Zig has supported for all of Bun's existence." Dennis Morello made the same point on 1 August: "The 2 to 5% speed gain and the roughly 20% smaller binary come from cross-language LTO, ICU trimming, and linker work that could have shipped in Zig, not from Rust as a language."

Bun's own framing supports part of that reading. The July post attributes the "2% - 5% faster" figure to cross-language link-time optimisation, and the 5x idle-CPU and 13-48% memory wins are attributed elsewhere, largely to consolidating JavaScriptCore onto mimalloc instead of running libpas and mimalloc side by side. Those are real wins. They are not obviously wins that required a language change.

There is also a factual disagreement worth flagging because it is checkable. Bun's post says the team fuzzes Bun's runtime APIs continuously with Fuzzilli. Kelley writes that during calls with the Bun team, "they were not fuzzing anything". Both statements cannot describe the same period.

On process, the record is public. Tero Piirainen counted "over 5k open pull requests" on 19 August 2026; the repository shows 4,996 open pull requests and 3,247 open issues on 20 August. Tom Lockwood, writing on 27 July, tracked robobun open PRs rising from 1,277 on 9 July to 2,475 on 27 July. And the ship date moved repeatedly: Sumner told a Hacker News thread in late July that "Most likely next Tuesday we'll do the release of 1.4." It shipped three weeks after that.

What to do this week

Do not treat 1.4 as a patch upgrade. Vercel, which shipped Bun 1.4 support for Vercel Functions on 20 August, requires you to set bunVersion to 1.4.x in vercel.json and states plainly: "Upgrading is an explicit opt-in because Bun 1.4 has several breaking changes. Review the breaking changes and update your application before upgrading." That is the right default for everyone, not only Vercel customers.

A workable sequence: pin your current version explicitly so nothing floats onto 1.4 by accident; audit for the five named breaking changes, starting with .env loading in any --bun invocation; rebuild native addons against ABI 147; run your full suite under 1.4 in CI without promoting it; and if you compile single-file binaries on macOS, test that path first because #39764 kills the process before your code runs. Teams already weighing the runtime choice should read our Bun versus Node.js backend runtime decision and the wider Deno, Bun and Node.js production comparison before treating this release as a reason to switch either way. Runtime churn is a platform decision, and it belongs in the same review as the rest of your web platform baseline.

The real cost here is not the upgrade. It is the regression window: a runtime whose entire implementation changed under a stable version number, shipping into codebases whose test suites were written against the old one.

India-specific considerations

For Indian product teams, two details matter more than the benchmarks. The glibc floor dropping to 2.17 makes Bun viable on older RHEL and CentOS 7 fleets that are still common in BFSI and government-adjacent hosting, which removes a real blocker. Against that, the day-one regressions land hardest on teams running lean on-call rotations, where a WebSocket upgrade failing without a log line costs hours rather than minutes. If your workload processes personal data, note that a runtime swap is a change to a processing system under the Digital Personal Data Protection Act 2023, so it belongs in your change record even when nothing user-facing moves.

What is still unknown

Bun has published no musl or Alpine statement in either post, so container images built on Alpine are untested territory as far as the primary sources go. There are no 1.4 patch releases yet: v1.4.0 is the only 1.4.x tag as of 20 August 2026, so there is no data on how quickly the day-one regressions get fixed. And the release post's silence on regressions means the practical answer to "is 1.4 stable" will be written in the issue tracker over the next fortnight, not in the announcement.

FAQ

How eCorpIT can help

Runtime migrations fail on the parts nobody benchmarked: native addons, environment loading, and the tests that were written against the old implementation. Our senior engineering teams run this as a controlled change, not a version bump, and eCorpIT's Node.js development services and API integration and modernisation practice cover the audit, the CI shadow run and the rollback plan. If you are weighing Bun 1.4 against staying on Node, talk to our engineering team and we will size the exposure against your actual dependency tree.

References

  1. Bun 1.4 release announcement, Bun, 20 August 2026.
  1. Rewriting Bun in Rust, Jarred Sumner, 8 July 2026.
  1. Bun 1.4 is now available in Vercel Functions, Vercel changelog, 20 August 2026.
  1. bun-v1.4.0 release tag, oven-sh/bun, GitHub.
  1. bun on the npm registry, npm.
  1. Issue #39766: ws shim handleUpgrade regression in 1.4.0, oven-sh/bun.
  1. Issue #39764: bun build --compile binaries SIGKILL'd on macOS 27, oven-sh/bun.
  1. Issue #39728: builtin surface missing exports versus Node 24.11, oven-sh/bun.
  1. Issue #30719: PathString::slice dangling reference UB, oven-sh/bun.
  1. My thoughts on Bun's Rust rewrite, Andrew Kelley, 9 July 2026.
  1. Bun 1.4 Rust rewrite worries, Tero Piirainen, 19 August 2026.
  1. How is the Bun rewrite in Rust going?, Tom Lockwood, 27 July 2026.
  1. Bun 1.4 Rust rewrite: 64 Claude agents, 535k lines of Zig, Dennis Morello, 1 August 2026.
  1. Hacker News discussion, item 49067854, 27 July 2026.

Last updated: 20 August 2026.

Frequently asked

Quick answers.

01 When did Bun 1.4 actually ship?
Bun v1.4.0 was tagged on GitHub at 14:07 UTC on 20 August 2026 and published to npm at 14:14 UTC the same day. It followed v1.3.14 from 13 May 2026, a gap of 99 days. The GitHub release and the npm registry agree to within seven minutes, so neither source is stale here.
02 Is Bun 1.4 a drop-in upgrade from 1.3?
No. Bun names five breaking changes: the Node 26 ABI move to NODE_MODULE_VERSION 147, the isolated linker default for new monorepos, .env files no longer loading when Bun runs as node, YAML 1.2 boolean parsing, and strict TOML. Vercel made its own Bun 1.4 support an explicit opt-in for this reason.
03 What is the single riskiest change to miss?
Environment files. When Bun is invoked as node through bun --bun, bunx --bun or a node symlink, it no longer loads .env files, matching Node's behaviour. That failure is silent: the process starts, reads missing configuration as undefined, and can connect to the wrong backing service without raising an error.
04 How many regressions did the Rust rewrite introduce?
Jarred Sumner's 8 July 2026 post states the rewrite introduced 19 known regressions, all since fixed. The 20 August release post contains no regressions section at all. Separately, 20 new issues were filed against the repository on release day, including two explicitly described as regressions from version 1.3.14.
05 Did Bun really get rewritten by AI agents?
Yes, and the team documented it. The July post describes roughly 64 Claude agents running at peak across about 50 workflows over 11 days, producing 6,778 commits and a merged diff of 1,009,272 lines, at a stated pre-merge cost of around $165,000 in API pricing. Bun was acquired by Anthropic in December 2025.
06 Are the performance gains actually from Rust?
Partly disputed. Bun attributes its 2 to 5 percent speed gain to cross-language link-time optimisation. Andrew Kelley and Dennis Morello both argue that LTO, ICU trimming and linker work were available in Zig. The larger memory and idle-CPU wins are attributed to consolidating JavaScriptCore onto the mimalloc allocator.
07 Should we upgrade production to Bun 1.4 now?
Not this week. Pin your current version so nothing floats onto 1.4, run the full suite under 1.4 in CI without promoting it, rebuild native addons for ABI 147, and test bun build --compile output first if you ship single-file binaries on macOS, where issue #39764 kills the process before user code runs.
08 Does Bun 1.4 support Alpine or musl containers?
Neither the release post nor the rewrite post says anything about musl. The primary sources document a glibc floor dropping from 2.26 to 2.17, a minimum Linux kernel of 3.10, new FreeBSD binaries and native Windows ARM64 builds. For Alpine images, treat musl support as unverified rather than confirmed either way.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.