Skip to content

The publication for web craftspeople Wednesday, 9 September 2026

Back-end

Bun 1.4 rewrites its engine in Rust and folds in fifteen dependencies

Released on 20 August 2026, Bun 1.4 drops Zig for Rust and ships fifteen former npm packages as built-in APIs. The update targets Node.js compatibility, install speed and memory footprint.

Released on 20 August 2026, Bun 1.4 is the runtime’s biggest architectural shift so far: the engine moves from Zig to Rust, and fifteen libraries the JavaScript ecosystem used to install separately become built-in APIs. The announcement leans on three measured axes: Node.js compatibility, install speed and memory usage.

An engine rewritten in Rust

The move from Zig to Rust covers the runtime core. It was not theoretical before the announcement: according to the maintainers, Claude Code had been running on the Rust port for months and Prisma shipped Prisma Compute on top of it. The reported gains are concrete. Idle CPU usage for a hello-world app is five times lower. HTTP servers cut memory by 13% to 48%: a Fastify service drops from 233 MB to 120 MB. Startup is 2.5× faster on Windows (39 ms to 15.5 ms) and 2× faster on Linux (10.9 ms to 5.1 ms). Binaries shrink by up to 17% on Linux and Windows, and a Windows ARM64 build arrives at 75.1 MB, down from 90.2 MB in 1.3.14.

Fifteen dependencies go native

The most visible day-to-day change lives in package.json: work that used to be delegated to third-party packages now ships with the runtime. The table below maps the main replacements.

Built-in APIReplaces
Bun.Imagesharp
Bun.WebViewpuppeteer / playwright
Bun.markdownmarked
Bun.cron()node-cron
Bun.Terminalnode-pty
Bun.JSON5json5
Bun.JSONLndjson
Bun.XMLfast-xml-parser
Bun.Archivetar
Bun.stringWidth / sliceAnsi / wrapAnsistring-width, slice-ansi, wrap-ansi
bun run --parallelnpm-run-all, concurrently

In practice, an image-processing script or a scheduled job no longer needs an external install.

// Redimensionner une image sans installer sharp
const thumb = await Bun.Image("photo.jpg")
  .resize({ width: 640 })
  .toBuffer({ format: "webp", quality: 80 });

// Planifier une tache sans node-cron
Bun.cron("0 3 * * *", () => {
  console.log("Sauvegarde nocturne lancee");
});

Node.js compatibility and install speed

On compatibility, the release adds 1,517 newly passing tests from the Node.js suite, bringing the total to 3,743 passing test files, up from 1,450 in 1.2.0. The node:quic, node:events, node:trace_events and node:sqlite modules now pass 100% of Node’s tests. On installs, bun install is reported 15× faster than npm on a first run for a T3-stack Next.js app of about 220 packages (1.41s versus 18.1s). The new global virtual store, enabled with the isolated linker, reaches a 7× factor on warm CI installs by symlinking packages instead of copying them.

# Installation a froid : 15x plus rapide que npm sur ce projet
bun install

# Tests repartis sur 4 machines de CI, equilibres par duree
bun test --parallel --shard=1/4 --timings

# Deux scripts en parallele, sortie prefixee
bun run --parallel dev build

Fifteen fewer dependencies in a package.json means that much less to maintain and audit.

Worth watching. HTTP/3 support in Bun.serve() is still experimental, and the built-in React Compiler (reported 20× faster than the Babel plugin) deserves project-by-project validation. The Rust rewrite is transparent at the API level, but an existing CI pipeline is best replayed end to end before any move to production.

The takeaway

Bun 1.4 shifts the line between the runtime and the npm ecosystem: fewer packages to install, lighter binaries, a smaller memory footprint and clearly improving Node.js compatibility. The startup and install numbers strengthen the tooling and CI case above all.

I adopted Bun first where the risk is low: build scripts, CI jobs, small utilities. Watching Bun.Image or Bun.cron replace dependencies I’ve carried for years convinces me more than any benchmark chart, because it cuts real debt. One caveat holds me back: packing this many functions into a single young runtime creates a hard dependency on one vendor. On a critical service I still validate the CI pipeline and load before switching, and I keep Node.js as a documented fallback. — Simon Janvier

Further reading

Full Bun 1.4 release notes: bun.com/blog/bun-v1.4.

Read next