Bun 1.4 is out, and the headline isn't a feature — it's that the runtime's internals were rewritten from Zig to Rust. Over 2,900 issues got resolved along the way, and more than 1,500 additional Node.js compatibility tests now pass. This is a foundational change to the runtime, not a routine point release, and it deserves to be treated that way.
New built-in APIs
Bun 1.4 ships 15 new built-in APIs that replace functionality teams typically pulled in as npm packages:
Bun.WebView— headless browser automation built in, covering a lot of what you'd normally reach for Puppeteer to doBun.Image— image resizing and format conversionBun.markdown— Markdown renderingBun.cron()— cron-style scheduled jobs- Native JSON5 and JSONL parsing
import { cron } from "bun";
cron.schedule("0 * * * *", () => {
console.log("Runs every hour, no external dependency needed");
});The value here isn't just convenience in prototypes — fewer runtime dependencies means a smaller supply-chain surface in production, too.
Performance gains
The Rust rewrite shows up directly in the numbers:
- 5x lower idle CPU usage
- Up to 35% lower memory usage
- 50% faster startup on Linux
- Up to 7x faster installs with the new opt-in global virtual store
If your CI runs on Bun, faster installs translate directly into shorter pipeline times. In monorepos with a lot of packages, enabling the global virtual store is worth testing specifically for that reason.
Breaking changes to check before migrating
Three changes are easy to miss and worth verifying before you flip the switch:
- Stricter TLS certificate verification — certificate configurations that used to pass may now be rejected. If you're relying on internal self-signed certificates, test this explicitly.
Bun.YAMLnow follows YAML 1.2 — configs that depended on YAML 1.1's type inference (likeyes/noparsing as booleans) will parse differently.- No more automatic
.envloading when Bun is invoked asnode— you'll need to load environment variables explicitly withdotenvor equivalent.
A sane migration path
Rather than flipping production over directly, we'd recommend:
- Run Bun 1.4 as a parallel CI job first and confirm your existing test suite still passes
- Specifically re-test YAML config parsing and any TLS-dependent connections
- Audit scripts relying on implicit
.envloading and switch them to explicit loading
For a release with a change this foundational, mapping the blast radius of the breaking changes should come before enjoying the new features.
Source: Bun Blog (bun.com/blog/bun-v1.4)