Bun upstream diff — candidate task list
On this page 4
Port baseline (Home): packages/runtime/UPSTREAM_SHA.txt = fd0b6f1a271fca0b8124b69f230b100f4d636af6.
Upstream HEAD at capture: 1498d7b77a (origin/main), regenerated 2026-07-02.
Range fd0b6f1a27..origin/main = 634 commits (was 425 on 2026-06-23).
Regenerate: cd ~/Code/bun && git fetch origin && git log --oneline $(cat <repo>/packages/runtime/UPSTREAM_SHA.txt)..origin/main.
Triage — Home maintains Bun's ENGINE (parser/JSC/runtime/node:*); install/css/ci/yaml are Rust-side app/tooling, skip.
Engine-relevant buckets (by conventional-commit prefix)
38 node
16 test
15 sql
14 shell
14 parser
11 http
11 fetch
9 resolver
9 fs
9 bundler
8 jsc
8 js_parser
7 webcore
6 crypto
5 websocket
4 mysql
4 ffi
3 sys
3 sql_jsc
3 postgres
2 tls
2 runtime
1 zlib
1 url
1 napi
Big self-contained porting targets (Node vN sync / rewrites / +N tests)
- 5b55beb711 trace_events: implement Node's trace-events subsystem and port the v26.3.0 trace tests — JSON trace writer, --trace-event-* / --trace-env / --trace-exit flags, per-subsystem events, worker tids, NodeTracing inspector domain (+34 tests, 100% passing) (#31824)
- 6640fcff49 Rewrite the JSON parser around a SIMD structural index (#33032)
- a5d122d345 resolver: take the per-entry lock when rewriting cached directory entries (#33056)
- 459c33fa9f node:fs: validate open() flag and mode strings like Node (#32966)
- b101003181 node:dgram: throw ERR_SOCKET_ALREADY_BOUND synchronously from bind() (#33037)
- 86d32c8bb6 HTMLRewriter: use the lol_html Rust crate directly instead of its C API (#33048)
- d1e8adf87d node:dgram: throw ERR_SOCKET_DGRAM_NOT_RUNNING from socket methods after close() (#33024)
- 3e8da8103f node:fs: apply the string encoding in write/writeSync and other Node compat fixes (#32813)
- 2540f6a74e HTMLRewriter: reject the transformed body when the upstream body fails (#32927)
- 9787734ccc node:fs: reject aborted operations with node's AbortError, not the raw signal.reason (#32943)
- fc1b448b71 node:child_process: kill() returns false after the child has exited (#32877)
- bbf1f93258 HTMLRewriter: distinguish empty from absent attributes, throw on invalid arguments (#32840)
- 80c749e981 node:fs: report node's operation name in error.syscall, not the raw syscall (#32964)
- e3849988bb node:buffer: fix six Node compatibility divergences (#32784)
- c21f08c404 node:cluster: don't unwrap a non-Subprocess handle in the primary IPC bindings (#32763)
- c464f01d08 node:path: fix normalize of a first segment ending in ".." (#32783)
- 0621a0ab9c node:crypto: fix segfault when setAAD is called on a non-AEAD cipher (#32758)
- aaba8f0ca3 node:zlib: don't abort when the native handle is driven outside the zlib.ts lifecycle (#32762)
- 05895486df node:net: handle socket.connect() on a socket that still has a live native handle (#32739)
- 44c0cc4a67 node:http: skip non-cell onWritable/onData/onAborted in drain/data/abort dispatch (#32735)
- 7d777f90bb node:net: return synchronous connect() errno from kConnectTcp instead of re-entering oncomplete (autoSelectFamily "null is not an object" crash) (#32660)
- de400b1c7c crypto: report external memory usage to GC for node:crypto wrapper classes (#32653)
- 942c22237c node:http: fix panic when drain fires with cleared onWritable slot (#32661)
- dd13155519 buffer: sync vendored tests to Node v26.3.0 and fix compat gaps (64/69 · 92.8%) (#32626)
- 0672e7d8c2 node:vm: pass the Node v26.3.0 vm test suite (+25 tests, ~65% → 97%) (#32018)
- 85559ebcce node:fs: stop draining tasks after termination in fs.watchFile initial-stat callbacks (#32587)
- 4261a465c1 node:v8: return false from startupSnapshot.isBuildingSnapshot() (#32502)
- dae2e8722b fs: port Node.js v26.3.0 fs tests and fix the gaps they surface — cp error semantics, watcher event delivery, watch ignore+AbortSignal, FileHandle pull/writer, glob port, opendir/Dir, mkdtempDisposable, rmdir-recursive end-of-life, mock.fn (+119 tests) (#31830)
- 6ef59777b6 node:http2: rewritten inbound engine, batched write path, server push, +290 node v26.3.0 tests (79% passing) (#31584) [publish images]
- 899168aba9 node:stream: sync the stream suite to Node v26.3.0 and fix the gaps it surfaces — stream/iter + zlib/iter behind --experimental-stream-iter, read()-one-buffer semantics, compose/pipeline/web-adapter/http/fs/net parity (247/251 upstream tests, +63 vendored) (#31826) [publish images]
- c4a937c53d node:http: rewrite the client on net/tls + llhttp (Node http suite: ~55% → 82.3%, +182 vendored tests, client proxy support) (#31587) [publish images]
- bd8edc7c50 net,tls: port Node.js net/tls compatibility tests and fix the gaps they surface — half-open/reset/write semantics, server TLSSocket wrap, session/keylog, SNICallback/ALPNCallback, pfx, OpenSSL error shapes, addCACert, local binding (+305 tests) (#31155) [publish images]
- 0fcead62d8 Upgrade reported Node.js version to 26.3.0 (#31991) [publish images]
- 8cfee50df0 node:module: release StringImpl refs in _nodeModulePaths (#32337)
- 719be62fa5 docs: rewrite Discord.js bot guide around a working slash command (#32237)
- 541ea3acf6 node:fs: implement lchown on Windows (#32052)
- 5836485c97 node:vm: throw instead of crashing on a cyclic SourceTextModule linked inside the linker (#31624)
- 3a79bd746b node:crypto: uppercase X509 serialNumber and modulus hex to match Node (#31519)
- 843549b819 node:buffer: default lastIndexOf(value, encoding) to search from the end (#31507)
- 472a06a2fb Rewrite Bun.escapeHTML using Highway SIMD (#31483)
Full commit list (newest first)
- 1498d7b77a shell: separate multiple parse errors with newlines in ShellError.message (#33236)
- 65e12674ad bake: pin the react experimental build the test harness installs (#33204)
- d4f3c54c62 http: fix use-after-free of the redirect URL on a retried request (#33242)
- 5b55beb711 trace_events: implement Node's trace-events subsystem and port the v26.3.0 trace tests — JSON trace writer, --trace-event-* / --trace-env / --trace-exit flags, per-subsystem events, worker tids, NodeTracing inspector domain (+34 tests, 100% passing) (#31824)
- 27009bf0f6 crypto: port upstream ncrypto correctness fixes (#33202)
- b124ed3368 pm pkg set: fix use-after-free of bracketed key-path segments (#33186)
- eba370b692 Remove unsound ErasedBox and the dead websocket_deflate RareData slot (#31977)
- 48a4b01f00 inspect: don't probe every hole when printing a sparse array (#33158)
- ae6051ba65 Fix Bun.spawn on Windows never exiting after the child dies when stdin is an async iterable (#33167)
- 31289519a1 Surface ENOMEM instead of aborting when a whole-file read cannot allocate st_size (#33178)
- 2c62c0128f sql(mysql): fix caching_sha2_password fast authentication (#33179)
- 1773b96b9c Handle non-ASCII entry names in Bun.Archive (#33166)
- 6640fcff49 Rewrite the JSON parser around a SIMD structural index (#33032)
- d816daf479 bun:ffi: fix f64 argument conversion of NaN, -0.0, and BigInts (#33122)
- 5124b0ce18 websocket: do not hold an exclusive client reference across user callbacks (#33055)
- 570f857291 docker: install ca-certificates in Debian image final stages (#33136)
- eb6c0fef9b Address review nits from #31789 in computeErrorInfoWrapperToString (#33164)
- 56c514a531 install: link a transitive file: dependency of a local file: package (#33159)
- 5585f36889 install: fix package-lock.json and pnpm-lock.yaml migration of file: dependencies (#33155)
- 253e487969 install: fix resolution union type confusion in the auto-install name lookup (#33143)
- 8973584d4b Don't surface an unhandled EPIPE rejection when a subprocess with a ReadableStream stdin dies mid-write (#33021)
- 725f46e339 css: parse the :nth-child of-list and :has() non-forgivingly, reject empty selectors (#33151)
- d6a82e77ee Fix crash when materializing error stack traces during GC finalization (#31789)
- 00a93bd93d Upgrade WebKit to d81bcc3d833c (#33133)
- 7f33321f8a Fix type confusion in BuildArtifact.prototype.stream (#33144)
- 52a1ddf07b markdown: harden the parser's remaining 32-bit limits (#33078)
- a50f1f395b bundler: don't close a borrowed resolver-cache fd after parsing (#33102)
- 37181fd493 Response.redirect: parse and serialize the url into the Location header (#33126)
- 5cf5cba6c9 module loader: don't abort on .node specifiers with a query string (#33148)
- f456ce9a1c css: serialize a NaN calc() result as zero instead of the literal NaN (#33147)
- cf718fe4af glob: fix abort when joined absolute paths exceed the join buffer (#33145)
- 5f41bd3c81 webcore: make Request/Response clone() throw on a disturbed or locked body (#33129)
- 3e087190d7 Stop Response.clone() from retaining ~2x the body for an unread clone (#33130)
- ffea69ae7c node: fix tty.WriteStream#getColorDepth reporting 256 colors for every TERM (#33124)
- d16488b6d1 Fix use-after-free in the Windows buffered pipe writer (#33114)
- db7545ff39 node: deliver the buffered stdin remainder at EOF in paused mode (#33123)
- 73dad76f30 Bun.serve: report non-Response returns from synchronous fetch handlers (#33120)
- a5d122d345 resolver: take the per-entry lock when rewriting cached directory entries (#33056)
- 8561841407 fs.watch: report watcher queue overflow as ('change', null) (#33110)
- e794f42b34 Bun.serve: invoke error() when the returned Response body is already used (#33118)
- 459c33fa9f node:fs: validate open() flag and mode strings like Node (#32966)
- c944094fcd buffer: match Node's Buffer.prototype.fill offset and end argument handling (#33033)
- 619839ac1d react-compiler: do not hoist a forward reference unless it is inside a nested function (#33105)
- b101003181 node:dgram: throw ERR_SOCKET_ALREADY_BOUND synchronously from bind() (#33037)
- df60704715 buffer: normalize the UTF-16LE encoding aliases to utf16le (#33038)
- 6c1f36a168 child_process: honor uid and gid spawn options (#33060)
- 16a7269639 docs: editorial pass over docs/ and bun-types JSDoc (#33112)
- b2aa0d5d94 Run formatter
- 86d32c8bb6 HTMLRewriter: use the lol_html Rust crate directly instead of its C API (#33048)
- d843870e61 streams: reject instead of throwing when consuming an already-errored ReadableStream (#33043)
- daa44735c7 Bun.color: make 24-bit number inputs opaque instead of alpha 0 (#33046)
- a0f922a4f2 Match Node bounds handling in Buffer.from(arrayBuffer, byteOffset, length) (#33036)
- 064027312a Bun.stringWidth: make bidi controls and invisible format characters zero-width (#33049)
- fb24aac703 docs: say Bun is written in Rust, not Zig (#33065)
- 033e0b199b docs: update base64 guide (#33040)
- 3b23f2d70c pm pack: drop the leading newline from --quiet and --silent output (#32751)
- bb32d24f7a bun_core: make bun_core::strings a direct alias of string::immutable (#33035)
- f789198279 FormData: normalize lone CR and lone LF to CRLF in serialized multipart names and string values (#32975)
- 20d649ff17 fs.watch(Linux): deliver both rename self-events and the basename when the watched path is deleted (#32962)
- 9f905ee8e2 bun-plugin-svelte: stop pinning the exact __commonJS callback syntax in the CJS wrapper test (#33027)
- e323e73df3 Bun.serve websocket: deliver queued publish() messages when unsubscribing from last topic (#32852)
- a401ba352e Bun.serve websocket: deliver ws.publish() from sockets with no subscriptions (#32879)
- 15a59265fe shell: stop enqueuing to an IOWriter after a fatal write error (#32946)
- c6c4210487 console.table: invoke each cell getter once (#32924)
- d1e8adf87d node:dgram: throw ERR_SOCKET_DGRAM_NOT_RUNNING from socket methods after close() (#33024)
- b728334e7a strings: don't abort on UTF-8 to UTF-16 output buffer allocation failure (#33014)
- f76226843e buffer: byte-truncate string fill patterns and encode lone high surrogates as U+FFFD (#33019)
- 3e8da8103f node:fs: apply the string encoding in write/writeSync and other Node compat fixes (#32813)
- 6ae3fe4910 TextDecoder: add the missing Encoding Standard encodings and fix decoder conformance (#32837)
- 7a0f2c0422 structuredClone: clone Object.prototype to an empty object (#32983)
- 2540f6a74e HTMLRewriter: reject the transformed body when the upstream body fails (#32927)
- 412204d949 sql(postgres): stop dispatching messages once the connection has failed (#33016)
- 0528baf26b usockets: fix use-after-free from double-parking a TLS socket in the low-priority queue (#33006)
- 9985ba5baf Fix WebSocket server inflate for clients using context takeover (#33003)
- b7971bbbf7 webcore: pin the FileReader across re-entrant cancel in on_read_chunk and on_reader_error (#32921)
- 9787734ccc node:fs: reject aborted operations with node's AbortError, not the raw signal.reason (#32943)
- 3d98ac8e6c shell: don't re-enter the Yield trampoline on synchronous write errors (#33008)
- 4f29329800 Evict the DNS cache entry when all connections to a host fail (#32991)
- 2cf311cf74 shell: fix use-after-free when poll re-registration fails during a poll-driven read (#32986)
- 7dc9c6c298 Reject RSV1 on WebSocket control and continuation frames (#33001)
- e2a69b796b Fix bun-types CI: resolve tsgo entrypoint from the package bin field (#33017)
- a1c39ded9b Report DNS lookup failures from fetch() and Bun.connect as ENOTFOUND (#32990)
- 18e6d8deaa Validate transfer lists before serializing instead of silently dropping invalid entries (#32809)
- fc1b448b71 node:child_process: kill() returns false after the child has exited (#32877)
- 1d05580b1d GitHub Actions annotations: preserve non-ASCII bytes in title and body (#32736)
- a6a4352b0f webcrypto: fix deriveBits length 0 and non-byte-aligned truncation (#32819)
- e18e49d827 spawn: leave stdio[i]='ignore' closed in the child for i >= 3 (#32892)
- 9f18300efe Bun.serve websocket: make publish() return 0/-1 on subscriber backpressure (#32889)
- daa0d93403 glob: match explicitly-named dotfiles and resolve literal paths through symlinks (#32853)
- 12ce04f4dc bun:ffi: don't re-throw JSC's TerminationException from a JSCallback (#32792)
- bbf1f93258 HTMLRewriter: distinguish empty from absent attributes, throw on invalid arguments (#32840)
- 80c749e981 node:fs: report node's operation name in error.syscall, not the raw syscall (#32964)
- 5034e261fc test: use strict equality in toContain to match Jest (#32950)
- 2fa625a1a5 child_process: forward detached option in spawnSync (#32874)
- 8f6a7c6866 Bun.serve: fix HEAD and 204 response framing (#32800)
- 2c53f80de7 Bun.serve: serve HEAD requests with the GET handler in per-method route objects (#32822)
- 4061d9ae09 Bun.serve HTML routes: inline import.meta.env and fix production ETag/Cache-Control (#32854)
- 64bbcfb96d expect: match Jest's typeof semantics for expect.any(Object) (#32922)
- 0f9331dce4 Fix segfault when a top-level-await module resumes inside AsyncLocalStorage (#32184)
- 8706328b5d websocket: validate close() arguments and reject unmasked client frames (#32820)
- f3368854e4 shell: don't assert on a second terminal callback for a detached PipeReader (#32848)
- d4b9d107c1 Fix off-by-one source map columns after a non-ASCII character (#32838)
- 80729349a7 Bun.serve: do not kill the process when a Response body stream errors (#32842)
- a1a2c81344 bundler: handle nullish module.exports and top-level arguments in bundled CJS (#32846)
- 7257f93839 http: sweep abort tracker by socket pointer in Handler::on_close fallthrough (#32862)
- 7c05b11fa4 fetch: fix HTTP/1.1 client wire bugs with streamed request bodies (#32847)
- df92f8fd68 structuredClone: keep the serializer and deserializer reference pools in sync (#32796)
- c2b5cef7e7 structuredClone: throw DataCloneError for a detached ArrayBuffer (#32799)
- a2290aa2bb http: don't retry a fetch with a ReadableStream body on keep-alive disconnect (#32798)
- f412daa49c Use forward slashes in source map sources on Windows (#32797)
- 96a7627438 http: bounds-check HTTPClient::header_str to stop slice panic in build_request (#32702)
- e3849988bb node:buffer: fix six Node compatibility divergences (#32784)
- 983ec49c61 structuredClone: fix back-references after BigInt, CryptoKey, and X509Certificate (#32791)
- 8c8787161e glob: fix brace depth overflow when skipping a deeply nested branch (#32733)
- a11e72a590 webcore: propagate exceptions from readableStreamTee instead of reporting them as uncaught (#32786)
- be9916104a Fix cross-thread WeakPtr destruction in AbortSignal.any()'s GC reachability callback (#32785)
- c21f08c404 node:cluster: don't unwrap a non-Subprocess handle in the primary IPC bindings (#32763)
- c464f01d08 node:path: fix normalize of a first segment ending in ".." (#32783)
- 642b9f6199 Bun.serve: fix crash (#32771)
- 163e6bce89 fix(sys/windows): return error for unmapped Win32 codes in symlink_w (#32643)
- 179978a6f9 ffi, napi: purify NaNs before NaN-boxing doubles from native code (#32787)
- 0fe7567ace sql: reject a Postgres message length below 4 as a protocol error (#32769)
- 4ecbdf2f05 Keep an aborted AbortSignal's wrapper alive while its controller is still reachable (#32777)
- 3f464e8829 webcore: pin subprocess stdout FileReader while its pipe poll is live (#32743)
- b99024a902 markdown: reject inputs of 2^32 bytes or more instead of panicking (#32752)
- 2d2644a1f4 Bun.serve: fix crash
- d75b27382d shell: fix use-after-free when a pipe read fails inside the spawn call (#32754)
- 990be52f7f Don't panic generating a sourcemap for a source ending in a truncated UTF-8 sequence (#32774)
- 67ef31110b tls: don't truncate the stream when destroy() follows a large write (#32719)
- 034f693ab8 test: stop asserting an OCSP URI on the live bun.sh certificate (#32789)
- ba72810002 fs.readdir: release pending_err mutex in recursive subtask error path (#32748)
- 944345fa71 Bun.{JSON5,JSONC,TOML,YAML}.parse: reject inputs of 2^31 bytes or more instead of panicking (#32764)
- fad2b2de03 Add missing exception check in JSC__JSValue__putToPropertyKey (#32770)
- b4e9605808 AbortSignal: emit write barrier when storing abort reason (#32747)
- 031f73c360 sql(postgres): stop sending a redundant Sync after a simple Query (#32772)
- 0621a0ab9c node:crypto: fix segfault when setAAD is called on a non-AEAD cipher (#32758)
- aaba8f0ca3 node:zlib: don't abort when the native handle is driven outside the zlib.ts lifecycle (#32762)
- 05895486df node:net: handle socket.connect() on a socket that still has a live native handle (#32739)
- 76b4a14001 install: compare stored scope name and folder path, not just their hash (#32745)
- e9c4fcc067 crash_handler: re-raise original signal instead of terminating with SIGILL (#32740)
- 863379d7ea http: never pool a proxy tunnel with a fatal TLS error or pending I/O (#32742)
- 82688896d7 yaml: combine
\uD8xx\uDCxxsurrogate-pair escapes in double-quoted scalars (#32731) - 62e059dc68 net: validate setTypeOfService argument on the native TCPSocket prototype (#32738)
- 85298a3704 verify-baseline: allowlist llint_op_enter_wide32 data-in-.text false positive (#32744)
- 44c0cc4a67 node:http: skip non-cell onWritable/onData/onAborted in drain/data/abort dispatch (#32735)
- ff2781d7a8 Bun.indexOfLine: fix O(n^2) scan on buffers containing a non-ASCII byte (#32732)
- c4d6844e78 Fix SubtleCrypto.wrapKey with AES-KW and jwk format (#32616)
- f58fd036db fetch: do not touch JSCells in the Response Weak finalizer during GC sweep (#32729)
- 7fa26a75c0 paths: keep PathName base in sync while stripping trailing separators (#32709)
- d7bdc78057 Deflake streams-leak pull-buffer test by pacing writes on consumer progress (#32727)
- 9fed8df849 parser: avoid O(n^2) arena blowup in comma-expression simplification (#32717)
- ba04159baa yaml: fix stringify emitting \L/\P for U+00A8/U+00A9 instead of U+2028/U+2029 (#32718)
- 2b1d61d14c usockets: propagate epoll_ctl(EPOLL_CTL_ADD) failure instead of going silently deaf (#32706)
- c1e79b0390 Fix merge
- e174a4e5a3 Fix merge issue
- 81dfd59967 http: couple fetch() receive backpressure to JS body consumption (h1/h2/h3) (#29831)
- 89f7b1977f test(napi): split napi_is_arraybuffer output on /\r?\n/ for Windows (#32722)
- 9bf393422c parser: drop bogus no-clobber assert on enum ref_to_ts_namespace_member insert (#32711)
- 4e159fbc9c js_parser: handle AllocatedName default_name refs in export default visit (#32714)
- 97cc7c5fab bundler: error instead of panic when splitting is used with non-ESM format (#32685)
- 78f62899e1 ini: treat stripped-empty quoted values as empty string, not shared object (#32712)
- 1c861db1a7 jsc: drain rejected-promise list in O(n) instead of O(n^2) (#32554)
- 3656e58ca1 js_printer: allow empty string as import/export clause alias (#32710)
- 3a9f554930 transpiler: fix garbage output for decorated fields with non-ASCII string keys (#32713)
- 5889bcae07 parser: skip scope-order debug assert once a parse error is logged (#32715)
- d235bc5e4d patch: remove bogus debug_assert in parse_diff_hashes (#32708)
- 7d777f90bb node:net: return synchronous connect() errno from kConnectTcp instead of re-entering oncomplete (autoSelectFamily "null is not an object" crash) (#32660)
- 98f4919914 Socket syscall fault injection for net/tls/http/http2/fetch/WebSocket fuzzing + 7 bug fixes (#32681)
- 5621c5de90 FileSystemRouter: fix slice panic in URLPath::parse on leading '?' or empty-decoding path (#32669)
- d4514457e8 Remove the .zig porting-reference sources (#32621)
- ed700c207a Remove stale signal.is_dead() assertion in pipe_readable_stream_to_blob (#32657)
- de400b1c7c crypto: report external memory usage to GC for node:crypto wrapper classes (#32653)
- 237de941fd napi:
napi_is_arraybufferreturns false for SharedArrayBuffer (#32629) - e112ac7d94 patch: guard against crafted patches that panic the applier (#32668)
- d6a20b6135 Fix use-after-free for reference-link href/title in Bun.markdown.react()/render() (#32671)
- 942c22237c node:http: fix panic when drain fires with cleared onWritable slot (#32661)
- 15bc359550 types(streams): make documented backpressure idiom typecheck (#32641)
- a830e9dafa streams: extract long-lived closures from ReadableStreamInternals into bound exported helpers (#32656)
- 6a574c47e2 Remove incorrect downcast
- f91c27bf8d CLAUDE.md: limit code comments to 3 lines (#32658)
- dd13155519 buffer: sync vendored tests to Node v26.3.0 and fix compat gaps (64/69 · 92.8%) (#32626)
- be6a664e8d s3: wake the HTTP thread on stream cancel so the wrapper actually frees (#32608)
- d34ca02bce http: proxy stress test suite + fix streamed upload and on_writable UAF through tunnel (#32635)
- 5d2f66c927 Wait for end() when a direct stream's pull() returns synchronously in Bun.serve (#32140)
- 91f028382c fetch: release leaked WTFStringImpl refs on proxy href and file:/blob: response url (#32329)
- 1bd44dbe60 windows: heap-allocate bunx fast-path environment block (#32644)
- 03042ab8af Add process.on('memoryPressure') event (#32594)
- ff63668d55 sourcemap: static_assert ParseMappingsState layout matches kSt* indices (#32639)
- 85ef0c5612 shell(rm): don't leak ShellRmTask when readdir loop aborts after enqueuing children (#32617)
- 6b702aed3a Remove DuckDB tests and dependencies from test/package.json (#32633)
- ea7e44f307 Add safe wrappers for brotli, zstd, zlib, and libdeflate (#32637)
- 4982b91e37 test(sql): centralize fault-injection wire frames; convert decode mocks to real servers (#32467)
- 0be8a2d075 types(streams): document ReadableStreamDirectController backpressure contract (#32640)
- 126e800e77 Fix structuredClone crash with large nested ArrayBuffer (#32590)
- 7ff11819c2 Fix use-after-free of stream error objects parked in ByteStream (#31963)
- cbcec936a1 webcore: store ReadableStreamSource onClose in WriteBarrier slot instead of Strong (#32582)
- c6be834c63 fetch: add automatic request body compression via
compressoption (#32416) - 18ead54130 react_compiler: bind synthesized refs in bundle output + hoist sentinel + Babel-parity codegen (#32581)
- 98094dc4d1 Fix use-after-free in JSReadable*Controller end()/close() when onClose re-enters the event loop (#32597)
- 23315f417a crypto: update root certificates to NSS 3.124 (#32604)
- 28f2dbdaf8 parser: declare_common_js_symbol docstring + __require bundle-mode shadow test (#32615)
- 2d61142696 test: Bun.isStandaloneExecutable is false under BUN_BE_BUN=1 (#32606)
- 0672e7d8c2 node:vm: pass the Node v26.3.0 vm test suite (+25 tests, ~65% → 97%) (#32018)
- 8d32bd412c parser: don't alias automatic JSX runtime import to a user's local binding (#32593)
- c1da139f09 sourcemap: SIMD mappings VLQ decode via Highway (#32556)
- 765cad084f fs: use clonefile for symlink-free recursive fs.cp on macOS (#32503)
- 452139e36b docs: clarify the example security scanner package name is a placeholder (#32589)
- 85559ebcce node:fs: stop draining tasks after termination in fs.watchFile initial-stat callbacks (#32587)
- fca03d9b9e cli: make several unhelpful error messages actionable (#32470)
- 7dd427e7ad Add Bun.isStandaloneExecutable (#32583)
- 7a5293cef9 Bun.serve: propagate socket backpressure to Response(ReadableStream) bodies (#32553)
- 602d956885 Remove the js-call-outside-microtask-queue debug check (#32552)
- 9cb2faf202 ci(lint): install dependencies before running oxlint (#32555)
- febcc24cbc parser: keep resolved Ref on e_identifier during substitution revisit (#32551)
- 8dd1b617e4 Fix crash when a client aborts a streaming response under backpressure (#32120)
- 1031c6667a epoll_pwait2: issue raw syscall, add Android gate and disable flag (#32490)
- b0fb1f767e sys(windows): map unknown NTSTATUS through RtlNtStatusToDosError for fs.rm (#32538)
- 8f1b951ff5 react-compiler: follow-up fixes from #32504 review (#32545)
- 90e2bac16e lint(src/js): flag duplicate property reads between an if condition and its body (#32522)
- de73fda94f build: enable Rust debug-assertions for asan/assertions builds; decouple IS_DEBUG (#32520)
- 315ed50aba React Compiler integration (#32504)
- 88417471cb chore: remove stale 'cfg-gated'/'un-gate'/'blocked_on' port-era comments (#32519)
- 46c54cd69f deps: upgrade BoringSSL to upstream 606d3a344 (#32521)
- 25e32c1b69 ast: shrink Expr/Stmt/Binding 24→16 bytes (#32507)
- e11be56199 fs: accept integer-valued double for numeric open() flags (#32506)
- 4261a465c1 node:v8: return false from startupSnapshot.isBuildingSnapshot() (#32502)
- dae2e8722b fs: port Node.js v26.3.0 fs tests and fix the gaps they surface — cp error semantics, watcher event delivery, watch ignore+AbortSignal, FileHandle pull/writer, glob port, opendir/Dir, mkdtempDisposable, rmdir-recursive end-of-life, mock.fn (+119 tests) (#31830)
- 454e3b2884 threading: wake all parked workers on pool shutdown (#32494)
- eae803811b FileSink: remove Windows UAF diagnostic probes (#32474)
- f9530ae67d Add
--trustedflag tobun list(#32478) - 6ef59777b6 node:http2: rewritten inbound engine, batched write path, server push, +290 node v26.3.0 tests (79% passing) (#31584) [publish images]
- fe9721c1af ci: ignore image-bake commit tags on main (#32477)
- 797d565fa6 install: trust file: paths from root package.json overrides/resolutions (#32452)
- 92311e19f9 postgres: fix do_run error-path leaks (poll_ref hang + query/statement refs) (#32464)
- 65f12bd97d crash_handler: emit baseline platform char from Environment::BASELINE (#32468)
- 1ee0960156 install: explain unsupported bun.lock version and suggest 'bun upgrade' (#32465)
- 899168aba9 node:stream: sync the stream suite to Node v26.3.0 and fix the gaps it surfaces — stream/iter + zlib/iter behind --experimental-stream-iter, read()-one-buffer semantics, compose/pipeline/web-adapter/http/fs/net parity (247/251 upstream tests, +63 vendored) (#31826) [publish images]
- e54dc71639 build: add --remap-path-prefix to cargo RUSTFLAGS for reproducible builds (#32466)
- 1ecbea9d6d http: fix use-after-free when proxy tunnel closes after response completes mid-read (#31959) [publish images]
- dcc34a8245 node/fs: guard StatWatcherScheduler against double-pushing its intrusive WorkPool task (#32457)
- 7765caff44 http: fail with ConnectionClosed instead of asserting when outer proxy socket is dead at ProxyHeaders write (#32462)
- c4a937c53d node:http: rewrite the client on net/tls + llhttp (Node http suite: ~55% → 82.3%, +182 vendored tests, client proxy support) (#31587) [publish images]
- be38df3440 Make navigator properties getter-only accessors (#32440)
- 3b4f2866e6 fix(ws): pass ServerWebSocket to cork() callback (#32438)
- 0c537fef87 moduleLoaderImportModule: thread referrer asyncEvaluationOrder for TLA self-deadlock skip (#32437)
- 3b24ca9bca Fix
queueMicrotask.lengthto be 1 (#32419) - cd9a79dbc6 ci(machine): note Azure delete-before-recreate cancel hazard (#32446)
- 76d5d28e79 crypto: accept
shake-128/shake-256aliases in createHash and crypto.hash (#32439) - bd8edc7c50 net,tls: port Node.js net/tls compatibility tests and fix the gaps they surface — half-open/reset/write semantics, server TLSSocket wrap, session/keylog, SNICallback/ALPNCallback, pfx, OpenSSL error shapes, addCACert, local binding (+305 tests) (#31155) [publish images]
- 9ff03fb66b ci: document the publish-images requirement in bootstrap.sh version comment (#32441)
- 91ce3b4d35 Upgrade WebKit to b5ba38a21e17 (#32414)
- 66cd2fdab1 test(sql): cover both adapters in the synchronous-tls-rejection test (#32415)
- 53bd013ef3 url: skip zero-fill of 2KB scratch buffers in join_normalize/join_write/join_alloc (#32393)
- b0fef2f7b0 Use visitor.vm() in GlobalObject::visitChildren; make HTTPHeaderIdentifiers eager (#32407)
- 5d89ae2fc5 ci(runner): ignore local console logins in wait-for-user loop (#32396)
- 0fcead62d8 Upgrade reported Node.js version to 26.3.0 (#31991) [publish images]
- 62cc078d30 Upgrade WebKit to 51cc3feb7298 (#31796)
- eaae6d1b8e console.timeEnd(""): remove doubled trailing newline (#32360)
- 06c90af678 fs.readdir: don't drop recursive entries whose relative path exceeds MAX_PATH_BYTES (#32368)
- 49269d3658 Fix Bun.Terminal termios flag NaN clamping (#32354)
- d90054227f sql_jsc: add SQLDataCell tag constructors and replace hand-rolled struct literals (#32367)
- bbbab38875 websocket: only cap header bytes, not pipelined frames, during upgrade (#32394)
- 78f0fff164 spawn: don't panic on Blob/ReadableStream stdio at index >= 3 (#32363)
- f7648781ad jsc: use 'property' wording in get_optional_slice type error (#32355)
- 352ce1a61d Fix bun build --compile dropping asset [dir] from Bun.embeddedFiles[].name (#31576)
- 88d09d52c2 Fix BunString ref leaks in Bun.JSON5.stringify (#32331)
- 65f80dcf66 websocket: keep receive buffer capacity across fragmented message dispatch (#32356)
- 8cfee50df0 node:module: release StringImpl refs in _nodeModulePaths (#32337)
- 332aa78131 http: remove 1 GiB decompressed-body cap from fetch Decompressor (#32366)
- df55ab7b77 postgres: throw ERR_INVALID_ARG_TYPE for null bytes in connection params (#32352)
- e0acad3182 crypto: throw ERR_INVALID_THIS in Hmac native update() on bad receiver (#32256)
- 2d8d5da90e Shrink CLAUDE.md
- 7daa6ef4d6 tls: apply the server's default rejectUnauthorized to incoming connections (#31322)
- 4d79cf879a sql: throw validation errors for degenerate helper inputs instead of raw TypeErrors and engine errors (#32156)
- 4d07529ce2 test: give container-awaiting beforeAll hooks a 120s timeout (#32211)
- eb98fd874f sql: guard pool connection scans against unassigned slots during pool start (#32201)
- 14bcc6c534 docs: fix dead discordjs.guide links in Discord.js bot guide (#32238)
- 719be62fa5 docs: rewrite Discord.js bot guide around a working slash command (#32237)
- 6f67e0902b docs: add production deployment note to Discord.js bot guide (#32236)
- a0e221e07e sql_jsc: drop dead to_js helpers, Signature::hash, and unused MySQLValue Decimal/timestamp (#32209)
- 80d92d42c9 test(sql): bound spawned fixture lifetime so a test timeout cannot leave orphans (#32207)
- ac312f0952 ci: bump darwin test timeout 40→45 min (#32194)
- f2821a2d8f test/docker: BUN_TEST_SERVICE_
env override for ensure() (#32139) - 5d8b29294b sql: consolidate JS pool/connection plumbing into BasePooledConnection in shared.ts (#32145)
- 885c44fea1 Fix panic on lazy-export modules in bun build --format=internal_bake_dev (#31948)
- 541ea3acf6 node:fs: implement lchown on Windows (#32052)
- fc79577b77 dev server: fix require binding when a module flips from ESM to CJS (#31947)
- 6b001fea8d Surface posix_spawn file action errors on macOS instead of spawning with closed stdio (#32068)
- 6128f8e85b Emit sourcemaps for standalone HTML builds (--compile --target=browser) (#32116)
- bcad9b220e fetch: settle buffered body promises when an aborted request still has a streaming request body (#32130)
- fd99f8b32e Fix missing exception check when coercing Bun.plugin target to a string (#32106)
- ddd1ff0a3d sql: consolidate per-driver StackReader into shared/ (#32141)
- 5c02cc1040 sql: make forced close() resolve while a pool connection is mid-handshake (#32097)
- 170fcd76cc sql_jsc: extract shared query/connection ctor-arg parsing across postgres and mysql (#32135)
- 6e91d24dc6 Type-erase source-provider dispatch and move bake's providers out of bun_sourcemap (#32077)
- 70134979c2 sql: collapse repeated const tables into macros and drop dead protocol traits (#32128)
- f8723b190d Fix duplicate clientNavigated inspector events on successful SetUrl (#32081)
- 8354af5421 sql: don't let a throwing onconnect/onclose callback corrupt the connection pool (#32041)
- 1c90e5a2cf Move the bake dev-server inspector agent out of jsc (#32076)
- 8df5916805 sql: retry connect failures while queries are waiting (#32028)
- 6ed88a5e27 ci: automatically retry jobs killed by timeout or agent loss (once) (#32072)
- 2ad4199574 ci: serialize docker service startup through a per-shard coordinator (#32033)
- 09703da1ae Skip bunx.test.ts in CI until the Node.js version bump (#32042)
- 88d48c2236 sql: report connect failures distinctly from closed connections (#32027)
- 0c6eefd1d2 ci: raise darwin test-step timeout to 40 minutes (#32032)
- 717542f899 jsc: mark ArrayBuffer no-copy constructors unsafe (#31981)
- 0e95920c36 test(sql): fix malformed force_tls.cnf in mysql-tls image (#32030)
- a988615098 repl: keep multi-byte UTF-8 input in the interactive line editor (#31876)
- 1293ef4ee4 css: minify merged duplicate rules in linear time (#31920)
- 0342abb38f Don't panic when auto-install can't read the top-level directory (#31938)
- 90589f93cc bundler: fix dev server crash when a CSS rebuild fails import resolution (#31905)
- 300b148feb test runner: store Scanner.fs as a raw pointer instead of casting away shared refs (#31850)
- 27d5181ad6 markdown: fix quadratic rendering of nested link/image labels without a depth cap (#31909)
- 73ab3ddc76 css: fix exponential backtracking on nested color function values in token lists (#31919)
- a7034f2248 Evaluate private method call receivers once in decorator lowering (#31426)
- a7839df914 ci: platform smoke check before running tests (#31904)
- 08226e20fd fs.watch: type FSWatcher's wrapper self-reference as JsRef instead of a bare JSValue (#31848)
- d155a2ceb5 webcore: fix ReadableStream::isLocked never matching any stream (#31884)
- a2eaf90b26 ci: bake Intel SDE into the Windows image for verify-baseline (#31893)
- 82808d41e9 test(sql): use container.host instead of hardcoded localhost in 'Connect using uri' (#31901)
- a1dd647d5b resolver: root dir-cache slot pointers at the singleton and drop browser-map borrow erasures (#31836)
- f50099364a Make the bundler's output-dir handle an owning bun_sys::Dir (#31849)
- 7ab24e447d Fix GC use-after-free of BuildMessage wrappers when building AggregateErrors (#31874)
- bf79fe702c Replace phf maps with a length-dispatched comptime string map macro (#31875)
- 55f6c899f5 yaml: remove raw parser back-pointers from plain-scalar string builder (#31847)
- 74c709db01 zlib: stop reading JsCell stream state from the GC marking thread in estimatedSize (#31867)
- 3360a9eaf6 css: thread the arena lifetime through ToCssResultInternal (#31839)
- 3d125dca77 ffi: remove write-only js_function field from Compiled and document GC rooting (#31846)
- b56491b139 Reuse parser-owned stack in unused binary-comma simplification (#31851)
- 6038601f30 css: fix grid-template-areas
.null-cell token parsing (#31840) - 85534281c6 Resolve the audited TODO(port)/TODO(b2)/PORT NOTE backlog (#31783)
- 91270aa8ab fix(base64): don't overflow on VLQ::encode(i32::MIN) in the crash handler path (#31861)
- ef8952736b bun test --isolate: release leaked-handle global pins; attach module_info on the sync module path (#31793)
- 898ef56ed7 Update CLAUDE.md
- 29f2c7e6c2 Treat unregistering an already-removed poll registration as success (#31821)
- 8c3dfdb79d Update CLAUDE.md
- 977f054f60 Reset SIGTRAP before the crash handler's final trap so crashes terminate on aarch64 (#31794)
- a3464c666b fetch: use standard base64 for proxy Basic auth credentials (#31782)
- 59ec6264ed bundler: tree-shake unused objects with inlined-enum computed keys (#31756)
- bf70cc79c4 Remove stale TODO(port) comments and delete dead code (#31746)
- 43fff14420 Fix panic converting over-long Windows paths to UTF-16 (#31694)
- 40d8c4efa0 fuzzilli: stub process.execve in the REPRL wrapper (#31759)
- d2a6506dfa fix(dns): handle UTF-16 strings in lookupService address and resolve record type (#31742)
- 79b5471031 fetch: resolve empty compressed responses as empty bodies (#31736)
- 800c0e5a1c Collapse single-return arrow bodies to expression bodies when minifying (#31723)
- 5d9b84a529 Fix type confusion in generated class custom setters (#31725)
- a5879491c9 resolver: fix filename-store overflow panic under
--bun(#31504) - 3f153b9c9a Validate VLQ accumulation and size math in standalone sourcemap embedding (#31698)
- 3edc7af074 test: build docker test services instead of bind-mounting their config (#31732)
- 31cae2ed00 websocket: report the received close code to JS, not the echoed one (#31518)
- 4b42439858 Fix OOB panic in redacting JS highlighter when
${}ends the input (#31700) - b7fa3cbed1 Fix panic when FilePoll unregister fails on macOS (#31701)
- 8fe7a60aa1 test: let the docker test helper target a remote Docker host (#31731)
- f7b9902780 install: use a bitset for Lockfile.exact_pinned instead of Vec
(#31707) - 1b7a40768f Upgrade WebKit to 6d586e29 (#31724)
- 684f2afe80 Hardening: input validation and compatibility fixes across 9 subsystems (round 9) (#31606)
- 9fd88506e2 valkey: adopt RESP payload allocation as Buffer backing store (#31673)
- f58d14649c Update .gitignore
- f8f7490fa4 install: don't panic when downloading a package whose patch was removed (#31685)
- a0d1472836 Delete PathString (#31579)
- 64ae83c2fc parser: fix "Scope mismatch while visiting" panic from macro tagged templates (#31693)
- 7ef293bd96 crash handler: evaluate stack-trim anchors in the capturing frame (#31687)
- 17b4071b44 Allow napi_delete_reference to be called from finalizers during GC (#31684)
- 8cf3737812 fetch(proxy): clear response buffer after CONNECT envelope handoff (#30385)
- 561eb8ff17 Fix memory leak in repeated Worker create/terminate (#31646)
- 9333748bbb install: don't bump an existing bun.lock to lockfileVersion 2 on re-save (#31602)
- fdf1246df0 bundler: stop re-interning module paths into FilenameStore on every Bun.build() (#31647)
- 90f334a46b Fix mojibake in
bun updateoutput; move pretty-format strings to compile time (#31668) - 5836485c97 node:vm: throw instead of crashing on a cyclic SourceTextModule linked inside the linker (#31624)
- 593dbaa423 install: don't fail on an unresolved optional dependency with an empty name (#31655)
- 8a5115791b Update upgrade-webkit instructions for the current build system (#31649)
- b687fb3fb6 base64: encode URL-safe via simdutf directly instead of the WTF C++ shim (#31666)
- 1f76618bb0 css: bound vendor-prefix fan-out when serializing nested rules (#31642)
- e75a55dab6 sql: share the wall-clock datetime text parser between MySQL and Postgres (#31663)
- 0a205776e9 blob: stop resolve_size() widening a sliced Blob to the end of its store (#31210)
- ba71f3f290 http: match Content-Encoding/Transfer-Encoding case-insensitively and accept x-gzip (#31521)
- ffe20f48c4 formdata: match multipart media type and boundary attribute name case-insensitively (#31531)
- 5ac120ca37 Fix use-after-free in
bun run --parallelworkspace script spawning (#31637) - 2629789a22 Add microbenchmarks for latest JSC changes (#31562)
- 61bd9976e1 mysql: decode DATETIME/TIMESTAMP as UTC to match the UTC-based encode (#31212)
- 7069b30929 yaml: clear remaining 3 non-cyclic
test.todoentries (BOM strip, 2-anchor e-node key, flow cmi gap) (#31569) - 3a79bd746b node:crypto: uppercase X509 serialNumber and modulus hex to match Node (#31519)
- 6162fb29e2 css: fix exponential backtracking in atan2() color parsing (#31558)
- e3481db80c mysql: decode computed DECIMAL columns as strings, not raw buffers (#31513)
- bb94ed4f29 Hardening: input validation and bounds checking across 12 subsystems (round 8) (#31559)
- 16f34ba649 collections: fix LinearFifo::ordered_remove_item wrapped-buffer bounds (#31565)
- 9d953cc350 Fix test failure
- 496ce7e47d standalone_graph: zero-copy source string for compiled JS modules when contents are ASCII (#31557)
- efc26a1be0 crypto: X509Certificate#checkIssued() should return a boolean (#31571)
- cb4a5c69db sql: keep all-digit column names with '_' separators as named keys (#31572)
- 051f78227a install: make lockfileVersion 2 stamp independent of the writer's registry config (#31556)
- 9d000561c9 yaml: fix 5 flow-context over-accepts/under-accepts (#31561)
- 57d8e38a1c yaml:
---/...only recognized at column 0 (closes #25660) (#31547) - f3ccf766df ast: delete unused Boundering, RefDump, Names, and dead Loader/allocator helpers (#31546)
- 677fe1cfad Fix crash when starting a compiled executable in a deleted cwd (#31496)
- 5ba2f652d2 encoding: don't corrupt encodeInto output when a valid astral char doesn't fit (#31532)
- 973d1de8b5 install: bump default lockfileVersion to 2, gate stricter parse checks behind it (#31539)
- 3e033eac2a semver: delete unused Sorter/SortDirection and any_range_satisfies (#31545)
- e85606d484 upload-release: publish android and freebsd artifacts (#31553)
- 937b075080 bun_core: delete unused MapLike trait, FieldType marker, EmbedDir (#31543)
- 314bae56aa http_types: delete unused can_open_in_editor and URLPath::is_root/path_without_asset_prefix (#31552)
- 831cd0002f sys: delete unused CopyFileRangeError, copy_file_error_convert, SCS_*_BINARY/GetBinaryTypeW (#31550)
- a3e0d1f7d3 bun_alloc: delete unused MimallocHeapRef, TypedArena, BumpWithFallback (#31542)
- f46fe89134 paths: delete unused Path::move_ no-op (#31551)
- eeca40690c resolver: delete unused ModKeyError, FileSystemError, ReverseResolution, and dead helper fns (#31548)
- 043a2bf5ac threading: delete unused init_with_mutex/into_unprotected/wait_and_deinit (#31544)
- 4d4cb71633 collections: delete unused SortedHashMap, AutoStaticHashMap, ComptimeStringMap16 (#31541)
- ecfdaa66f3 js_parser: guard stack depth when parsing nested JSX elements (#31537)
- 4845d4fdaa bundler: inline ungate_support into bundle_v2 and lib.rs, delete the file (#31529)
- d4b3a3ed47 yaml: reject tab in s-indent position before structural tokens (DK95/06, Y79Y/005, Y79Y/008 — 402/402) (#31527)
- 7688c09dc9 bun_core/util: delete unused ArrayLike trait (#31536)
- 002dd41eb3 Hardening: input validation and protocol tightening across 24 subsystems (round 7) (#31495)
- 843549b819 node:buffer: default lastIndexOf(value, encoding) to search from the end (#31507)
- a740d91572 js_parser: discard the fake if-block scope for a forward-declared function (#31533)
- d632fc5b29 css: bound selector expansion through nesting-holding at-rules (#31482)
- 63d5cd4065 Add runtime-dispatched SIMD xxHash3 via Highway (#31491)
- 29e38e9486 bun:sqlite: decode short non-UTF-8 TEXT leniently instead of dropping the field (#31514)
- 67d6021fde Lowercase Headers names on iteration with Highway SIMD (#31489)
- f472981ecb ci: build the Windows artifacts by cross-compiling from Linux (#31431)
- 79a4029d20 yaml: extract
parse_block_indentedhelper; fix anchor/tag on empty node (6KGN/FH7J/H7J7/PW8X) (#31308) - 510b517817 sourcemap: fail on a truncated base64 VLQ instead of decoding it as 0 (#31506)
- b69085e598 Route large ANSI escape scans through the dispatched Highway kernel (#31490)
- 3ec6669844 node-fallbacks: embed browser polyfills zstd-compressed (#31456)
- f20c8dc33a strings: bind StringJoiner borrowed segments to a lifetime (#31493)
- 472a06a2fb Rewrite Bun.escapeHTML using Highway SIMD (#31483)
- 4ee835b753 postgres: emit full leading-zero groups when binary-decoding sub-1e-8 NUMERIC (#31211)
- b668561c31 node:fs: move fs.watch's FSWatcher into a lazily loaded internal module (#31428)
- db928c2474 node:fs: move watchFile/unwatchFile into a lazily loaded internal module (#31424)
- c89f30d3aa mysql: decode binary YEAR as a 2-byte number instead of column_length bytes (#31437)
- bb14c4e021 TextDecoder: keep the codec alive across streaming chunks for legacy multi-byte encodings (#31438)
- 13bbb38597 Hardening: input validation and bounds tightening across 27 subsystems (round 6) (#31417)
- 2148214d40 Decode Buffer base64/base64url with simdutf's lenient accept-garbage mode (#31423)
- 18b7c95184 Decode Buffer.from(str, 'hex') with Highway SIMD (#31425)
- 99f4679dbb Fix out-of-bounds read in JS highlighter on trailing backslash in
${}(#31435) - f958cbd552 js_parser: restore SIMD block comment skipping via Highway (#31433)
- c78d08ff2e build: enable cross-language LTO on linux aarch64-musl (#31432)
- a6a5614199 docs: clarify trustedDependencies replaces the default allow list (#31027)
- 4c954ab998 build: support cross-compiling Windows (x64 and arm64) from Linux (#31300)
- 19dd34df33 Bun.serve: restore per-request GC memory accounting to fix elevated RSS under HTTP load (#31422)
- cab4feba8e Optimize Buffer.toString('hex'/'base64') for large buffers (#31421)
- 4324120d5d Hold cellLock() when removing or clearing JSC module registry entries (#31407)
- ec68d39014 build: fat Rust bitcode for cross-language LTO on Linux (#31412)
- 0b1e7e507b Optimize TextEncoder.encode: restore SIMD ASCII fast paths lost in the Rust port (#31385)
- 146afa332a js_parser: sanitize auto-generated default export name for digit-named modules (#31403)
- 0974d031ca fetch: run checkServerIdentity before writing the request (#31325)
- 9e6a19ba2e ffi: avoid copying the threadsafe callback wrapper on the calling thread (#31332)
- 29f1f7c5d5 install: gate the exit-callback cache teardown to the main thread (#31376)
- e262c99168 fix(node:module): don't register native helpers as their own constructors (#31393)
- 984bc1e180 css: escape custom pseudo-class/element names when printing (#31404)
- 2cd36bd84a Deepen the lots-of-for-loop fixture so the transpiler stack-overflow tests throw on Windows (#31382)
- cd1ad59994 Hardening: input validation and bounds tightening across 36 subsystems (round 4) (#31339)
- fc268251f5 Speed up FormData multipart serialization (#31379)
- a49b308f29 webcore: free Blob's owned content type on drop (#31358)
- 8e6eefd66a Support cross-compiling macOS binaries from Linux (#31303)
- 705c482b69 test: forward keep-alive requests in proxy.test.ts's mock proxy (#31352)
- 1c6597b8c4 Port Bun.stringWidth to C++ with explicit SIMD (#31351)
- 1950a3a7c5 Fix quadratic hang reporting duplicate-binding parse errors in the transpiler (#31341)
- 7bd0861fc6 shell: don't abort when a glob's directory prefix doesn't exist (#31367)
- 159a4b74d2 Error instead of crashing on deeply nested statements in the transpiler (#31333)
- dedf657ae0 Fix JSX transform panic when a bare
keyprop precedeskeywith a value (#31350) - 0deaf0b0ea Cap ANSI markdown indentation so deeply nested lists render in linear time (#31366)
- 2fbfcb9833 css: bound selector-list expansion when compiling nesting for older targets (#31277)
- 3fa9635265 node:http2: reassemble HEADERS+CONTINUATION before HPACK decoding (#31323)
- 9d5356a686 Fix
await usingexpression printingusingasawait(#31324) - 80df5b17de Parenthesize
asyncwhen it starts a for-of loop initializer (#31326) - 08652f2a76 Print Infinity and negative numeric property keys as computed properties (#31328)
- dd0883d963 css: keep required grouping parens in @container conditions when minifying (#31330)
- 24e94adb96 Fix panic on anonymous export default class with an auto-accessor field (#31331)
- af054d47db node:http2: send GOAWAY frames on stream 0 (#31353)
- 81a811b2ae parser: fix "Scope mismatch while visiting" panic from decorators on dropped class members (#31340)
- 39a8e56467 webcrypto: reject oversized BufferSource inputs instead of aborting (#31356)
- 06b141d659 Error instead of crashing on deeply nested TypeScript types in the transpiler (#31361)
- 49c97de6b3 Restrict crate-internal items to pub(crate) and remove dead code it exposes (#31254)
- f271ddc5d7 deps: update elysia to 1.4.28 (#26654)
- 295026b7b9 Fix exponential backtracking on nested TypeScript infer constraints (#31307)
- 02380d3e14 css: cap
&parent-selector expansion when compiling nesting for older targets (#31276) - d2f274d22d patch: don't panic applying a rename whose destination dir overflows the path buffer (#31306)
- 8dcbb44fe6 Fix CSS color fallback panic for system colors and currentColor in compound values (#31305)
- 5bf4941b9f css: reject
*local names in attribute selectors instead of panicking (#31304) - a8aec3067d Hardening: input validation and bounds tightening across 31 subsystems (round 3) (#31221)
- 5da1ff86de Reject export clauses inside a non-declare TypeScript namespace instead of panicking (#31266)
- 41aa6724d8 Error instead of crashing on deeply nested expressions in the transpiler (#31242)
- 3d5fe5ed0c Compute diagnostic positions incrementally to fix quadratic hang in Bun.JSONC.parse (#31273)
- a207a77d0e css: don't duplicate vendor-prefixed nested rules per ancestor prefix pass (#31270)
- 543f2f9963 css: don't panic on out-of-range @font-palette-values palette indices (#31275)
- aff1bb1a06 Fix quadratic blowup in Bun.markdown on unterminated inline HTML openers (#31271)
- 14b398c802 Fix CSS angle serialization hang on huge radian values (#31280)
- 0179127721 fix(CryptoHasher): don't crash on non-latin1 algorithm names (#31283)
- f161e0311d shell: wrap only component-leading
!when neutralizing glob metachars (#31272) - d110499293 Fix out-of-bounds read in eql_case_insensitive_ascii when the input is longer than the comparand (#31264)
- 52898c8457 Report duplicate declarations for import bindings kept in TypeScript output (#31240)
- 3c92be850a Fix CSS color fallback panic for oklab() in unparsed values (#31269)
- ffd67d847d Don't panic when
export default interfacestarts an expression or labeled statement (#31263) - 8d7c08040c parser: lower
usingin switch cases by wrapping the whole switch (#31262) - c80b71085b Don't emit reserved words as class names when lowering decorated anonymous class expressions (#31265)
- 3aa8a0e6ab css: fix @page selector parsing and printing so minified rules roundtrip (#31259)
- b733df44bc Keep the TS namespace closure argument from colliding with namespace members (#31261)
- aad556182a patch: propagate thrown errors from patchInternals.apply argument parsing (#31268)
- 541620ad84 repl: stop rewriting top-level
thistoexports(#31226) - 5d1d351e9f csrf: add sessionId option to bind tokens to a principal (#31215)
- a90c6575f0 Don't panic on
export default abstractfollowed by a class statement (#31257) - 00e084c09a install: compare trusted dependency names, not just truncated hashes (#31218)
- 816dd1f3c1 toml: surface logged errors on Bun.TOML.parse (#31255)
- fd7c6fe9f8 Fix minified output dropping the space before
in/instanceofafter a leading single-byte operand (#31260) - f8dcf1a8a0 ICU: per-item zstd decompression hook for compressed libicudata (#31200)
- 30c0071208 Fix quadratic blowup in Bun.markdown on unclosed link brackets (#31241)
- d1ed86d119 Fix YAML.stringify emitting invalid anchor names for keys with special characters (#31235)
- 4df6154f09 parser: fix scope underflow panic when a TS contextual keyword starts a larger expression (#31239)
- 10db442886 Fix panic on unterminated template literal after TypeScript type arguments (#31238)
- ef5d92edda yaml: flow-mapping
?/:and JSON-adjacent value (#31203) - a4de1eb47c css: fix exponential backtracking on deeply nested function values (#31243)
- a06a00aea5 crash handler: walk frame pointers seeded from the fault context (#31163)
- 0d84cdd80d spawn: default SpawnOptions stdio to inherit (#31196)
- 586fe49644 Fix unreachable-code panic in semver range parser on dangling '-' chunks (#31234)
- 5b088f766f Reject
exportof a block-scoped function declaration instead of emitting unparseable output (#31237) - 7b34ff6ce5 node:vm: give DONT_CONTEXTIFY sandboxes their own Object.prototype (#31207)
- 3219132505 parser: fix "Scope mismatch while visiting" panic from dropped TypeScript
declarestatements (#31231) - d5ceba6a76 parser: reject for-in/for-of head declarations with invalid initializers (#31236)
- e5db584624 shell: only template-literal glob tokens act as pattern syntax (#31220)
- f7a2e06942 Reject TypeScript
usingdeclarations in ambient contexts instead of panicking (#31230) - b8c19a7b81 patch: don't panic on truncated ---/+++ header lines (#31227)
- 82cf7dcd00 bun:test: fix SIGSEGV when constructing an expect.extend() matcher (#31219)
- e0b291a176 Upgrade WebKit to 39d4ce1f12ea (#31169)
- 346ce0805f yaml: fix explicit mapping key (
?) parsing (#31112) - 74e191b3cb Hardening: input validation and bounds tightening across 28 subsystems (round 2) (#31175)
- e73dbfaa13 Reduce node-http-backpressure test peak memory (#31199)
- dcc0434803 package.json: drop empty-valued script/config entries (Zig parity) (#31012)
- dbdf818124 shell_parser: drop stale capacity==1 debug_assert in parse_atom (#31191)
- 12d77d1ac5 Fix rare concurrent-transpile segfault: mimalloc TLS slot resurrection; restructure the AST allocators (#31177)
- 832edbc700 Don't forward SIGPWR in spawnSync signal handling (#31183)
- 0b20408b65 Hardening: input validation and bounds tightening across 26 subsystems (#31129)
- 753f1c4620 fs: use statfs64 on macOS x86_64 to avoid legacy-layout fallback (#31139)
- 3eb0fda021 FileSink: mark sink done when end() fails during flush (#31135)
- 71b4baa738 lexer: point caret at the backslash for out-of-range \u{...} (#31138)
- 21db682694 clippy: 45 deny lints + fix 2735 violations across workspace (#31116)
- a43a01b3a5 NativeReadableStreamSource: reuse pull-buffer tail across reads instead of rotating every pull (#30593)
- b3d086e26f shell: glob brace-expanded patterns instead of dropping the glob (#30999)
- f5358e2f5d fmt: decode multi-byte code points in the identifier formatter (#30993)
- b91618772f subprocess: list valid signal names in kill() error (#30982)
- 02f9249e43 buffer: preserve high-bit bytes in
buf.write(str, 'ascii')(#31084) - 2f9e77b247 test runner: preserve top-level await across --isolate / --parallel preload (#30888)
- a55a62d597 bake/DevServer: fix dangling watch path in live DirectoryWatchStore::insert (#31106)
- be6a3c55c2 deps: bump mimalloc to 24f9c6b4 (theap-init sentinel fix + dev3 sync) (#31117)
- 32a161f5af bundler: close the main-thread perf gap vs Zig 1.3.14 (#31115)
- 46b2404518 sys: make File and Dir owning RAII handles (#30878)
- 1736dd02a8 yaml: JEF9/02 — trailing indentation at EOF counts as one empty line for Keep (#31109)
- 303e97acd2 yaml: honor block-scalar indent indicator and fix chomping/folding (#31097)
- b96cc3fa1a chore: remove my stale TODO assignments (#30685)
- 6aa692385c build: enable rustc parallel frontend (-Zthreads=8) for local builds (#31096)
- 1d227bfd6b lsan: fix leaks behind BunString::toWTFString / ZigString__toErrorInstance / WTF::fastMalloc suppressions (#31029)
- 5835c6a08b css: move ParserState into error closure instead of cloning (#31053)
- d45fd78ed5 runtime: derive Copy on DiffSegment/NPMClient (cleanup, no alloc change) (#31056)
- dddf19d2b4 jsc: derive Copy on RuntimeTranspilerCache::Metadata (cleanup, no alloc change) (#31061)
- 654d2d9dd7 install/npm: drop redundant Range
.clone() in manifest parse (#31063) - 174a2c9946 fetch: drop redundant Host header re-allocation in fetch_impl (#31066)
- 86f6b727b0 shell: move Arc
into stderr instead of cloning on last use (#31067) - d6cd104e1b shell: move Arc
into stderr redirect slot instead of cloning (#31068) - 1154d7e0df macros: free per-thread SOURCE_CODE_PRINTER on bundler worker teardown (#31069)
- a195f61864 install: borrow trustedDependencies array instead of to_vec in PackageJSONEditor::edit (#31070)
- f17f404762 install: borrow trustedDependencies arena slice instead of to_vec (#31071)
- 4bcd926f4e install: drop redundant Box re-allocation of INIT_CWD key (#31072)
- d1046b790d install: borrow node_path instead of double-boxing in configure_env_for_scripts_run (#31073)
- c23a7eec2e install: drop dead Patch.path field, make Patch Copy (#31075)
- ee48fd4738 test_runner: move RefDataValue instead of cloning at callTestCallback pending-promise path (#31051)
- f24843dc18 install/npm: move single-use Range
instead of cloning in PackageManifest::parse (#31065) - 433c2dcdd9 server: borrow URL via Cow instead of to_vec() in server.fetch(string) (#31062)
- c9c9eab55e jsc: borrow remaining_buf in ArgumentsSlice::init_async instead of cloning (#31042)
- ff4aebf850 resolver: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31043)
- 60c6ceb9d4 jsc: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31044)
- 77f296e492 install: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31045)
- f9992d53df runtime: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31046)
- 7bb71a11aa css: derive Copy on 10 all-Copy-field value types (cleanup, no alloc change) (#31047)
- 776b094a0f install: move catalog_dep.version instead of cloning in enqueue_dependency (#31049)
- c6eaefe03c install: move catalog_dep.version instead of cloning in enqueue override path (#31048)
- 0ee283d301 bake: derive Copy on EncodedPattern/ServerComponents/ReactFastRefresh (cleanup, no alloc change) (#31050)
- 85ac640a82 server: drop host snapshot Vec in H3 request URL assembly (#31057)
- c486ef09c0 js_parser: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31041)
- 6787345800 core/misc: derive Copy on 5 small all-Copy-field types (cleanup, no alloc change) (#31060)
- c37f3c8683 moduleloader: avoid redundant String::clone_latin1 of transpiled output (#31064)
- 2c16e8aa69 shell_parser: derive Copy on SrcAscii/Script/CompoundAtom (cleanup, no alloc change) (#31052)
- 184d0371aa Implement static
import defer(TC39 Stage 3) (#30975) - 3dfca30340 jsc/RuntimeTranspilerCache: drop redundant output_code Box copy in put() (#31054)
- fccb4a9167 bundler: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31040)
- f4e0c388e1 css: drop no-op .into()/.clone() on Copy (clippy cleanup, no alloc change) (#31039)
- e12d4e50f7 fetch: avoid WTFStringImpl clone for canonical statusText (#31038)
- 80a649602d node/types: avoid intermediate Vec in digest('base64') encode (#31037)
- 5deb4cabcd resolver: avoid unconditional deep clone of exports Entry in visit() (#31036)
- 671b74185d paths: derive Copy for fs::Path (cleanup, no alloc change) (#31035)
- f816284bcb perf: React SSR / Bun.serve hot-path optimizations (#30909)
- 303cd282b5 perf: cache thread_id::current() in a #[thread_local] slot (#30971)
- 7e40844762 events: once() rejects instead of throwing for bad signal/options (#30984)
- 4a8a093d73 blob: release the adopted WTF string ref in string-body consumers (#30991)
- 2017304972 resolver: restore package_manager.log after resolve to avoid dangling stack pointer (#31020)
- 2f15816405 node:fs: reset read buffer len before growing on a wrong stat size (#31005)
- fba43af684 Fix effectively every native-code memory leak in Bun (#30875)
- 08f4ab4a11 install: treat an out-of-range package id in bun.lockb as corruption (#31008)
- 2ff6df8a7e semver: widen comparator counter to u32 to avoid debug overflow panic (#31010)
- 73f1f93bc0 shell: echo keeps both newlines for a pure-newline last arg (#30996)
- a3408a2205 parser: drop dead-branch
varwith zero identifiers instead of emittingvar;(#31003) - 05a7a5c1b4 mysql: consume 4 bytes for INT24/MEDIUMINT binary field (#31007)
- 4c8a21b149 lexer: step past unknown byte on TSyntaxError in next_inside_jsx_element (#30969)
- 31ec206600 dev-server: hoist insert_stale out of debug_assert! so it runs in release (#30977)
- b36759fdb9 js_parser/lexer: saturate escape-sequence error offsets to avoid usize underflow (#30895)
- 25ad47bda0 js_parser/lexer: reject JSX numeric entities outside Unicode range (#30961)
- a7dca12852 parser: gate class-static-block branch on is_class (#30967)
- ba15626037 Fix over-deref of
Blob.nameinborrowed_view()(#30955) - c47ec9c4cd Validate Bun.password.hash memoryCost against argon2 minimum (#30964)
- 390e0dc123 Upgrade WebKit to 2b257999 (#30705)
- 9ecb985ad0 Fix FileSink.start() crash when called without path/fd on an open writer (#30953)
- ad68af805f Discourage comments
- b18bf6d1d0 Bump (#30952)
- 80a06a8c02 Add cargo-miri support and fix HiveArray aliasing UB (#30876)
- 035add3ae0 install: reuse existing folder/tarball entry in package.json (#30935)
- 655398c3a6 encoding: fix Vec
->Vec layout UB in fs.readFile utf16le path (#30926) - c7a7579b11 Collapse ThreadPool::init dead generic and fix cpuid cfg gate (#30886)
- 172afa5320 Replace bun assert helpers with Rust builtin assert macros (#30918)
- 945b8946ed perf: bundler & transpiler hot-path optimizations (#30901)
- 112f3055bc refactor: remove unsafe for static strings (#30867)
- e750984db6 cargo fmt
- 880ee8929f Clean up Zig-port phase comments and trivial lint warnings (#30877)
- e520065ebb Harden 36 reachable security findings across runtime, install, parsers, http (#30722)
- f7c692ae9c Fix worker teardown crash from missing dupeRef on synthetic-module specifiers (#30882)
- 8438ff7baa resolver: split the port's module wrapper into files; type the extern-Rust pointers (#30880)
- f85020a32f hooks: deny direct rustfmt, point at cargo fmt --all (#30881)
- 2a3d0e7d29 resolver: keep forward slashes when imports target is a package specifier (#30845)
- 4d443e5402 collections: funnel multi_array_list SoA ops through Col/ColMut primitives (#30726)
- bb1973e485 build: generate bun_core::build_options from Config (#30749)
- 314d044c0a JSON lexer: tokenize
?/*/(/)sodefineauto-quote can recover (#30679) - fe2635b460 ci: replace zig fmt with cargo fmt --all in the format workflow (#30682)
- bbd3e624af bun:ffi: extract embedded shared libraries from bunfs in
dlopen()(#30720) - 428f61eb34 Bun.serve: finish h3/h1 → http3/http1 ServerConfig rename in Rust (#30741)
- 175f62ab15 ffi: cfg-gate local tcc_delete extern to match bun_tcc_sys (#30743)
- 952d337946 jsc: gate CallFrame::describe_frame on debug_assertions (#30742)
- 8093571242 rust: include
target_os = "android"in linux-kernel cfg gates (#30735)