People frequently ask:
> How is Bun sustainable? If I bet my company’s tech stack on Bun, will Bun still be around in a few years?
We didn’t have a great answer to this question, until today
An early preview of experimental Bun + JSC with ahead-of-time compilation
For Claude Code's CLI: 24% faster startup, 48% lower memory, 46% lower CPU, and nearly 2x larger binary size
ALT Bun AoT
VS
Bun JIT
Claude Code, same source, same 5-turn session. AoT runs with the JIT off.
Time to interactive
165 ms
216 ms
-24%
Wall time
launch + 5 turns
322 ms
529 ms
-39%
CPU time
Memory at interactive
395 ms
738 ms
-46%
56 MB
108 MB
-48%
Memory after 5 turns
82 MB
159 MB
-48%
101 MB
Peak memory
Executable size target: +100 MB at most
194 MB
-48%
430 MB
229 MB
+88%
Early prototype, macoS arm64. Medians of 8 runs against a fake API server on one MacBook Pro. Memory is phys_footprint. CPU is user + system, all threads. Turns in the JIT build are not CPU bound, so part of the wall time gap is waiting. 28 Sep 2026.
There are a lot of optimizations that aren’t implemented yet.
I want the binary size growth to go down a lot more (it started at 1 GB).
It needs to support sized types like uint32_t and propagate more detailed types.
There’s no separate checker to run and no diagnostics
AoT uses Bun’s bundler & parser to parse typescript, tags types to JavaScriptCore via a typecheck bytecode intrinsic, and compiles the bytecode to machine code via B3 (what JSC’s JITs use)
This keeps the JavaScriptCore changes well-contained, so that syncing with upstream WebKit isn’t complicated
Garbage collector scheduling adjustments make Bun v1.4.3 use significantly less idle CPU, slightly reduce memory, and are performance ~neutral at throughput
In the next version of Bun
Idle CPU usage drops by 67%
ALT Bun v1.4.3: 67–89% less CPU while your server sleeps, compared with v1.4.2. Illustrated as a night sky with the Bun logo asleep as the moon.
One idle minute: v1.4.2 wakes up every second, because any occasional request kept the 1-second GC timer running. v1.4.3 wakes only for the health check, every 10 seconds.
CPU milliseconds used in 2 idle minutes on Bun 1.3.14, 1.4.0, 1.4.2 and 1.4.3:
Express: 430, 308, 282, 57 (4.9× less than 1.4.2)
Fastify: 450, 284, 267, 57 (4.7× less)
Elysia: 473, 280, 197, 21 (9.4× less)
Hono: 417, 263, 195, 21 (9.3× less)
Next.js SSR: 7,029, 628, 815, 268
Also 6–11% less idle memory than v1.4.2.
Measured after a 30-second load test with one health check every 10 seconds, on Linux x64. 1.3.14 and 1.4.0 are the mean of 2 runs; 1.4.2 and 1.4.3 are the median of 4.
JavaScript was never designed for the server. If that doesn't change soon, JavaScript on the server will be replaced by Rust.
The fix needs to happen in the engine. Sound types. Ahead-of-time compilation. Threads with shared objects.
to be clear, if we do add this we would only add it in a backwards compatible way. just like the rest of bun, compatible with the existing ecosystem from the start.
JavaScript was never designed for the server. If that doesn't change soon, JavaScript on the server will be replaced by Rust.
The fix needs to happen in the engine. Sound types. Ahead-of-time compilation. Threads with shared objects.
JavaScript has been through this before.
In 2011, Google set out to replace JavaScript with Dart, arguing JavaScript couldn't be fixed by evolving it. Then ES2015 shipped.
It's time to do that again.
JavaScript engines like JavaScriptCore and V8 have some of the best compiler tech in the world.
An open question: with sound types, ahead-of-time compilation for statically typed code, and JITs for everything else, can JavaScript be competitive with Rust and C?
Opus 5.5 is a very good model and I expect it will quickly become the daily driver for a lot of people.
The writing style is so much better. It writes like Opus 4.6 and codes like Fable 5.1.
Introducing Claude Opus 5.5, the first model in our new Claude 5.5 family.
It performs at the level of Claude Fable 5.1 for most tasks, and costs 40% less to run than Opus 5.
In the next version of Bun
`Bun.FetchSession` gives you a `fetch` function with its own keepalive connection pool
ALT Dark slide with the Bun logo and a "new in Bun" badge. Large headline: "Bun.FetchSession". Subtitle: "fetch() with its own connection pool." Below it, a code sample:
const api = new Bun.FetchSession({
proxy: "http://proxy:8080",
tls: { ca },
keepAlive: { idleTimeout: 30 },
});
await api.fetch(url);
new Octokit({
request: { fetch: api.fetch },
});
"api.fetch" is highlighted in both places. Three cards at the bottom read: "Own pool: isolated keep-alive", "Proxy + TLS: set once per session", "Drop-in: works in any SDK".
Claude Code's idle memory dropped 14% on Linux with Bun v1.4.1
ALT Line chart: "Claude Code — p90 idle memory usage (Linux)", headline "−14%, lower is better". Two lines plot 90th-percentile memory of idle Claude Code processes against process uptime, from about 1 hour to 2 days. The grey "Before" line rises from 490 MiB to 665 MiB; the orange "Bun v1.4.1" line stays below it the whole way, rising from 431 MiB to 572 MiB. Footnote: p90 RSS after 3+ min idle, Linux, Claude Code 2.1.260+ vs earlier versions, same days and session age, Sep 4–9, 2026; y-axis starts at 250 MiB.
Excited to see everyone tomorrow!
We’re at capacity with 130+ on the waitlist, so if you can’t make it please mark “can’t go” on Partiful so someone else can grab your spot