- 2026년 8월 20일 Bun 1.4 발표. Node.js 테스트 스위트에서 1,517개 테스트가 새로 통과했고, 2,900개 이상의 이슈를 수정
- 유휴 CPU 사용량 5배 감소, 메모리 최대 35% 감소, Linux 시작 속도 50% 향상
- 그리고 Bun 자체를 Zig에서 Rust로 재작성함 — 1.4가 Rust 포트의 첫 정식 릴리스 (Claude Code는 이미 수개월간 사용 중이었고, Prisma Compute도 이 위에서 출시됨)
Node.js 호환성
- node:http, node:fs, node:cluster, node:timers, node:zlib, node:vm, node:stream이 Node 자체 테스트의 97% 통과. node:quic 99%, node:events·node:trace_events·node:sqlite는 100%
- Playwright가 Bun에서 동작(connectOverCDP, playwright test, --ui), Next.js 16.3 + Turbopack + React Compiler 빌드 지원, vitest가 threads/forks 풀과 --coverage까지 동작
- OpenTelemetry, dd-trace, @datadog/pprof 등 관측 도구 정상 동작. Nuxt, testcontainers, gRPC, amqplib, TypeORM, nock, Fastify inject 등도 수정 없이 사용 가능
성능
- Claude Code 프로덕션 CPU 사용량 2배 감소 (p99 24%→10%, p50 5.8%→2.5%)
- HTTP 서버 메모리 13~48% 감소 — fastify 233MB→120MB, Express 169MB→92MB, Next.js 397MB→285MB
- 시작 시간: Windows 2.5배(39ms→15.5ms), Linux 2배(10.9ms→5.1ms). 바이너리 크기도 최대 17% 감소
- JSC 8개월치 업스트림 반영 — RegExp 엔진과 Promise, String/Array 빌트인이 자체 JS 구현에서 C++로 이동
- marked.parse() 138배, isbot 200배 빨라짐
- new URL() 최대 4.6배, Promise 연산 1.5~2.4배, Buffer.from(hex) 8배·base64url 46배, 소스맵 디코딩 3.1배
- bun:ffi가 TinyCC 대신 JSC 네이티브 FFI로 전환되어 3배 빨라짐
- ReadableStream/WritableStream/TransformStream 네이티브화 — WPT 100% 통과, CompressionStream/DecompressionStream 신규 지원(압축 해제 2,291MB/s vs Node 491MB/s)
- Bun.serve와 fetch()에 자동 백프레셔 적용 — 느린 클라이언트가 서버 메모리를 무한정 점유하던 문제 해결
표준 라이브러리에 15개 npm 의존성 흡수
- Bun.Image — sharp 유사 API의 내장 이미지 처리. 네이티브 애드온 불필요, 1080p PNG→400×400 JPEG에서 sharp 대비 1.38배 빠름
- Bun.WebView — Puppeteer/Playwright 없는 내장 헤드리스 브라우저. macOS는 시스템 WebKit, 그 외는 설치된 Chrome/Edge를 CDP로 구동
- Bun.markdown — HTML/React/콜백 렌더링 지원 Markdown 파서 (단, 출력은 새니타이즈되지 않음)
- Bun.cron() — crontab/launchd/Task Scheduler에 OS 레벨 작업 등록. Cloudflare Workers Cron Trigger와 동일한 scheduled() 핸들러 형태
- Bun.Terminal — node-pty 없이 bash/vim/htop 구동 가능한 내장 PTY
- 그 외 Bun.JSON5 / JSONL / JSONC / XML / TOML / Archive, sliceAnsi·wrapAnsi·stringWidth, URLPattern, bun repl 등
- Bun.serve 라우트가 디렉터리 서빙 지원 — express.static / serve-static / sirv 대체. Range·ETag·304·sendfile 자동 처리
- Bun.serve HTTP/3 실험적 지원(정적 라우트 벤치에서 HTTPS/1.1 대비 2.7배), fetch()도 protocol 옵션으로 HTTP/2·3 지원
패키지 매니저
- T3-stack Next.js 앱 기준 첫 설치 1.41초로 npm 대비 15배, 웜 캐시 CI에서는 21배 빠름. 메모리도 훨씬 적게 사용
- isolated linker에 글로벌 가상 스토어 도입 — 패키지를 복사하지 않고 심볼릭 링크. 1,400개 패키지 CI 설치 기준 7배 빠름
- 신규 명령어: bun pm diff(패키지 버전 간 diff, 새 install script·child_process 임포트 경고), bun audit fix, bun dedupe, bun prune --production, bun pm licenses
- bun update가 전이 의존성까지 갱신하며, add/remove/update에 --filter와 --catalog 지원, 중첩 override 지원
테스트 / 빌드
- bun test --parallel(워커 프로세스 분산), --isolate(파일마다 새 글로벌, Jest/Vitest 동작), --shard(CI 분할), --timings(파일별 실행시간 기반 균등 분배), --changed(변경분만 실행), --retry/repeats
- React Compiler 내장 — bun build --react-compiler. 860개 컴포넌트 코드베이스에서 71ms 추가에 그쳐 Babel 플러그인(9.15초) 대비 약 20배 빠름
- 배럴 임포트 최적화(optimizeImports), bun:bundle 컴파일 타임 피처 플래그, 인메모리 파일 번들링, 표준 TC39 데코레이터, --compile --asset로 디렉터리 임베딩, ESM 바이트코드 컴파일
- --cpu-prof-md / --heap-prof-md / --metafile-md — 프로파일·번들 분석을 Markdown으로 출력해 터미널에서 grep하거나 LLM에 그대로 붙여넣을 수 있음
플랫폼
- FreeBSD x86_64/aarch64 공식 네이티브 바이너리, Windows ARM64 네이티브 빌드, Android 실험적 빌드
- Linux 최소 glibc 요구사항이 2.26에서 2.17로 낮아져 RHEL/CentOS 7, Amazon Linux 1에서도 동작
- Windows에서 setTimeout(fn, 1)이 15.5ms가 아닌 약 1.4ms에 실행 (시스템 틱 반올림 제거)
업그레이드 시 주의할 변경점
- Node.js 26 기준 — process.versions.modules가 147이 되어 프리빌트 네이티브 애드온은 147용 빌드 필요. res.writeHeader() 제거
- 신규 모노레포는 isolated linker가 기본값 (기존 lockfile은 hoisted 유지)
- Bun을 node로 실행할 때(--bun 등) .env를 더 이상 로드하지 않음
- Bun.YAML이 YAML 1.2를 따라 yes/no/on/off를 문자열로 파싱 — GitHub Actions의 on:이 문자열 "on"이 됨
- Bun.TOML과 bunfig.toml 파서가 엄격해져 따옴표 없는 문자열 등은 SyntaxError
- 보안 수정이 다수 포함됨 — TLS 인증서 검증 기본값이 강화되어(tls.connect의 servername 기본값, Bun.connect/listen의 rejectUnauthorized, rediss:// 호스트명 검증) 1.3에서 되던 연결이 검증 오류가 될 수 있음. 전원 업그레이드 권장
GN⁺ 추가 요약
Neo가 원문을 바탕으로 추가 정리했습니다
- Bun 1.0 이후 가장 큰 Node.js 호환성 업데이트로, 테스트 1,517개를 추가하고 Bun 1.3 이후 2,900개가 넘는 문제를 수정함
- 런타임을 Zig에서 Rust로 재작성하고 메모리 할당 구조를 통합해 유휴 CPU 사용량을 5분의 1로, 메모리를 최대 35% 줄였으며 Linux 시작 속도는 50% 빨라짐
- Bun.Image, Bun.WebView, Bun.markdown, Bun.cron(), Bun.Terminal 등 외부 패키지의 주요 역할을 대신할 내장 API를 대거 추가함
- bun test --parallel, 변경 영향 테스트, CI 샤드, bun audit fix, bun dedupe, bun prune 등 테스트·패키지 관리 도구도 확장됨
- TLS 검증 강화로 기존 연결이 실패할 수 있으며, HTTP/3 서버와 HTTP/2·HTTP/3 fetch는 실험적 기능이므로 프로덕션 적용에 주의해야 함
- Bun 1.4는 Rust 포트의 첫 정식 릴리스이며, Claude Code가 수개월간 이 포트를 사용했고 Prisma도 이를 기반으로 Prisma Compute를 출시함
- Node.js 테스트 통과율은 node:http, node:fs, node:cluster, node:stream 등에서 97%, node:quic에서 99%, node:events, node:trace_events, node:sqlite에서 100%에 도달함
- 다만 아직 Node.js와 100% 호환되지는 않음
- Playwright, Next.js 16.3, Vitest, OpenTelemetry, dd-trace, Nuxt, TypeORM, Fastify 등 기존 생태계와의 호환 범위가 넓어짐
- 네이티브 Web Streams와 배압(backpressure) 을 도입해 느린 클라이언트 때문에 서버 메모리에 청크가 계속 쌓이는 문제를 막고, 스트림 처리량과 메모리 사용량을 개선함
- 새 API들은 기존 외부 패키지가 맡던 주요 기능을 Bun 바이너리에 통합함
- Bun.Image는 sharp, Bun.WebView는 Puppeteer·Playwright, Bun.markdown은 marked, Bun.cron()은 node-cron, Bun.Terminal은 node-pty의 주요 역할을 대신함
- Bun.markdown의 HTML 출력은 정화되지 않으므로, 신뢰할 수 없는 입력의 원시 HTML과 이벤트 속성, javascript: 링크를 별도로 처리해야 함
- 테스트 실행기는 병렬 워커와 격리, 샤드, 과거 실행 시간 기반 분배, Git 변경 영향 분석, 재시도와 반복 실행을 지원함
- 패키지 관리에는 취약점 자동 수정, 중복 의존성 제거, 불필요한 패키지 정리, 라이선스 조회, 버전 간 변경 비교가 추가됨
- --cpu-prof-md, --heap-prof-md, --metafile-md는 CPU·힙·번들 분석 결과를 Markdown으로 생성해 터미널 조사와 버그 보고, LLM 입력에 활용할 수 있음
- Claude Code 프로덕션의 CPU 사용량은 약 절반으로 줄었으며, p99는 24%에서 10%, p50은 5.8%에서 2.5%로 낮아짐
- 64개 연결로 100만 요청을 처리한 측정에서 최대 메모리가 전반적으로 감소함
- Fastify는 233MB에서 120MB, Express는 169MB에서 92MB, Next.js는 397MB에서 285MB로 줄어듦
- Vite 개발 서버는 268MB에서 233MB로 감소했지만 Node.js 26의 214MB보다는 큼
- hello.js 시작 시간은 Linux에서 10.9ms에서 5.1ms, Windows에서 39.0ms에서 15.5ms로 단축됨
- 네이티브 스트림 다운로드 파이프라인은 1,519MB/s를 기록해 Node.js 26의 204MB/s와 Deno 2.9의 530MB/s를 앞섬
- AMD EPYC 9R14와 Linux x64 환경에서 각 실행을 별도 프로세스로 수행한 뒤 3회 중앙값을 사용한 결과임
- bun install --linker=isolated의 공유 전역 저장소는 lockfile과 warm cache가 있는 1,400개 패키지 설치 사례에서 7배 빨라짐
- 다만 기존 프로젝트에서는 기본 설정이 아님
- bun test --parallel은 24개 테스트 파일의 실행 시간을 9.4초에서 워커 4개 기준 2.4초로 줄인 사례가 있음
- 이 수치는 일반적인 성능을 보장하지 않는 예시임
- 다수의 보안 수정과 TLS 인증서 검증 강화가 포함돼 전체 사용자에게 업그레이드를 권장하며, bun upgrade로 설치할 수 있음
- TLS 인증서 검사가 Node.js 동작에 맞춰 엄격해짐
- IP 주소나 localhost를 통해 다른 이름의 인증서에 연결하면 ERR_TLS_CERT_ALTNAME_INVALID가 발생할 수 있음
- 자체 서명 인증서나 사설 CA를 사용한다면 CA 또는 servername을 올바르게 설정해야 함
- Bun.serve()의 HTTP/3와 fetch()의 HTTP/2·HTTP/3 지원은 실험적임
- 특히 HTTP/3 서버는 아직 프로덕션에서 사용하지 않아야 함