Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
305 commits
Select commit Hold shift + click to select a range
eea2f7d
Remove dead code from runtime/node (nodejs_error_code, IteratorError)…
robobun Aug 3, 2026
aaf5e8a
fetch: hold Body.Locked.readable as a real JSC::Weak so on_abort does…
robobun Aug 3, 2026
e71f6c3
Remove dead code from webcore C++, highway_strings, inspector agents,…
robobun Aug 3, 2026
1dcb0bf
test: prune stale entries from expectations.txt (#36780)
robobun Aug 3, 2026
074656d
ci: harden GitHub Actions workflows (#36778)
Jarred-Sumner Aug 3, 2026
2ed8ed6
Upgrade WebKit to 3722912ff800 (#36794)
robobun Aug 3, 2026
bb6a9d9
Make re-entrant runtime objects &self-only; delete AnyTask (#36571)
Jarred-Sumner Aug 3, 2026
e336819
napi: pass NULL js_callback to call_js when no func supplied (#36845)
robobun Aug 3, 2026
9b99e7c
bundler: propagate namespace requests through chained barrels (#36838)
robobun Aug 3, 2026
1f447a7
Remove dead code from platform/darwin, webcrypto, sqlite, NodeVM, ast…
robobun Aug 3, 2026
529b656
test(cli/run): tighten workspaces.test.ts assertions and run concurre…
robobun Aug 3, 2026
14081e2
test(install): make config-version.test.ts offline and concurrent (#3…
robobun Aug 3, 2026
c126633
Bump libuv: uv_spawn returns an error instead of aborting on AssignPr…
dylan-conway Aug 3, 2026
dca129c
test: deflake tty-reopen-after-stdin-eof under bun test --parallel (S…
robobun Aug 3, 2026
43783ce
build(deps): bump the actions group across 1 directory with 15 update…
dependabot[bot] Aug 3, 2026
55e3461
napi: ToObject-coerce primitives in define_properties/freeze/seal/typ…
robobun Aug 3, 2026
81dac41
napi: symbol description, empty named key, result-on-exception orderi…
robobun Aug 3, 2026
75ef319
Bun.serve: hold a ref for FileResponseStream's queued eof task (#36858)
robobun Aug 3, 2026
6fb3d65
sys(windows): keep FILE_SYNCHRONOUS_IO_NONALERT when opening with O::…
robobun Aug 4, 2026
390e15c
install: enable native binlink redirect on Windows (#36856)
Jarred-Sumner Aug 4, 2026
d6a03fc
timers: reschedule timer when _idleStart is written (#36859)
robobun Aug 4, 2026
c44df8b
bun test: --timings for duration-balanced --shard/--parallel, docs fo…
Jarred-Sumner Aug 4, 2026
0336d04
install: fall back to copyfile when linkat fails with EACCES or EPERM…
robobun Aug 4, 2026
c2f72b3
test(bundler): compile-windows-metadata.test.ts ~25s -> ~15s on Windo…
robobun Aug 4, 2026
6c8b0f8
test/bundler: collapse compile-asset-bunfs.test.ts from 6 full --comp…
robobun Aug 4, 2026
3f7144f
napi: validate node_api_create_external_string args like Node's CHECK…
robobun Aug 4, 2026
5544d69
test(vm): replace network-dependent happy-dom #16277 repro with deter…
robobun Aug 4, 2026
d6302e9
fetch: send the slice's Content-Length when uploading Bun.file().slic…
robobun Aug 4, 2026
87e168f
HTMLRewriter: stream through SinkHandle/SourceHandle; suspend async h…
robobun Aug 4, 2026
5ad56ed
napi: throw ERR_DLOPEN_FAILED for glibc addons on musl instead of seg…
robobun Aug 4, 2026
4d14836
Remove pointless tests
Jarred-Sumner Aug 4, 2026
1b9673e
Remove dead code from resolver, install, event_loop, node_fs, fetch (…
robobun Aug 4, 2026
6e13cb6
sql(postgres): honour PGSSLMODE from the environment (#36840)
robobun Aug 4, 2026
10a986e
redis: reject NaN/undefined seconds in expire() instead of sending EX…
robobun Aug 4, 2026
7fab798
v8: implement CpuProfiler and supporting V8 APIs for @datadog/pprof (…
robobun Aug 4, 2026
d76edcf
js_parser: stop the [x][0] / {f:x}.f folds from changing optional-cha…
robobun Aug 4, 2026
842cffb
js_printer: re-wrap delete of folded import/cjs-export identifier (#3…
robobun Aug 4, 2026
59cab0e
webstreams: native CompressionStream/DecompressionStream/TextEncoderS…
robobun Aug 4, 2026
fbd81f9
napi: napi_reference_ref returns 0 after the referent is collected; n…
robobun Aug 4, 2026
0a14f47
printer: emit \u escapes for BEL/VT when quoting for JSON (#36746)
robobun Aug 4, 2026
2190ef1
Bun.write: don't over-copy or ftruncate a caller-supplied destination…
robobun Aug 4, 2026
83c7055
node:http2: don't kill the process on a malformed HEADERS block sent …
robobun Aug 4, 2026
5d70c96
spawn: resolve relative $PATH entries against the cwd option (#36569)
robobun Aug 4, 2026
af63b8a
Bun.serve: reject Transfer-Encoding lists that name a coding other th…
robobun Aug 4, 2026
b8d9477
Bun.serve: chunk-frame FIFO/pipe file bodies instead of sending Conte…
robobun Aug 4, 2026
dc39774
inspector: keep BunFrontendDevServer/HTTPServer agents alive across r…
robobun Aug 4, 2026
b66764f
Bun.serve: honor requestCert/rejectUnauthorized on per-serverName tls…
Jarred-Sumner Aug 4, 2026
db5b68d
node:dns: throw ERR_INVALID_ARG_TYPE for undefined rrtype in callback…
robobun Aug 4, 2026
ace8f42
node:http2: copy goaway opaqueData before writing over JS-backed sock…
robobun Aug 4, 2026
1bfcb4e
v8: GCProfiler on a JSC HeapObserver, isStringOneByteRepresentation (…
cirospaciari Aug 4, 2026
ccf5efb
bun:test: don't abort when formatting a test.each title value throws …
robobun Aug 4, 2026
6a2c626
node:vm: propagate exceptions from context-option getters instead of …
robobun Aug 4, 2026
52ec9f2
webcore(URL): propagate toString exceptions in revokeObjectURL instea…
robobun Aug 4, 2026
e6c85e1
Remove dead code from webcore events/abort C++, ZigGeneratedCode DOMJ…
robobun Aug 4, 2026
9a95458
ByteStream: re-signal a backpressured RewriterPipe after native-sink …
robobun Aug 4, 2026
a07354a
http/http2: node v26.3.0 compat — HTTP/1 fallback + upgrade handoff, …
cirospaciari Aug 4, 2026
77d79f9
cli: report an error for over-PATH_MAX --cpu-prof-dir / --heap-prof-d…
robobun Aug 4, 2026
6b6fb1a
fetch: cache client TLS sessions for resumption (#36598)
robobun Aug 5, 2026
9e36e9f
test runner: don't panic formatting a FormData whose toJSON is not ca…
robobun Aug 5, 2026
ce1d5b4
Enable Temporal by default (#32978)
robobun Aug 5, 2026
ef32923
Bun.listen: don't let GC collect an unref'd listener that is still li…
robobun Aug 5, 2026
20f9397
node:fs: skip queued watchFile change callbacks once the watcher is c…
robobun Aug 5, 2026
3179434
node:http2: don't hold a thread-local borrow across the padded DATA w…
robobun Aug 5, 2026
d601782
test: pin eager compression coder release when the piped source error…
robobun Aug 5, 2026
1c4cfba
Create sockets with WSA_FLAG_NO_HANDLE_INHERIT on Windows (#36938)
robobun Aug 5, 2026
dec3059
Bun.openInEditor: read options before borrowing the editor context (#…
robobun Aug 5, 2026
2ac192c
node:http2: keep a stream.write() payload stable while transport JS r…
robobun Aug 5, 2026
0f53bd0
fetch: don't double-release the request-stream ref when a native body…
robobun Aug 5, 2026
f32cf86
http(h2/h3): detach the stream before a terminal header-time progress…
robobun Aug 5, 2026
e752497
Bun.serve: write the chunked terminator once when a direct stream clo…
robobun Aug 5, 2026
402263e
node:http2: never split a frame around a JS transport's write callbac…
robobun Aug 5, 2026
b58cd46
Remove dead code from FFI sys crates, bun_core, built-in JS, codegen,…
robobun Aug 5, 2026
1f606e6
Spawn the detached child outside the temp dir in the socket-inherit t…
robobun Aug 5, 2026
4c26d64
bundler: make metafile import paths deterministic and match input key…
robobun Aug 5, 2026
abd7433
Bun.serve: gate the graceful stop() drain promise on open connections…
robobun Aug 5, 2026
3f93daa
install: add install.hoist to disable the isolated linker's hoisted f…
robobun Aug 5, 2026
4fb02aa
Use Bun.TOML.stringify to build bunfig.toml in install tests (#36988)
robobun Aug 5, 2026
7f4acb2
terminal: keep the wrapper alive while a drain dispatch is pending af…
robobun Aug 6, 2026
17d6843
node:crypto: free the async job ctx before invoking the completion ca…
robobun Aug 6, 2026
5fa371a
install: add BUN_DISABLE_SLOW_FILESYSTEM_WARNING, set it in the test …
robobun Aug 6, 2026
618f2f6
TOML.stringify: omit headers for pass-through super-tables (#37009)
robobun Aug 6, 2026
a663772
Bun.JSONC.parse: throw SyntaxError instead of BuildMessage on invalid…
robobun Aug 6, 2026
f4f3844
Sanitize query-string delimiter in isolated store directory names (#3…
robobun Aug 6, 2026
80e6dba
node:net: fix ReferenceError for DEFAULT_IPV*_ADDR on happy-eyeballs …
robobun Aug 6, 2026
a32adeb
Compare Temporal objects by value in Bun.deepEquals and toEqual (#37024)
robobun Aug 6, 2026
15d6710
Fix exception handling in unwrapBoxedPrimitive (#37025)
robobun Aug 6, 2026
be6a334
Suppress the LSan false positive from Temporal's ICU calendar templat…
robobun Aug 6, 2026
a4ad4e0
Make a too-deep TOML import throw a RangeError instead of panicking (…
robobun Aug 6, 2026
7d9f21b
Fix segfault in toHaveReturned matchers when mock.results is tampered…
robobun Aug 6, 2026
9a5e331
Fix abort when using spyOn on a function's prototype property (#37046)
robobun Aug 6, 2026
4273dd9
bundler: fail the build when a module fails to print instead of emitt…
robobun Aug 6, 2026
3ee86ad
node:crypto: fix Certificate spkac validation for KeyObject input (#3…
robobun Aug 6, 2026
8d08b97
Bun.udpSocket, Bun.password: range-check numeric options before ToInt…
robobun Aug 6, 2026
ce03d5f
test(napi): make napi_wrap lifetime collection polls robust to conser…
robobun Aug 6, 2026
1438e38
Fix zlib kMaxLength tests failing when run with other zlib tests in o…
robobun Aug 6, 2026
9530797
Remove dead code from install, event_loop, dns, mysql protocol, C++ b…
robobun Aug 6, 2026
2d1de1e
resolver: resolve "." and ".." specifiers as directories, not sibling…
robobun Aug 6, 2026
0ffabf6
fetch: don't touch the freed request clone when preconnect reuses a p…
robobun Aug 6, 2026
d18ddfc
crypto: fix property attributes of X509Certificate validFromDate/vali…
robobun Aug 6, 2026
7624109
Remove dead peechy schema scaffolding, bun-wasm, and write-only optio…
dylan-conway Aug 6, 2026
cf5ddf7
Fix type-confused write through ReadableStream's private custom sette…
robobun Aug 6, 2026
f503e16
yaml: support cyclic anchors/aliases in Bun.YAML.parse (#37055)
dylan-conway Aug 6, 2026
45be4ac
Fix type confusion assigning onmessage/onerror through a Proxy of glo…
robobun Aug 6, 2026
b3941fc
watcher: stop serving the watchlist's stored fd to --hot reload reads…
robobun Aug 6, 2026
2e99ef1
install: do not redirect an npm: alias dependency to a same-named ali…
robobun Aug 6, 2026
7153411
transpiler: remove write-only ParseResult::input_fd plumbing (#37071)
robobun Aug 6, 2026
2c5c312
strings: route all byte search through highway, deny the paths around…
dylan-conway Aug 6, 2026
6e6aedb
bun:sqlite: fix use-after-free closing a database with FTS5 tables (#…
robobun Aug 6, 2026
aa1e446
terminal: apply setRawMode with TCSANOW, not TCSADRAIN, on the PTY ma…
robobun Aug 6, 2026
b4d632a
socket: don't leave exceptions pending when a connect promise settle …
robobun Aug 6, 2026
3171136
Add Bun.XML (parse/stringify) and an .xml loader (#37048)
dylan-conway Aug 6, 2026
898b169
Fix clippy, rustfmt, Miri, and stale tsconfig references on main (#37…
robobun Aug 7, 2026
5a5f1b8
Bun.plugin: fix segfault when an object loader result's exports gette…
robobun Aug 7, 2026
25d9d4a
Stop disabling transparent huge pages in every process bun spawns (#3…
dylan-conway Aug 7, 2026
6d090a2
serve: JSON payload for the development error page, restoring stack t…
dylan-conway Aug 7, 2026
9b7c272
node:net: let server.unref() release a Windows named-pipe listener (#…
robobun Aug 7, 2026
eba6c07
Bun.serve: close idle connections on graceful stop(), declare closeId…
robobun Aug 7, 2026
c6f3f7d
build: drop the MI_NO_SET_VMA_NAME define mimalloc never read (#37080)
dylan-conway Aug 7, 2026
e3f9e3b
bundler: use React Compiler client mode for the browser graph of full…
robobun Aug 7, 2026
45eda51
process: port Node.js v26.3.0 process compatibility tests and fix the…
cirospaciari Aug 7, 2026
45ee955
HTMLRewriter: fix use-after-free when GC sweeps an abandoned transfor…
robobun Aug 7, 2026
43caaf3
node compat batch: callback-throw dispatch, Assert class + native dee…
cirospaciari Aug 7, 2026
8c5bf69
usockets: stop spinning on a half-open socket whose peer resets behin…
Jarred-Sumner Aug 7, 2026
f493239
v8 shim: keep ReturnValue contents alive across handle scope pops (#3…
robobun Aug 7, 2026
11e3f2b
bun test --parallel: abort the run when a Windows worker dies with a …
robobun Aug 7, 2026
f8b6342
module loader: fix ENAMETOOLONG when importing long data: URLs (#37157)
robobun Aug 7, 2026
392726b
Keep CompressionStream's native coder alive during in-flight off-thre…
robobun Aug 7, 2026
6089d0e
bundler: tree-shake the automatic JSX runtime import when all JSX is …
robobun Aug 8, 2026
742b118
Fix main build: restore PartTag::JsxImport (#37174)
robobun Aug 8, 2026
78da06a
Fix use-after-free in deepEquals when a getter mutates the object mid…
robobun Aug 8, 2026
d5efbd6
Fix use-after-free in Bun.inspect when user code mutates the object m…
robobun Aug 8, 2026
37c4428
node compile cache: create entry files 0600 like Node (#37164)
robobun Aug 8, 2026
f972c28
XML parser: SIMD structural index + tape rows, one-call rows→JS (#37146)
Jarred-Sumner Aug 8, 2026
8676018
shell: free in-flight subprocess stdio when the interpreter is finali…
robobun Aug 8, 2026
3ce0052
ByteStream: take the pending buffer action before signal_drained() in…
robobun Aug 8, 2026
52bf09c
sql(mysql): negotiate MariaDB extended type info so JSON columns pars…
robobun Aug 8, 2026
9d519e8
Worker / worker_threads: WebCore-shaped lifetimes, joined threads, on…
dylan-conway Aug 8, 2026
8ce3c13
test(spawn): wait for background pipe closes before counting fds (#37…
dylan-conway Aug 8, 2026
1147099
node:stream: add missing TypedArrayPrototypeGet* primordials used by …
robobun Aug 8, 2026
ab5b3f2
Throw ERR_STRING_TOO_LONG instead of aborting for 2 GiB to 4 GiB stri…
robobun Aug 8, 2026
4f6b242
bun run --parallel/--sequential: finish a script only after its outpu…
dylan-conway Aug 8, 2026
27b0bf4
Fix clippy and source lint failures on main (#37221)
robobun Aug 8, 2026
d8c1ef5
s3: parse S3's XML responses with the XML parser instead of substring…
Jarred-Sumner Aug 9, 2026
2db9afc
Bun.openInEditor: throw when no editor is found instead of spawning "…
dylan-conway Aug 9, 2026
9554a36
fs.Utf8Stream: don't emit 'drain' after reopen while a write is in fl…
dylan-conway Aug 9, 2026
b6482a6
docs: replace stray control character in installation page Linux note…
robobun Aug 9, 2026
5938918
resolver: auto-resolve extensions for wildcard exports/imports target…
robobun Aug 9, 2026
0c35ccc
napi: keep async cleanup hook handles alive until the addon removes t…
robobun Aug 9, 2026
9008ae7
napi: fix dropped writes through data pointers for small typed arrays…
robobun Aug 9, 2026
d2f48c6
Blob file reads: a read its worker never completes releases its compl…
dylan-conway Aug 9, 2026
93217e1
docs: reorder XML page, usage first, trim performance section (#37279)
robobun Aug 9, 2026
cbc209f
Fix wild free when a terminated worker drops a zero-length fs.readFil…
robobun Aug 9, 2026
01dc506
bun run --parallel/--sequential: do not wait for pipe EOF after the s…
robobun Aug 9, 2026
6a50e86
resolver: lock DirEntry map probes against the in-place stale-generat…
robobun Aug 9, 2026
fb84417
Fix quadratic backlog drain in bun test --parallel IPC (#37291)
robobun Aug 9, 2026
5458f37
test(http): deflake the graceful-stop drain tests on darwin (#37141)
robobun Aug 9, 2026
2dd1e97
deps: update c-ares to v1.34.8 (#34007)
github-actions[bot] Aug 9, 2026
bc82018
node:http2: arm the dispatch guard around the streamStart callback (#…
robobun Aug 9, 2026
e84f710
Bump WebKit to 447082ab6897: conservative scan accepts no past-the-en…
dylan-conway Aug 10, 2026
827475e
test(security-scanner-matrix): don't depend on the setup install's ma…
dylan-conway Aug 10, 2026
23d233b
process: register the default 'warning' listener at process creation,…
cirospaciari Aug 10, 2026
5effdb2
ci: run darwin tests on Buildkite-hosted agents while the mac fleet i…
alii Aug 11, 2026
c63dc64
ci: restore the darwin test lanes so they run on the hosted queue (#3…
alii Aug 11, 2026
81cfca9
ci: shard darwin tests 10-wide while they run on hosted agents (#37369)
alii Aug 11, 2026
9fcdea8
standalone: env var to disable the post-load madvise of embedded sour…
cirospaciari Aug 11, 2026
d1b5b7d
test(bundler): compile each outfile case in its own test (#37417)
robobun Aug 11, 2026
792ebab
streams: remove NetworkSink's write-only cancel flag and unreachable …
robobun Aug 11, 2026
a0d17c1
bundler: drop the unread payload of the metafile JsonValue::Float (#3…
robobun Aug 11, 2026
886dba4
bun test --parallel: distinguish --bail from a worker panic when reap…
robobun Aug 11, 2026
cd15fba
shell rm: replace RemoveFileVTable's correlated bool and Option with …
robobun Aug 11, 2026
e75e117
streams: drop dead ended = false in NetworkSink and FetchRequestBodyS…
robobun Aug 11, 2026
81ff1a1
cron: remove the Done and Failed states of RegisterState and RemoveSt…
robobun Aug 11, 2026
218f98e
xml: collapse Step::Done and Step::Continue into one variant (#37409)
robobun Aug 11, 2026
b053c20
node:dns: use the system resolver for dns.lookup (#37383)
robobun Aug 11, 2026
4bfd7d8
build: stop the configure-time rustc probe from installing rust-toolc…
robobun Aug 11, 2026
aef109a
node:crypto: make RandomFillJob an enum of its two fill modes (#37403)
robobun Aug 11, 2026
b2fc659
http: clear the request stream drain callback under the buffer mutex …
robobun Aug 11, 2026
54d6d16
yaml: stop collecting directives the parser never reads (#37408)
robobun Aug 11, 2026
da3851e
fetch: pool the redirecting connection when the request went out in o…
robobun Aug 11, 2026
020e2fe
tls: stop SSLWrapper from decrypting re-entrantly inside its own call…
robobun Aug 11, 2026
97e21e5
spawn: add a `cgroup` option (Linux) (#37466)
Jarred-Sumner Aug 11, 2026
108e412
node:http2: add the goawayCode and goawayLastStreamID session getters…
robobun Aug 11, 2026
2d6bc9b
blob: make the Blob__ref/Blob__deref refcount exports unsafe fns (#37…
robobun Aug 11, 2026
ce5960a
install: hold TarballStream archive as Option<ReadArchive> (#37617)
robobun Aug 11, 2026
e592637
node:http2: send array-valued pushStream() headers as one field per e…
robobun Aug 11, 2026
d9e2751
websocket: enter tunnel forwarding mode before dispatching open (#37610)
robobun Aug 11, 2026
00da4dc
dns: carry c-ares reply ownership in OwnedReply<T> (#37602)
robobun Aug 11, 2026
36312b5
fs: short write in createWriteStream overwrites head of file (NaN pos…
robobun Aug 11, 2026
4193195
Discard infallible write results with `let _ =` instead of `.ok();` (…
alii Aug 11, 2026
956746d
mysql: make DateTime's fields private to the module that range-checks…
alii Aug 11, 2026
64c972f
strings: carry RawSlice<u8> in ZigStringSlice borrowed variants (#37560)
robobun Aug 11, 2026
b0fdcec
AsyncModule: update resolve_error comment after the .ok() rewrite (#3…
robobun Aug 11, 2026
2716e9d
cli: hold PackageFilterIterator's walk as Option<ActiveWalk> (#37623)
robobun Aug 11, 2026
6e75ae3
encoding: take slices in write_u8/byte_length_u8/construct_from_* (#3…
robobun Aug 11, 2026
f38671e
Deduplicate webcore blob, sink, and S3 helpers (#32024)
alii Aug 11, 2026
c6774a4
bundler: do not record tree-shaken imports in the bytecode ESM module…
robobun Aug 11, 2026
f598766
bun_jsc: hold a non-optional Strong in JsRef::Strong (#37634)
robobun Aug 11, 2026
ce67711
fetch: do not pool HTTP/1.0 responses unless they say Connection: kee…
robobun Aug 11, 2026
ee86e41
Remove dead code from shell, bake dev server, sql, install, cli, css,…
robobun Aug 11, 2026
e39e826
picohttp: carry Response.bytes_read as usize (#37643)
alii Aug 11, 2026
6172d63
Make constructor-checked fields private where nothing outside their m…
alii Aug 11, 2026
3fc747a
sourcemap: Builder<'a> borrows its line-offset table (#37627)
robobun Aug 11, 2026
83ad764
html_rewriter: count RewriterPipe owners with CellRefCounted (#37564)
robobun Aug 11, 2026
0e5d9df
Read Request's abort signal and JSArrayIterator's fast path through a…
alii Aug 11, 2026
1d28cc4
bundler: collapse ParseTask ctx/completion_ctx into one ParentRef (#3…
robobun Aug 11, 2026
e96f29c
sql/mysql: replace ExecuteParams c_void hooks with ExecuteParam trait…
robobun Aug 11, 2026
d3e7fd5
test_runner: make Snapshots own its buffers and drop its lifetime (#3…
robobun Aug 11, 2026
8841376
bundler: HTML loader reads chunks via &[Chunk], not *mut [Chunk] (#37…
robobun Aug 11, 2026
fe4b3d6
dotenv: replace placeholder Source slots with EnumSet<DefaultEnvFile>…
robobun Aug 11, 2026
488dabe
server: replace upgrade_context pointer sentinel with UpgradeState en…
robobun Aug 11, 2026
1b05c85
install: PatchTask::new_* return Box; enqueue_patch_task takes the Bo…
robobun Aug 11, 2026
56f7772
jsc: make SavedSourceMap own its hash table (#37506)
robobun Aug 11, 2026
0826514
Bump WebKit to 3997b59485da (#37352)
alii Aug 11, 2026
b49c971
io: make KEventWaker::wake take &self like the Linux and Windows wake…
alii Aug 12, 2026
ae33ace
bake: own StaticRoute and HTMLBundleRoute refs via Drop types (#37517)
robobun Aug 12, 2026
aa9a59f
usockets: follow the whole adopted-socket chain when re-deriving the …
robobun Aug 12, 2026
6065162
node:fs: bound write()'s offset by the buffer even when no length fol…
alii Aug 12, 2026
99f16a8
blob: hand the read handler's pointer to on_read_bytes instead of &mu…
robobun Aug 12, 2026
d8e3e19
Stop running builtin modules' lazy accessors when they are imported a…
robobun Aug 12, 2026
e7abdf7
ci: run darwin tests on the test-darwin fleet again, for every PR (#3…
alii Aug 12, 2026
3c87727
ci: stop the test/ install from downloading Chrome into the agent's c…
robobun Aug 12, 2026
0825a8b
usockets(tls): park writes issued while the SSL is in use; guard SSL_…
robobun Aug 12, 2026
8c7ed92
streams: deliver a direct stream's post-flush bytes to pipeTo/tee/for…
robobun Aug 12, 2026
fd1ea1b
fetch: pool an https-proxy tunnel in the TLS context its socket was o…
robobun Aug 12, 2026
6596bf1
Declare the "bun" module's ESM exports lazily instead of reifying the…
robobun Aug 12, 2026
3e61ab3
ci(darwin tart): export RUSTUP_HOME/CARGO_HOME in the guest job envir…
robobun Aug 12, 2026
e5752bb
build: put -glldb before the -g level flags so release C++ gets line …
robobun Aug 12, 2026
8d10147
build: home type debug info in debug builds instead of re-emitting it…
robobun Aug 12, 2026
f59f705
node:http2: fix stream id overflow in setNextStreamID and nextStreamI…
robobun Aug 12, 2026
2ffb8d4
Declare node:process and node:module ESM exports lazily as well (#37726)
robobun Aug 12, 2026
1adeb97
run: stack-local Run<'a> replaces the RUN static (#37662)
robobun Aug 12, 2026
a0782cd
bundler: build the ESM bytecode module record from what the printer e…
robobun Aug 12, 2026
6e201b6
build: 16 codegen units for the asan cargo build (#37760)
Jarred-Sumner Aug 12, 2026
9518091
ci: build C++, Rust and link in one build-bun step instead of build-c…
Jarred-Sumner Aug 12, 2026
c83326e
JSSink: pass the sink to finalize as *mut instead of &mut (#37716)
robobun Aug 12, 2026
722f250
node:dns: handle IPv4-mapped IPv6 addresses in lookupService (#37490)
robobun Aug 12, 2026
a8c807f
install: don't resolve a bundled dependency's optional peer past the …
robobun Aug 12, 2026
65baeda
node:dns: treat null lookup option fields as unset (#37319)
robobun Aug 12, 2026
626034f
cluster: port Node's cluster and child_process handle-passing suites …
cirospaciari Aug 12, 2026
9a543cc
Bun.serve: don't serve sourcemaps for HTML routes in production (#36982)
robobun Aug 12, 2026
315136d
install: honor --recursive/--filter in non-interactive bun update; re…
robobun Aug 12, 2026
a5ca1cd
build: retry dep downloads for ~3 minutes and report the underlying f…
robobun Aug 12, 2026
7f1ae4e
AbortSignal.timeout: cancel the signal's timer when the heap discards…
robobun Aug 12, 2026
6e047ff
AbortSignal.timeout: keep the timer armed when the signal loses its o…
robobun Aug 12, 2026
2055fe9
http: release h2/h3 sessions and proxy tunnels through their holders'…
robobun Aug 12, 2026
a63b064
install: fix git dependencies that share one repository (#35426)
robobun Aug 12, 2026
165dc9f
Robustness and input-handling pass across install, shell, TLS/QUIC, H…
Jarred-Sumner Aug 12, 2026
f426a8e
h2: move header-block assembly state into Option<HeaderBlockInFlight>…
robobun Aug 12, 2026
4b15a09
Merge origin/main into farm/a434bba6/bundler-resolve-bindings-native-…
robobun Aug 13, 2026
5fee0de
bundler: rewrite require('bindings') in the parser only for server ta…
robobun Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .aikido
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ exclude:
- bench
- packages/bun-lambda
- packages/bun-release
- packages/bun-wasm
- packages/bun-vscode
- packages/bun-plugin-yaml
- packages/bun-plugin-svelte
Expand Down
75 changes: 21 additions & 54 deletions .buildkite/ci.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,8 @@ const testPlatforms = [
// lanes — see buildPlatforms).
{ os: "darwin", arch: "aarch64", release: "26", tier: "latest" },
{ os: "darwin", arch: "aarch64", release: "14", tier: "previous" },
{ os: "darwin", arch: "x64", release: "14", tier: "latest" },
// x64 is off until enough Intel test agents are back on the queue.
// { os: "darwin", arch: "x64", release: "14", tier: "latest" },
{ os: "linux", arch: "aarch64", distro: "debian", release: "13", tier: "latest" },
{ os: "linux", arch: "x64", distro: "debian", release: "13", tier: "latest" },
{ os: "linux", arch: "x64", profile: "asan", distro: "debian", release: "13", tier: "latest" },
Expand Down Expand Up @@ -375,26 +376,17 @@ function getEc2Agent(platform, options, ec2Options) {
* @param {PipelineOptions} options
* @returns {string}
*/
function getCppAgent(platform, options) {
function getBuildAgent(platform, options) {
// Every build lane runs on the single debian-13 aarch64 host image
// (buildHostPlatform) and cross-compiles to its target; the target's
// os/arch only affect build args, not agent tags or image-name.
const { os, arch, abi, profile } = platform;
// Lanes without LTO (see ltoDefault in scripts/build/config.ts): rustc does its own fat LTO + codegen inside cargo, so the C++ compile overlapping it costs ~20s on 16 vCPUs; give them 32.
const nonLto =
profile === "asan" || abi === "android" || os === "freebsd" || (os === "windows" && arch === "aarch64");
return getEc2Agent(buildHostPlatform, options, {
instanceType: "c8g.4xlarge",
});
}

/**
* @param {Platform} platform
* @param {PipelineOptions} options
* @returns {string}
*/
function getLinkBunAgent(platform, options) {
return getEc2Agent(buildHostPlatform, options, {
// rust-and-link runs cargo (~200 crates) then ThinLTO-links the full graph
// on one box; r8g.xlarge is too tight. ASAN's -Zbuild-std cargo pass
// doubles the IR, so size that lane for cores.
instanceType: platform.profile === "asan" ? "r8g.4xlarge" : "r8g.2xlarge",
// Replaces the c8g.4xlarge (C++) + r8g.2xlarge (cargo + ThinLTO link; r8g.4xlarge for asan) pair.
instanceType: nonLto ? "r8g.8xlarge" : "r8g.4xlarge",
});
}

Expand Down Expand Up @@ -469,7 +461,7 @@ function getTestAgent(platform, options) {
*
* @param {Target} target
* @param {PipelineOptions} options
* @param {"cpp-only" | "rust-only" | "link-only" | "rust-and-link"} mode
* @param {"build" | "cpp-only" | "rust-only" | "link-only" | "rust-and-link"} mode
* @returns {string}
*/
function getBuildArgs(target, options, mode) {
Expand Down Expand Up @@ -498,7 +490,7 @@ function getBuildArgs(target, options, mode) {
/**
* @param {Target} target
* @param {PipelineOptions} options
* @param {"cpp-only" | "rust-only" | "link-only" | "rust-and-link"} mode
* @param {"build" | "cpp-only" | "rust-only" | "link-only" | "rust-and-link"} mode
* @returns {string}
*/
function getBuildCommand(target, options, mode) {
Expand All @@ -515,11 +507,13 @@ function getBuildCommand(target, options, mode) {
}

/**
* deps + C++ + cargo + link on one agent; also uploads libbun-*.a, libbun_rust.a and the dep libs.
*
* @param {Platform} platform
* @param {PipelineOptions} options
* @returns {Step}
*/
function getBuildCppStep(platform, options) {
function getBuildBunStep(platform, options) {
const { os, arch } = platform;
// BoringSSL's win-x64 assembly is NASM syntax. The agent images bake nasm
// (.buildkite/Dockerfile); best-effort install covers older images, and
Expand All @@ -531,35 +525,10 @@ function getBuildCppStep(platform, options) {
"which nasm || (apt-get update -qq && apt-get install -y -qq nasm) || dnf install -y -q nasm || yum install -y -q nasm || true",
]
: [];
return {
key: `${getTargetKey(platform)}-build-cpp`,
label: `${getTargetLabel(platform)} - build-cpp`,
agents: getCppAgent(platform, options),
retry: getRetry(),
cancel_on_build_failing: isMergeQueue(),
// cpp-only builds deps + bun's C++ in one ninja graph (ninja pulls
// everything the archive transitively needs). The old two-command
// split (--target bun, --target dependencies) was a cmake artifact.
command: [...nasmSetup, getBuildCommand(platform, options, "cpp-only")],
};
}

/**
* cargo build + link on one agent. Runs in parallel with build-cpp (no
* depends_on); the build script runs `ninja bun-rust` first, then polls
* `buildkite-agent step get outcome` for `<target>-build-cpp`, downloads
* its archive, and links. Key is `-build-bun` (it produces the final zip)
* so test/release/verify-baseline/binary-size depends_on stay unchanged.
*
* @param {Platform} platform
* @param {PipelineOptions} options
* @returns {Step}
*/
function getBuildBunStep(platform, options) {
return {
key: `${getTargetKey(platform)}-build-bun`,
label: `${getTargetLabel(platform)} - build-bun`,
agents: getLinkBunAgent(platform, options),
agents: getBuildAgent(platform, options),
retry: getRetry(),
cancel_on_build_failing: isMergeQueue(),
timeout_in_minutes: 60,
Expand All @@ -568,7 +537,7 @@ function getBuildBunStep(platform, options) {
// linked binary's startup during the smoke test.
ASAN_OPTIONS: "allow_user_segv_handler=1:disable_coredump=0:detect_leaks=0",
},
command: getBuildCommand(platform, options, "rust-and-link"),
command: [...nasmSetup, getBuildCommand(platform, options, "build")],
};
}

Expand Down Expand Up @@ -1471,7 +1440,7 @@ async function getPipeline(options = {}) {
}

const { buildPlatforms = [], testPlatforms = [], buildImages, publishImages, imageFilter } = options;
// Every build lane runs on buildHostPlatform (see getCppAgent/getLinkBunAgent),
// Every build lane runs on buildHostPlatform (see getBuildAgent),
// so the build-image set is exactly {buildHostPlatform} ∪ testPlatforms' native
// images — buildPlatforms entries encode TARGET os/arch/abi, not a host image.
const imagePlatforms = new Map(
Expand Down Expand Up @@ -1519,22 +1488,20 @@ async function getPipeline(options = {}) {

steps.push(
...relevantBuildPlatforms.map(target => {
// build-cpp/build-bun always run on buildHostPlatform regardless of
// build-bun always runs on buildHostPlatform regardless of
// target, so the only build-image dependency is the host's.
const imageKey = getImageKey(buildHostPlatform);
const dependsOn = [];
if (imagePlatforms.has(imageKey)) {
dependsOn.push(`${imageKey}-build-image`);
}

const steps = [];
steps.push(getBuildCppStep(target, options));
steps.push(getBuildBunStep(target, options));
const steps = [getBuildBunStep(target, options)];

if (needsBaselineVerification(target)) {
// verify-baseline runs on a per-target-arch native host (see
// getVerifyBaselineHost), not buildHostPlatform; its image dep goes
// on the step itself so build-cpp/build-bun don't wait for it.
// on the step itself so build-bun doesn't wait for it.
const verifyImageKey = getImageKey(getVerifyBaselineHost(target));
const verifyDeps =
verifyImageKey !== imageKey && imagePlatforms.has(verifyImageKey) ? [`${verifyImageKey}-build-image`] : [];
Expand All @@ -1553,7 +1520,7 @@ async function getPipeline(options = {}) {
);
if (traceOn && (isMainBranch() || /\[generate symbol order\]/i.test(getCommitMessage()))) {
// The trace host's image, same as verify-baseline: on the step, so
// build-cpp/build-bun don't wait for it. Darwin has no cloud image.
// build-bun doesn't wait for it. Darwin has no cloud image.
const traceImageKey = getImageKey(traceOn.on);
const traceDeps =
traceImageKey !== imageKey && imagePlatforms.has(traceImageKey) ? [`${traceImageKey}-build-image`] : [];
Expand Down
4 changes: 2 additions & 2 deletions .claude/commands/upgrade-nodejs.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ Bun reports a Node.js version for compatibility with the Node.js ecosystem. This
- Update `Bun__versions_v8` with the V8 version (find using command below)

### 4. N-API Version
- `src/napi/js_native_api.h`
- Update `NAPI_VERSION` define (check Node.js release notes)
- `src/runtime/napi/js_native_api_types.h`
- Update `NAPI_VERSION` define (check Node.js release notes; see `src/runtime/napi/README.md` for the header resync procedure)

## Files That May Need Updates

Expand Down
2 changes: 2 additions & 0 deletions .claude/skills/verify/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ For worker/subprocess-shaped changes, spawn a subprocess (still `-e`) so worker
formula shadows the pinned nightly, and `bun bd` dies with `the option 'Z' is only
accepted on the nightly compiler`. `bun bd` re-runs cargo on every invocation, so
this is needed for follow-up runs too, not just the first build.
- `node:cluster` changes can't be driven with `-e`: `cluster.fork()` re-execs `argv[1]`, so workers need a real file on disk. Write a scratch script and run `./build/debug/bun-debug <file>`.
- Only one `bun bd` per worktree at a time — a second one blocks on the build lock and looks like a runtime hang. Build once, then drive `./build/debug/bun-debug` directly under `timeout`.
- `BUN_DEBUG_QUIET_LOGS=1` suppresses debug-build log spam.
- Debug builds print `[cachefs]`/`[sys]` lines to stdout; filter them before diffing
output against `node`.
Expand Down
9 changes: 7 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,15 @@

*.lockb binary diff=lockb

# XML loader fixtures in specific byte encodings (BOMs, UTF-16, ISO-8859-1);
# any newline or encoding normalization would change what they test.
test/js/bun/resolve/xml/xml-utf16le-bom.xml -text
test/js/bun/resolve/xml/xml-utf16be-bom.xml -text
test/js/bun/resolve/xml/xml-utf8-bom.xml -text
test/js/bun/resolve/xml/xml-latin1.xml -text

.vscode/launch.json linguist-generated
src/api/schema.d.ts linguist-generated
fixture.*.c linguist-generated
src/api/schema.js linguist-generated
*-fixture* linguist-generated
src/jsc/bindings/ZigGeneratedCode.h linguist-generated
src/jsc/bindings/ZigGeneratedCode.cpp linguist-generated
Expand Down
42 changes: 0 additions & 42 deletions .github/actions/bump/action.yml

This file was deleted.

24 changes: 14 additions & 10 deletions .github/actions/setup-bun/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ runs:
steps:
- name: Setup Bun
shell: bash
env:
BUN_VERSION: ${{ inputs.bun-version }}
BUN_BASELINE: ${{ inputs.baseline }}
BUN_DOWNLOAD_URL: ${{ inputs.download-url }}
run: |
case "$(uname -s)" in
Linux*) os=linux;;
Expand All @@ -33,19 +37,19 @@ runs:
arm64 | aarch64) arch=aarch64;;
*) arch=x64;;
esac
case "${{ inputs.baseline }}" in
case "$BUN_BASELINE" in
true | 1) target="bun-${os}-${arch}-baseline";;
*) target="bun-${os}-${arch}";;
esac
case "${{ inputs.bun-version }}" in
case "$BUN_VERSION" in
latest) release="latest";;
canary) release="canary";;
*) release="bun-v${{ inputs.bun-version }}";;
*) release="bun-v${BUN_VERSION}";;
esac
curl -LO "${{ inputs.download-url }}/${release}/${target}.zip" --retry 5
unzip ${target}.zip
mkdir -p ${{ runner.temp }}/.bun/bin
mv ${target}/bun* ${{ runner.temp }}/.bun/bin/
chmod +x ${{ runner.temp }}/.bun/bin/*
ln -fs ${{ runner.temp }}/.bun/bin/bun ${{ runner.temp }}/.bun/bin/bunx
echo "${{ runner.temp }}/.bun/bin" >> ${GITHUB_PATH}
curl -LO "${BUN_DOWNLOAD_URL}/${release}/${target}.zip" --retry 5
unzip "${target}.zip"
mkdir -p "$RUNNER_TEMP/.bun/bin"
mv "${target}"/bun* "$RUNNER_TEMP/.bun/bin/"
chmod +x "$RUNNER_TEMP"/.bun/bin/*
ln -fs "$RUNNER_TEMP/.bun/bin/bun" "$RUNNER_TEMP/.bun/bin/bunx"
echo "$RUNNER_TEMP/.bun/bin" >> "$GITHUB_PATH"
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2
updates:
- package-ecosystem: github-actions
directories:
- /
- /.github/actions/*
schedule:
interval: weekly
cooldown:
default-days: 7
groups:
actions:
patterns: ["*"]
4 changes: 2 additions & 2 deletions .github/workflows/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The `format.yml` workflow runs code formatters (Prettier, clang-format, and `car

**Important exclusions**:

- `src/napi/` - Node API headers (third-party)
- `src/runtime/napi/` - Node API headers (third-party)
- `src/jsc/bindings/libuv/` - libuv headers (third-party)
- `src/jsc/bindings/sqlite/` - SQLite headers (third-party)
- `src/runtime/ffi/ffi-*.h` - FFI headers (generated/third-party)
Expand Down Expand Up @@ -55,7 +55,7 @@ The workflow runs all three formatters simultaneously:

1. Bump `channel` in `rust-toolchain.toml` (and `Dockerfile`/`bootstrap.sh` to match).
2. Bump `RUSTUP_TOOLCHAIN` in the `Format Code` step's `env:` block in `format.yml` to the same value.
3. Bump `RUSTUP_TOOLCHAIN` in the workflow-level `env:` block in `clippy.yml` and `miri.yml` to the same value.
3. Bump `RUSTUP_TOOLCHAIN` in the workflow-level `env:` block in `clippy.yml`, `miri.yml`, and `lolhtml.yml` to the same value.
4. `cargo fmt` formatting can change between nightlies; run `cargo fmt --all` locally on the new toolchain and include the resulting diff in the same PR.

#### To update clang-format version:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/auto-assign-types.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
name: Auto Assign Types Issues

permissions:
contents: read

on:
issues:
types: [labeled]
Expand All @@ -15,5 +18,6 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
ISSUE: ${{ github.event.issue.number }}
run: |
gh issue edit ${{ github.event.issue.number }} --add-assignee alii
gh issue edit "$ISSUE" --add-assignee alii
7 changes: 6 additions & 1 deletion .github/workflows/auto-close-duplicates.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
name: Auto-close duplicate issues
permissions:
contents: read

on:
schedule:
- cron: "0 9 * * *"
Expand All @@ -17,7 +20,9 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup Bun
uses: ./.github/actions/setup-bun
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/auto-label-claude-prs.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
name: Auto-label Claude PRs

permissions:
contents: read

on:
pull_request:
types: [opened]
Expand All @@ -13,7 +16,7 @@ jobs:
pull-requests: write
steps:
- name: Add claude label to PRs from robobun
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
github.rest.issues.addLabels({
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/bun-types.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Bun
uses: ./.github/actions/setup-bun
with:
Expand Down
Loading
Loading