
ALT Poster for bun fmt, a Prettier-compatible formatter built into Bun. Headline: 320x faster than Prettier. Bar chart of wall-clock time to run --check on microsoft/vscode (10,148 files, 8 cores): bun fmt 0.43 s, oxfmt 0.72 0.85 s (2x slower), Biome 2.5 3.6 s (8.3x slower), Prettier 3.9.9 139 s (320x slower). Formats 20 languages: JavaScript, TypeScript, JSX, Flow, HTML, Vue, Angular, Handlebars, MJML, CSS, SCSS, Less, JSON, JSONC, JSON5, YAML, TOML, GraphQL, Markdown and MDX. 99% of Prettier's tests pass (9,728 of 9,821). 5x less memory than Prettier (183 MB vs 972 MB).

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.

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".

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.

ALT Smaller bundles for libraries that use export * as# Libraries like zod and Effect group their exports with export * as. When you called z.object(), Bun 1.4.0 kept every export of that group, because it built a namespace object with a getter for each one. Now z.object points straight at the object function, and the exports you don't use are tree-shaken. out.js var User = exports_external.object({ a: exports_external.string() }); var User = object({ a: string2() }); Each program below calls two or three functions from one library, built with bun build --minify: Package Bun 1.4.0 Bun 1.4.1 Change fp-ts 2.16 21.8 KB 3.2 KB −85% zod 4.5 375.3 KB 77.3 KB −79% ox 1.7 15.4 KB 4.7 KB −70% effect 3.22 369.1 KB 163.6 KB −56% @sinclair/typebox 0.34 107.1 KB 53.3 KB −50%

ALT Slide titled “Route navigation on 4G”, subtitle “click → lazy route’s chunks fetched, parsed, and rendered by React · lower is better”. Three horizontal bars: Bun 1.4.0, 1104 ms (dark gray); Vite 8, 757 ms (gray); Bun 1.4.1, 681 ms (pink-to-orange gradient, labeled −38%). Table below with columns Bun 1.4.0 / Vite 8 / Bun 1.4.1: Requests per navigation 108 / 108 / 61; LCP, cold first load 736 ms / 560 ms / 576 ms; JS chunks emitted 918 / 908 / 750; Total JS shipped (gzip) 1.75 MB / 1.67 MB / 1.61 MB. Footnote: 200 lazy routes, 800 components, 30 npm deps, React Compiler on in both, headless Chrome, 170 ms RTT / 9 Mbps, cold cache, median of 7 runs × 12 routes; Bun built with bun build –splitting –min-chunk-size=16384 –react-compiler; Vite 8.2 with @vitejs/plugin-react 6 compiler: true.

ALT Bar chart: "Bun.serve() now speaks HTTP/2". Requests per second, HTTP/2 over TLS, Linux x64. Three bars per scenario: Bun.serve(), node:http2 in Bun, node:http2 in Node.js v26. Hello World (GET, 13 B response): 291,512 / 55,619 / 42,733 — 6.8× faster POST 4 KB body: 136,077 / 45,366 / 30,112 — 4.5× faster 2 KB URL (GET, long path + query): 113,648 / 43,168 / 31,249 — 3.6× faster 64 KB response: 17,357 / 13,771 / 12,979 — 1.3× faster Streaming (256 KB in → 32 KB out): 4,570 / 4,563 / 2,164 — 2.1× faster Speedup is Bun.serve() vs Node.js v26.3. Bun v1.4.1, 64 cores, loopback, fresh server process per run. h2load -c 64 -m 16 -t 8 -n 100000.

ALT Bun v1.4 URL, Headers & URLSearchParams — operations per second, longer is faster Bun v1.4 Bun v1.3.14 Node v26 9.62M ops/s 4.6x faster than v1.3.14 new URL (url) "https://example.com/search?q=bun#results" 2.10M ops/s 3.51M ops/s 4.37M ops/s 3.6x faster than v1.3.14 new URL (path, base) "../assets/logo.svg" against a page URL 1.22M ops/s 1.93M ops/s 4.15M ops/s 18.4x faster than v1.3.14 new URL (LongUrl) 2 KB of query string 225K ops/s 641K ops/s 10.1M ops/s 5.1x faster than v1.3.14 URL. parse (url) 1.97M ops/s 1.92M ops/s 2.48M ops/s 1.6x faster than v1.3.14 new Headers({...}) 3 headers from an object 1.60M ops/s 610K ops/s 2.17M ops/s 1.4x faster than v1.3.14 new URLSearchParams ({...}) 5 params from an object Linux x64 • same machine • mitata • bars scaled per benchmark 1.55M ops/s 1.66M ops/s bench/snippets/{url-kinds,headers, urlsearchparams}.mjs

ALT Line chart titled "Bun's Node.js test suite progress" — official Node.js test suite files passing on every commit. The line climbs from about 1,460 at Bun v1.2.0 (Jan 2025) to about 2,230 by v1.3.0 (Oct 2025), stays flat until May 2026, then shoots almost straight up to 3,743 on main today (Aug 2026), crossing a dashed line labeled "The bar to ship Bun v1.4: 3,693." Callouts read "+50 over the bar" and "+1,517 since v1.3.0."











