git: fec1cd2f9bec - main - lang/bun: update to 1.4.2

From: Oleksii Samorukov <samm_at_FreeBSD.org>
Date: Mon, 19 Oct 2026 20:19:56 UTC
The branch main has been updated by samm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=fec1cd2f9becf00e9a51d099ee21c808906c2dbe

commit fec1cd2f9becf00e9a51d099ee21c808906c2dbe
Author:     Oleksii Samorukov <samm@FreeBSD.org>
AuthorDate: 2026-10-19 20:16:58 +0000
Commit:     Oleksii Samorukov <samm@FreeBSD.org>
CommitDate: 2026-10-19 20:16:58 +0000

    lang/bun: update to 1.4.2
    
    Update to 1.4.2 and rework the port for the upstream Rust build system.
    Use lang/rust-nightly-bun instead of the moving lang/rust-nightly, add
    aarch64 support, keep the patched WebKit fork, and drop the old Zig /
    sysroot / prebuilt-binary machinery.
    
    PR: 299115
    Pull Request: https://github.com/freebsd/freebsd-ports/pull/644
---
 lang/bun/Makefile                                  |  527 ++---
 lang/bun/Makefile.crates                           |  222 ++
 lang/bun/distinfo                                  |  494 ++++-
 .../files/bun-boringssl-disable-avx512-gcm.patch   |   89 -
 .../bun-libdeflate-adler32-disable-avx2.patch      |   28 -
 .../files/bun-libdeflate-crc32-disable-avx.patch   |   18 -
 lang/bun/files/package-lock-bun-error.json         |   26 -
 lang/bun/files/package-lock-node-fallbacks.json    | 2028 ------------------
 lang/bun/files/package-lock.json                   | 2217 --------------------
 lang/bun/files/patch-build.zig                     |   42 -
 lang/bun/files/patch-scripts_build.ts              |   23 -
 lang/bun/files/patch-scripts_build_codegen.ts      |   17 -
 lang/bun/files/patch-scripts_build_config.ts       |   75 -
 .../files/patch-scripts_build_depVersionsHeader.ts |   13 -
 .../files/patch-scripts_build_deps_boringssl.ts    |   50 -
 .../files/patch-scripts_build_deps_libdeflate.ts   |   49 -
 lang/bun/files/patch-scripts_build_deps_libwebp.ts |   47 -
 lang/bun/files/patch-scripts_build_deps_lolhtml.ts |   22 -
 lang/bun/files/patch-scripts_build_deps_webkit.ts  |   15 -
 lang/bun/files/patch-scripts_build_deps_zlib.ts    |   21 -
 lang/bun/files/patch-scripts_build_deps_zstd.ts    |   22 -
 lang/bun/files/patch-scripts_build_flags.ts        |   28 -
 lang/bun/files/patch-scripts_build_tools.ts        |   13 +-
 lang/bun/files/patch-scripts_build_zig.ts          |   26 -
 lang/bun/files/patch-src_codegen_bake-codegen.ts   |   48 -
 lang/bun/files/patch-src_codegen_bundle-modules.ts |   32 -
 lang/bun/files/patch-src_collections_lib.rs        |   13 +
 .../patch-src_collections_multi_array_list.rs      |  200 ++
 ...src_jsc_bindings_BunAnalyzeTranspiledModule.cpp |   13 -
 .../patch-src_jsc_bindings_BunCPUProfiler.cpp      |   40 -
 .../bun/files/patch-src_jsc_bindings_BunObject.cpp |   13 -
 .../files/patch-src_jsc_bindings_BunProcess.cpp    |   18 +
 ...tch-src_jsc_bindings_NodeVMSourceTextModule.cpp |   22 -
 lang/bun/files/patch-src_jsc_bindings_bindings.cpp |   13 -
 lang/bun/files/patch-src_runtime_cli_mod.rs        |   15 +
 ...tion_next-pages_test_dev-server-ssr-100.test.ts |   39 -
 ...h-test_js_web_console_console-log-utf16.test.ts |   18 -
 .../patch-test_regression_issue_10132.test.ts      |   32 -
 .../patch-test_regression_issue_18547.test.ts      |   13 -
 ...patch-test_regression_issue_20144_20144.test.ts |   13 -
 .../patch-test_regression_issue_24314.test.ts      |   37 -
 41 files changed, 1183 insertions(+), 5508 deletions(-)

diff --git a/lang/bun/Makefile b/lang/bun/Makefile
index 8580fe1759ee..f0c4699f2267 100644
--- a/lang/bun/Makefile
+++ b/lang/bun/Makefile
@@ -1,338 +1,277 @@
 PORTNAME=	bun
 DISTVERSIONPREFIX=	bun-v
-DISTVERSION=	1.3.14
-PORTREVISION=	6
+DISTVERSION=	1.4.2
 CATEGORIES=	lang
+
+LLVM_VER=	21
+NODE_VERSION=	26.3.0
+# samm-git/WebKit release = bun's pinned commit (2e2aa2290fac856d) + the FreeBSD
+# membarrier fix.  bun keys its prebuilt cache/identity by the commit *it* pins,
+# so WEBKIT_COMMIT/WEBKIT_SHORT use that, not the fork's WEBKIT_VERSION.
+WEBKIT_VERSION=	808354a3cce576c0c9ac20ece440fee481e8737d
+WEBKIT_COMMIT=	2e2aa2290fac856d6f451ceacb58f7f5b44dd057
+WEBKIT_SHORT=	2e2aa2290fac856d
+# Full sha: bun's build const-slices it and the source tarball has no .git.
+BUN_GIT_SHA=	744846f844374847c902b5e7fd59b4342a51ef99
+
+# bun needs a Rust nightly: its source uses unstable `#![feature(...)]`s (stable
+# rustc fails E0554) and the release profile passes -Zbuild-std (which needs
+# rust-src).  lang/rust-nightly is a moving target and its updates have broken
+# bun's type_info reflection patches, so depend on the pinned binary toolchain
+# in lang/rust-nightly-bun instead.  Bumping that port is a deliberate change:
+# re-sync src/collections/multi_array_list.rs from bun main, regenerate
+# patch-src_collections_{multi_array_list,lib}.rs, update RUSTC_TESTED_VERSION
+# and the rust-nightly-bun pin together.  On a bun bump, refresh
+# GH_TUPLE/_BUN_DEP_CACHE and run `make makesum`.
+RUSTC_TESTED_VERSION=	1.100.0-nightly (feaadeeac 2026-09-19)
+
 MASTER_SITES=	GH \
-		https://github.com/oven-sh/zig/releases/download/autobuild-04e7f6ac1e009525bc00934f20199c68f04e0a24/:ovenzig \
-		https://github.com/oven-sh/WebKit/releases/download/autobuild-${WEBKIT_VERSION}/:webkit \
-		https://nodejs.org/dist/v${NODE_VERSION}/:nodejshdr \
-		LOCAL/yuri/:bootstrap
-DISTFILES=	bootstrap-x86_64-linux-musl.zip:ovenzig \
-		bun-webkit-freebsd-amd64.tar.gz:webkit \
-		node-v${NODE_VERSION}-headers.tar.gz:nodejshdr \
-		bun-1.3.13-93-bootstrap:bootstrap \
-		bun-node-modules-${DISTVERSION}.tar.gz:bootstrap \
-		bun-dep-tarballs-${DISTVERSION}.tar.gz:bootstrap \
-		bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz:bootstrap
+		https://github.com/oven-sh/bun/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/:bootstrap \
+		https://github.com/samm-git/WebKit/releases/download/autobuild-${WEBKIT_VERSION}/:webkit \
+		https://nodejs.org/dist/v${NODE_VERSION}/:nodehdr
+DISTFILES=	bun-freebsd-${BUN_ASSET_ARCH}.zip:bootstrap \
+		bun-webkit-freebsd-${WEBKIT_ASSET_ARCH}.tar.gz:webkit \
+		node-v${NODE_VERSION}-headers.tar.gz:nodehdr
 DIST_SUBDIR=	${PORTNAME}
-# Only auto-extract the GitHub source tarball; everything else is handled in post-extract.
-EXTRACT_ONLY=	${DISTNAME}${EXTRACT_SUFX}
+# Only the GitHub source tarball is auto-extracted; the bootstrap/WebKit/headers
+# tarballs are unpacked by hand in post-extract.
+EXTRACT_ONLY=	${DISTNAME}${EXTRACT_SUFX} \
+		${CARGO_CRATES:S/^/rust\/crates\//:S/$/.crate/}
 
 MAINTAINER=	yuri@FreeBSD.org
 COMMENT=	JavaScript runtime, bundler, test runner, and package manager
 WWW=		https://bun.com/ \
 		https://github.com/oven-sh/bun
 
-LICENSE=	LGPL20
-
-BROKEN=		Checksum error
+LICENSE=	MIT LGPL20
+LICENSE_COMB=	multi
 
-ONLY_FOR_ARCHS=		amd64
-ONLY_FOR_ARCHS_REASON=	bootstrap binary is only available for amd64 for now
-
-# do-fetch requires npm (node_modules build) and cargo (lolhtml vendor)
-FETCH_DEPENDS=	${LOCALBASE}/bin/npm:www/npm-node24 \
-		git:devel/git \
-		cargo:lang/rust \
-		${LOCALBASE}/llvm${LLVM_VER}/bin/clang++:devel/llvm${LLVM_VER} \
-		cmake:devel/cmake-core \
-		ninja:devel/ninja \
-		${LOCALBASE}/bin/node:www/node24
-BUILD_DEPENDS=	${LOCALBASE}/llvm${LLVM_VER}/bin/clang++:devel/llvm${LLVM_VER} \
-		cmake:devel/cmake-core \
-		git:devel/git \
-		ninja:devel/ninja \
-		cargo:lang/rust \
-		${LOCALBASE}/bin/node:www/node24 \
-		${LOCALBASE}/bin/npm:www/npm-node24
-TEST_DEPENDS=	bash:shells/bash
-
-USES=		shebangfix
+ONLY_FOR_ARCHS=		aarch64 amd64
+ONLY_FOR_ARCHS_REASON=	requires an upstream FreeBSD bootstrap binary (only aarch64/amd64 are published)
 
+USES=		shebangfix cargo
 USE_GITHUB=	yes
 GH_ACCOUNT=	oven-sh
-GH_TUPLE=	simdutf:simdutf:v${SIMDUTF_VERSION}:simdutf_src
-
+GH_TUPLE=	oven-sh:boringssl:41bf9b59c2ebf277a7aa427e1ecad5cc80dd4d4f:boringssl \
+		google:brotli:v1.1.0:brotli \
+		c-ares:c-ares:c7a3138dcfe3bb0eaaf10c0c24c36dc66dc790ab:cares \
+		HdrHistogram:HdrHistogram_c:be60a9987ee48d0abf0d7b6a175bad8d6c1585d1:hdrhistogram \
+		google:highway:2607d3b5b0113992fe84d3848859eae13b3b52c1:highway \
+		libarchive:libarchive:ded82291ab41d5e355831b96b0e1ff49e24d8939:libarchive \
+		ebiggers:libdeflate:c8c56a20f8f621e6a966b716b31f1dedab6a41e3:libdeflate \
+		libjpeg-turbo:libjpeg-turbo:e352b02f794f701407b39af08576035ba3360d60:libjpeg_turbo \
+		randy408:libspng:fb768002d4288590083a476af628e51c3f1d47cd:libspng \
+		oven-sh:libuv:8023581113b276e7c1aee3f82da57ca0893faab1:libuv \
+		webmproject:libwebp:b7e29b9d75bd31422b00c2a446d49d7af06c328d:libwebp \
+		oven-sh:lol-html:725ce499aa9b71e38b7a2d0a9fbb6d7294a4079e:lolhtml \
+		litespeedtech:ls-hpack:8905c024b6d052f083a3d11d0a169b3c2735c8a1:lshpack \
+		litespeedtech:ls-qpack:1e9c5b8e59f8161c54f168a570c8bfdc59ded0c3:lsqpack \
+		litespeedtech:lsquic:3181911301b1aa4f54c1ed690901abc674ee08fb:lsquic \
+		oven-sh:mimalloc:6a64e1ba7f5b2130d4efccb67ec87fd0003f0f6a:mimalloc \
+		h2o:picohttpparser:066d2b1e9ab820703db0837a7255d92d30f0c9f5:picohttpparser \
+		sru-systems:rust-argon2:ed81866f163f0c7026aa6fd8388adf37242eb32a:rust_argon2 \
+		oven-sh:tinycc:05f0fafaa3be31e31d7b4b5c17dc60f62c991171:tinycc \
+		zlib-ng:zlib-ng:12731092979c6d07f42da27da673a9f6c7b13586:zlib \
+		facebook:zstd:f8745da6ff1ad1e7bab384bd1f9d742439278e99:zstd
 SHEBANG_FILES=	test/regression/issue/18239/data-generator.sh
 
-LLVM_VER=	21 # build fails with llvm-19: error: unknown warning option '-Wno-character-conversion'
+BUILD_DEPENDS=	${LOCALBASE}/llvm${LLVM_VER}/bin/clang++:devel/llvm${LLVM_VER} \
+		${LOCALBASE}/llvm${LLVM_VER}/bin/ld.lld:devel/llvm${LLVM_VER} \
+		${RUST_PREFIX}/bin/cargo:lang/rust-nightly-bun \
+		${LOCALBASE}/bin/cmake:devel/cmake-core \
+		${LOCALBASE}/bin/ninja:devel/ninja \
+		git:devel/git
+# do-fetch builds the offline caches, so the toolchain is needed at fetch too.
+FETCH_DEPENDS=	${RUST_PREFIX}/bin/cargo:lang/rust-nightly-bun
+
+RUST_PREFIX=		${LOCALBASE}/rust-nightly-bun
+CARGO_BUILDDEP=		no
+CARGO=			${RUST_PREFIX}/bin/cargo
+RUSTC=			${RUST_PREFIX}/bin/rustc
+RUSTDOC=			${RUST_PREFIX}/bin/rustdoc
+CARGO_CONFIGURE=	no
+CARGO_BUILD=		no
+CARGO_INSTALL=		no
+CARGO_TEST=		no
 
-# WebKit/JavaScriptCore FreeBSD prebuilt
-WEBKIT_VERSION=	bdf6aab38a9c6f99df3fd1486406ab6b74180fbb
-WEBKIT_SHORT=	bdf6aab38a9c6f99
-# simdutf source (used to rebuild SIMDUTF.cpp.o in libWTF.a for baseline builds)
-SIMDUTF_VERSION=	8.2.0
-# Node.js headers (official tarball from nodejs.org; do-fetch trims unused dirs)
-NODE_VERSION=	24.3.0
+.include <bsd.port.pre.mk>
 
-# Custom tarballs are built by do-fetch and stored in DD.
-# They are NOT listed in DISTFILES so checksum phase does not verify them.
+# Asset names: bun uses x64/aarch64, the WebKit prebuilt amd64/arm64.
+.if ${ARCH} == amd64
+BUN_ASSET_ARCH=		x64
+WEBKIT_ASSET_ARCH=	amd64
+WEBKIT_CACHE_SUFFIX=
+# bun assembles x86-only crypto code (BoringSSL) with nasm at build time.
+BUILD_DEPENDS+=		${LOCALBASE}/bin/nasm:devel/nasm
+.elif ${ARCH} == aarch64
+BUN_ASSET_ARCH=		aarch64
+WEBKIT_ASSET_ARCH=	arm64
+WEBKIT_CACHE_SUFFIX=	-arm64
+.endif
 
-# Dep tarball cache names and their upstream GitHub URLs.
-# Names are {depname}-{sha256(url)[0:16]}.tar.gz (computed by bun's fetch-cli.ts).
-# Used by do-fetch to pre-populate the bun dep tarballs cache.
-_BUN_DEP_TARBALLS=	\
-	boringssl-5e15ff9594809574.tar.gz:https://github.com/oven-sh/boringssl/archive/0c5fce43b7ed5eb6001487ee48ac65766f5ddcd1.tar.gz \
-	brotli-723494d4c3a9902a.tar.gz:https://github.com/google/brotli/archive/v1.1.0.tar.gz \
-	cares-4e43539b43c0f4ae.tar.gz:https://github.com/c-ares/c-ares/archive/3ac47ee46edd8ea40370222f91613fc16c434853.tar.gz \
-	hdrhistogram-97084f213075a65e.tar.gz:https://github.com/HdrHistogram/HdrHistogram_c/archive/be60a9987ee48d0abf0d7b6a175bad8d6c1585d1.tar.gz \
-	highway-b2dcc6002e95cc47.tar.gz:https://github.com/google/highway/archive/2607d3b5b0113992fe84d3848859eae13b3b52c1.tar.gz \
-	libarchive-4296b191210d6b1b.tar.gz:https://github.com/libarchive/libarchive/archive/ded82291ab41d5e355831b96b0e1ff49e24d8939.tar.gz \
-	libdeflate-ce0e2d9805b30dcc.tar.gz:https://github.com/ebiggers/libdeflate/archive/c8c56a20f8f621e6a966b716b31f1dedab6a41e3.tar.gz \
-	libjpeg-turbo-297099166a01f75e.tar.gz:https://github.com/libjpeg-turbo/libjpeg-turbo/archive/e352b02f794f701407b39af08576035ba3360d60.tar.gz \
-	libspng-e6aca86c593b51ad.tar.gz:https://github.com/randy408/libspng/archive/fb768002d4288590083a476af628e51c3f1d47cd.tar.gz \
-	libwebp-2ced709f169b40bd.tar.gz:https://github.com/webmproject/libwebp/archive/b7e29b9d75bd31422b00c2a446d49d7af06c328d.tar.gz \
-	lolhtml-929339b1d898e66b.tar.gz:https://github.com/cloudflare/lol-html/archive/77127cd2b8545998756e8d64e36ee2313c4bb312.tar.gz \
-	lshpack-73e0c55d12ea4fc2.tar.gz:https://github.com/litespeedtech/ls-hpack/archive/8905c024b6d052f083a3d11d0a169b3c2735c8a1.tar.gz \
-	lsqpack-ceeb8e315778b938.tar.gz:https://github.com/litespeedtech/ls-qpack/archive/1e9c5b8e59f8161c54f168a570c8bfdc59ded0c3.tar.gz \
-	lsquic-d3ef6cf1fbedd7f9.tar.gz:https://github.com/litespeedtech/lsquic/archive/3181911301b1aa4f54c1ed690901abc674ee08fb.tar.gz \
-	mimalloc-4a1c4f1f45e31b88.tar.gz:https://github.com/oven-sh/mimalloc/archive/f15aecb94fc8096008bf87b90c53ed682026914a.tar.gz \
-	picohttpparser-fad59b16ad4752cc.tar.gz:https://github.com/h2o/picohttpparser/archive/066d2b1e9ab820703db0837a7255d92d30f0c9f5.tar.gz \
-	tinycc-2f1f629056328c7b.tar.gz:https://github.com/oven-sh/tinycc/archive/12882eee073cfe5c7621bcfadf679e1372d4537b.tar.gz \
-	zlib-655c6ecdb6fc9cd5.tar.gz:https://github.com/zlib-ng/zlib-ng/archive/12731092979c6d07f42da27da673a9f6c7b13586.tar.gz \
-	zstd-e010993a24072468.tar.gz:https://github.com/facebook/zstd/archive/f8745da6ff1ad1e7bab384bd1f9d742439278e99.tar.gz
+# Keep checksums for both supported architectures in distinfo.  A normal
+# fetch only needs the current architecture, but `make makesum` must include
+# both so it does not drop the other one.
+.if make(makesum)
+DISTFILES=	bun-freebsd-x64.zip:bootstrap \
+		bun-webkit-freebsd-amd64.tar.gz:webkit \
+		node-v${NODE_VERSION}-headers.tar.gz:nodehdr \
+		bun-freebsd-aarch64.zip:bootstrap \
+		bun-webkit-freebsd-arm64.tar.gz:webkit
+.endif
 
 DD=		${DISTDIR}/${DIST_SUBDIR}
-BUN_CACHE_DIR=	${WRKDIR}/bun-cache
-BUN_ZIG_DIR=	${WRKDIR}/oven-zig
-BUN_BUILD_DIR=	${WRKSRC}/build/release
+BUN_BOOTSTRAP_DIR=	${WRKDIR}/bun-bootstrap
+BUN_BOOTSTRAP=		${BUN_BOOTSTRAP_DIR}/bun
+BUN_CACHE_DIR=		${WRKDIR}/bun-cache
+BUN_BUILD_DIR=		${WRKSRC}/build/release
+BUN_INSTALL_CACHE_DIR=	${WRKDIR}/bun-install-cache
+CARGO_HOME=		${WRKDIR}/cargo-home
+# USES=cargo adds crate distfiles after ALLFILES is first expanded; keep
+# makesum/checksum aware of them.
+_CKSUMFILES=		${ALLFILES:S/^/${DIST_SUBDIR}\//} \
+			${CARGO_CRATES:S/^/rust\/crates\//:S/$/.crate/:S/^/${DIST_SUBDIR}\//}
+WEBKIT_CACHE_DIR=	${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd${WEBKIT_CACHE_SUFFIX}
+NODE_HEADERS_CACHE_DIR=	${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}
 
 PLIST_FILES=	bin/${PORTNAME}
 
-.include <bsd.port.pre.mk>
+# Upstream dependency archives are fetched as normal distfiles (GH_TUPLE) and
+# copied into the build's tarball cache in post-extract.  The cache name is
+# <dep>-<sha256(url)[0:16]>.tar.gz, as expected by scripts/build/fetch-cli.ts.
+# Keep this list in sync with GH_TUPLE.  On a bun bump, take the dependency
+# URLs from scripts/build/deps/*.ts, refresh GH_TUPLE and the cache names here,
+# then run `make makesum`.
+_BUN_DEP_CACHE=	\
+		boringssl-ce854d7300ee8a35.tar.gz:oven-sh-boringssl-41bf9b59c2ebf277a7aa427e1ecad5cc80dd4d4f_GH0.tar.gz \
+		brotli-723494d4c3a9902a.tar.gz:google-brotli-v1.1.0_GH0.tar.gz \
+		cares-1685a3355527fdec.tar.gz:c-ares-c-ares-c7a3138dcfe3bb0eaaf10c0c24c36dc66dc790ab_GH0.tar.gz \
+		hdrhistogram-97084f213075a65e.tar.gz:HdrHistogram-HdrHistogram_c-be60a9987ee48d0abf0d7b6a175bad8d6c1585d1_GH0.tar.gz \
+		highway-b2dcc6002e95cc47.tar.gz:google-highway-2607d3b5b0113992fe84d3848859eae13b3b52c1_GH0.tar.gz \
+		libarchive-4296b191210d6b1b.tar.gz:libarchive-libarchive-ded82291ab41d5e355831b96b0e1ff49e24d8939_GH0.tar.gz \
+		libdeflate-ce0e2d9805b30dcc.tar.gz:ebiggers-libdeflate-c8c56a20f8f621e6a966b716b31f1dedab6a41e3_GH0.tar.gz \
+		libjpeg-turbo-297099166a01f75e.tar.gz:libjpeg-turbo-libjpeg-turbo-e352b02f794f701407b39af08576035ba3360d60_GH0.tar.gz \
+		libspng-e6aca86c593b51ad.tar.gz:randy408-libspng-fb768002d4288590083a476af628e51c3f1d47cd_GH0.tar.gz \
+		libuv-0f29c74cc80722ca.tar.gz:oven-sh-libuv-8023581113b276e7c1aee3f82da57ca0893faab1_GH0.tar.gz \
+		libwebp-2ced709f169b40bd.tar.gz:webmproject-libwebp-b7e29b9d75bd31422b00c2a446d49d7af06c328d_GH0.tar.gz \
+		lolhtml-d63099fc6ce4f6e5.tar.gz:oven-sh-lol-html-725ce499aa9b71e38b7a2d0a9fbb6d7294a4079e_GH0.tar.gz \
+		lshpack-73e0c55d12ea4fc2.tar.gz:litespeedtech-ls-hpack-8905c024b6d052f083a3d11d0a169b3c2735c8a1_GH0.tar.gz \
+		lsqpack-ceeb8e315778b938.tar.gz:litespeedtech-ls-qpack-1e9c5b8e59f8161c54f168a570c8bfdc59ded0c3_GH0.tar.gz \
+		lsquic-d3ef6cf1fbedd7f9.tar.gz:litespeedtech-lsquic-3181911301b1aa4f54c1ed690901abc674ee08fb_GH0.tar.gz \
+		mimalloc-46af79b3cf5b6977.tar.gz:oven-sh-mimalloc-6a64e1ba7f5b2130d4efccb67ec87fd0003f0f6a_GH0.tar.gz \
+		picohttpparser-fad59b16ad4752cc.tar.gz:h2o-picohttpparser-066d2b1e9ab820703db0837a7255d92d30f0c9f5_GH0.tar.gz \
+		rust-argon2-87c5404c7fc9aa9c.tar.gz:sru-systems-rust-argon2-ed81866f163f0c7026aa6fd8388adf37242eb32a_GH0.tar.gz \
+		tinycc-e715321533b32b83.tar.gz:oven-sh-tinycc-05f0fafaa3be31e31d7b4b5c17dc60f62c991171_GH0.tar.gz \
+		zlib-655c6ecdb6fc9cd5.tar.gz:zlib-ng-zlib-ng-12731092979c6d07f42da27da673a9f6c7b13586_GH0.tar.gz \
+		zstd-e010993a24072468.tar.gz:facebook-zstd-f8745da6ff1ad1e7bab384bd1f9d742439278e99_GH0.tar.gz
 
-.if empty(CPUTYPE)
-_BUN_CPU_FLAGS=	--baseline=true
-.else
-_BUN_CPU_FLAGS=	--cpu=${CPUTYPE} --baseline=false
-.endif
+_BUN_LOLHTML_DISTFILE=	oven-sh-lol-html-725ce499aa9b71e38b7a2d0a9fbb6d7294a4079e_GH0.tar.gz
+_BUN_RUST_ARGON2_DISTFILE=	sru-systems-rust-argon2-ed81866f163f0c7026aa6fd8388adf37242eb32a_GH0.tar.gz
 
-# do-fetch: download the standard distfiles, then build the 3 custom archives
-# (node_modules, dep tarballs, cargo vendor) if they are not already cached.
-# All files land in ${DD} so make checksum and poudriere can reuse them.
-do-fetch:
-	@${MKDIR} ${DD}
-	# Fetch directly-downloadable distfiles (GH0 uses DEFAULT master site, no group suffix)
-	@${MKDIR} ${WRKDIR}; \
-	${RM} ${_MASTER_SITES_FILE} ${_DISTFILES_FILE}; \
-	for site in ${_MASTER_SITES_ENV}; do \
-		printf '%s\n' "$${site}" | sed -e 's/ /\\ /g' >> ${_MASTER_SITES_FILE}; \
-	done; \
-	for file in ${DISTNAME}${EXTRACT_SUFX} \
-			${DISTFILES:M*\:ovenzig} \
-			${DISTFILES:M*\:webkit} \
-			${DISTFILES:M*\:nodejshdr} \
-			${DISTFILES:M*\:simdutf_src} \
-			${DISTFILES:M*\:bootstrap:N*node-modules-*:N*dep-tarballs-*:N*cargo-vendor-*} \
-			; do \
-		printf '%s\n' "$${file}" >> ${_DISTFILES_FILE}; \
-	done; \
-	${SETENV} \
-			${_DO_FETCH_ENV} \
-			dp_SITES_FILE=${_MASTER_SITES_FILE} \
-			dp_FILES_FILE=${_DISTFILES_FILE} \
-			dp_SITE_FLAVOR=MASTER \
-			${SH} ${SCRIPTSDIR}/do-fetch.sh
-	# Build bun-node-modules tarball (npm ci with vendored package-lock*.json).
-	# Uses deterministic tar so the checksum is reproducible across builds.
-	@if ! [ -f "${DD}/bun-node-modules-${DISTVERSION}.tar.gz" ]; then \
-		${ECHO_CMD} "===> Building bun-node-modules-${DISTVERSION}.tar.gz" && \
-		_NTmp=$$(mktemp -d /tmp/bun-nmod.XXXXXX) && \
-		bsdtar xzf ${DD}/${DISTNAME}${EXTRACT_SUFX} -C $$_NTmp && \
-		_NSrc=$$_NTmp/${WRKSRC:T} && \
-		${SED} -i '' \
-			's|"@types/bun": "workspace:\*"|"@types/bun": "file:packages/@types/bun"|' \
-			$$_NSrc/package.json && \
-		${SED} -i '' \
-			's|"bun-types": "workspace:"|"bun-types": "file:../bun-types"|' \
-			$$_NSrc/packages/@types/bun/package.json && \
-		${CP} ${FILESDIR}/package-lock.json $$_NSrc/package-lock.json && \
-		${CP} ${FILESDIR}/package-lock-bun-error.json \
-			$$_NSrc/packages/bun-error/package-lock.json && \
-		${CP} ${FILESDIR}/package-lock-node-fallbacks.json \
-			$$_NSrc/src/node-fallbacks/package-lock.json && \
-		(cd $$_NSrc && ${LOCALBASE}/bin/npm ci --ignore-scripts) && \
-		(cd $$_NSrc/packages/bun-error && \
-			${LOCALBASE}/bin/npm ci --ignore-scripts) && \
-		(cd $$_NSrc/src/node-fallbacks && \
-			${LOCALBASE}/bin/npm ci --ignore-scripts) && \
-		${FIND} $$_NSrc/node_modules \
-			$$_NSrc/packages/bun-error/node_modules \
-			$$_NSrc/src/node-fallbacks/node_modules \
-			-name '.package-lock.json' -delete && \
-		${FIND} $$_NSrc/node_modules \
-			$$_NSrc/packages/bun-error/node_modules \
-			$$_NSrc/src/node-fallbacks/node_modules \
-			-type d -name '@*' -empty -delete && \
-		${FIND} $$_NSrc/node_modules \
-			$$_NSrc/packages/bun-error/node_modules \
-			$$_NSrc/src/node-fallbacks/node_modules \
-			-exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \
-		(cd $$_NSrc && \
-		  ${FIND} node_modules packages/bun-error/node_modules \
-			src/node-fallbacks/node_modules -print0 \
-		  | ${SORT} -z \
-		  | ${SETENV} -i ${TAR} czf ${DD}/bun-node-modules-${DISTVERSION}.tar.gz \
-			--format=cpio --gid 0 --uid 0 --options gzip:!timestamp \
-			--no-recursion --null -T -) && \
-		${RM} -rf $$_NTmp; \
-	fi
-	# Build bun-dep-tarballs + bun-cargo-vendor-lolhtml tarballs.
-	# Uses deterministic tar so checksums are reproducible across builds.
-	@if ! [ -f "${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz" ] || \
-		! [ -f "${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz" ]; then \
-		${ECHO_CMD} "===> Downloading bun dep tarballs" && \
-		_DTmp=$$(mktemp -d /tmp/bun-dtp.XXXXXX) && \
-		${MKDIR} $$_DTmp/tarballs && \
-		for _tu in ${_BUN_DEP_TARBALLS}; do \
-			_tc=$${_tu%%:*}; _url=$${_tu#*:}; \
-			if ! [ -f "$$_DTmp/tarballs/$$_tc" ]; then \
-				${FETCH_CMD} ${FETCH_BEFORE_ARGS} $$_url ${FETCH_AFTER_ARGS} \
-					-o $$_DTmp/tarballs/$$_tc || exit 1; \
-			fi; \
-		done && \
-		if ! [ -f "${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz" ]; then \
-			${ECHO_CMD} "===> Packaging bun-dep-tarballs-${DISTVERSION}.tar.gz" && \
-			( cd $$_DTmp && \
-			  ${FIND} tarballs -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \
-			  ${FIND} tarballs -print0 \
-			  | ${SORT} -z \
-			  | ${SETENV} -i ${TAR} czf ${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz \
-				--format=cpio --gid 0 --uid 0 --options gzip:!timestamp \
-				--no-recursion --null -T - ); \
-		fi && \
-		if ! [ -f "${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz" ]; then \
-			${ECHO_CMD} "===> Vendoring lolhtml Rust crates" && \
-			_LTmp=$$(mktemp -d /tmp/bun-lol.XXXXXX) && \
-			bsdtar xzf $$_DTmp/tarballs/lolhtml-929339b1d898e66b.tar.gz \
-				-C $$_LTmp --strip-components 1 && \
-			(cd $$_LTmp/c-api && \
-				${SETENV} HOME=$$_LTmp \
-				${LOCALBASE}/bin/cargo vendor vendor) && \
-			${FIND} $$_LTmp/c-api/vendor -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \
-			( cd $$_LTmp/c-api && \
-			  ${FIND} vendor -print0 \
-			  | ${SORT} -z \
-			  | ${SETENV} -i ${TAR} czf ${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz \
-				--format=cpio --gid 0 --uid 0 --options gzip:!timestamp \
-				--no-recursion --null -T - ) && \
-			${RM} -rf $$_LTmp; \
-		fi && \
-		${RM} -rf $$_DTmp; \
+# post-fetch builds the derived bun install cache.  Dependency source archives
+# and Rust crates are normal distfiles (GH_TUPLE and USES=cargo).
+post-fetch:
+	@${ECHO_MSG} "===> Building bun install cache"
+	@${MKDIR} ${BUN_BOOTSTRAP_DIR}
+	@cd ${BUN_BOOTSTRAP_DIR} && ${TAR} xf ${DD}/bun-freebsd-${BUN_ASSET_ARCH}.zip
+	@${MV} ${BUN_BOOTSTRAP_DIR}/bun-freebsd-${BUN_ASSET_ARCH}/bun ${BUN_BOOTSTRAP}
+	@${CHMOD} +x ${BUN_BOOTSTRAP}
+	# 1. Dependency archives are standard distfiles (GH_TUPLE); they are
+	# copied into the build cache in post-extract.
+	# 2. extract the pristine source once, for bun install cache warming
+	@${RM} -rf ${WRKDIR}/gen && ${MKDIR} ${WRKDIR}/gen
+	@${TAR} xf ${DD}/${DISTNAME}${EXTRACT_SUFX} -C ${WRKDIR}/gen
+	# 3. warm the bun install cache (root + the two standalone package dirs)
+	@if [ ! -f "${DD}/bun-install-cache-${DISTVERSION}.tar.gz" ]; then \
+		${ECHO_MSG} "  bun install (warming cache)"; \
+		cd ${WRKDIR}/gen/${WRKSRC:T} && \
+			${SETENV} BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+				${BUN_BOOTSTRAP} install --frozen-lockfile && \
+		cd ${WRKDIR}/gen/${WRKSRC:T}/packages/bun-error && \
+			${SETENV} BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+				${BUN_BOOTSTRAP} install --frozen-lockfile && \
+		cd ${WRKDIR}/gen/${WRKSRC:T}/src/node-fallbacks && \
+			${SETENV} BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+				${BUN_BOOTSTRAP} install --frozen-lockfile && \
+		${TAR} czf ${DD}/bun-install-cache-${DISTVERSION}.tar.gz \
+			-C ${BUN_INSTALL_CACHE_DIR} .; \
 	fi
 
 post-extract:
-	# Set up bun cache directory structure
+	# Bootstrap bun (official upstream FreeBSD release binary)
+	@${MKDIR} ${BUN_BOOTSTRAP_DIR}
+	@cd ${BUN_BOOTSTRAP_DIR} && ${TAR} xf ${DD}/bun-freebsd-${BUN_ASSET_ARCH}.zip
+	@${MV} ${BUN_BOOTSTRAP_DIR}/bun-freebsd-${BUN_ASSET_ARCH}/bun ${BUN_BOOTSTRAP}
+	@${CHMOD} +x ${BUN_BOOTSTRAP}
+	# WebKit prebuilt (JSC/WTF), including its bundled ICU headers
+	@${MKDIR} ${WEBKIT_CACHE_DIR}
+	@${TAR} xf ${DD}/bun-webkit-freebsd-${WEBKIT_ASSET_ARCH}.tar.gz \
+		-C ${WEBKIT_CACHE_DIR} --strip-components 1
+	@${ECHO_CMD} "${WEBKIT_COMMIT}" > ${WEBKIT_CACHE_DIR}/.identity
+	# Node.js headers into the build cache
+	@${MKDIR} ${NODE_HEADERS_CACHE_DIR}
+	@${TAR} xf ${DD}/node-v${NODE_VERSION}-headers.tar.gz \
+		-C ${NODE_HEADERS_CACHE_DIR} --strip-components 1
+	@${RM} -rf ${NODE_HEADERS_CACHE_DIR}/include/node/openssl \
+		${NODE_HEADERS_CACHE_DIR}/include/node/uv \
+		${NODE_HEADERS_CACHE_DIR}/include/node/uv.h
+	@${ECHO_CMD} "${NODE_VERSION}" > ${NODE_HEADERS_CACHE_DIR}/.identity
+	# dependency tarball cache + warmed bun install cache
 	@${MKDIR} ${BUN_CACHE_DIR}/tarballs
-	# Extract oven-sh/zig fork (Linux binary, via linux compat)
-	@${MKDIR} ${BUN_ZIG_DIR}
-	@cd ${BUN_ZIG_DIR} && bsdtar -xf ${DD}/bootstrap-x86_64-linux-musl.zip
-	@${CHMOD} +x ${BUN_ZIG_DIR}/bootstrap-x86_64-linux-musl/zig
-	# Install pre-built native FreeBSD bun bootstrap binary
-	@${MKDIR} ${WRKDIR}/bun-bootstrap
-	@${CP} ${DD}/bun-1.3.13-93-bootstrap ${WRKDIR}/bun-bootstrap/bun
-	@${CHMOD} +x ${WRKDIR}/bun-bootstrap/bun
-	# Extract WebKit prebuilt into cache
-	@${MKDIR} ${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd
-	@tar xzf ${DD}/bun-webkit-freebsd-amd64.tar.gz \
-		-C ${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd \
-		--strip-components 1
-	@${ECHO_CMD} "${WEBKIT_VERSION}" > \
-		${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd/.identity
-	# Extract dep tarballs into cache
-	@tar xzf ${DD}/bun-dep-tarballs-${DISTVERSION}.tar.gz \
-		-C ${BUN_CACHE_DIR}
-	# Extract vendored Rust crates for lolhtml
-	@${MKDIR} ${WRKDIR}/cargo-vendor-lolhtml
-	@tar xzf ${DD}/bun-cargo-vendor-lolhtml-${DISTVERSION}.tar.gz \
-		-C ${WRKDIR}/cargo-vendor-lolhtml
-	# Configure cargo to use vendored sources (via CARGO_HOME config)
-	@${MKDIR} ${WRKDIR}/.cargo
-	@${PRINTF} '[source.crates-io]\nreplace-with = "vendored-sources"\n\n[source.vendored-sources]\ndirectory = "%s/vendor"\n' \
-		${WRKDIR}/cargo-vendor-lolhtml > ${WRKDIR}/.cargo/config.toml
-	# Extract nodejs headers into bun cache and remove dirs bun doesn't need
-	@${MKDIR} ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}
-	@tar xzf ${DD}/node-v${NODE_VERSION}-headers.tar.gz \
-		-C ${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION} \
-		--strip-components 1
-	@${RM} -rf \
-		${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/include/node/openssl \
-		${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/include/node/uv \
-		${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/include/node/uv.h
-	@${ECHO_CMD} "${NODE_VERSION}" > \
-		${BUN_CACHE_DIR}/nodejs-headers-${NODE_VERSION}/.identity
-	# Extract node_modules into WRKSRC
-	@tar xzf ${DD}/bun-node-modules-${DISTVERSION}.tar.gz \
-		-C ${WRKSRC}
-.if empty(CPUTYPE)
-	# Baseline build: rebuild SIMDUTF.cpp.o from simdutf ${SIMDUTF_VERSION} without
-	# the icelake (AVX-512) and haswell (AVX2) runtime-dispatch targets.  The
-	# pre-built FreeBSD WebKit lacks a "-baseline" variant (unlike Linux/Windows),
-	# so its libWTF.a SIMDUTF.cpp.o contains AVX-512 icelake dispatch code that
-	# would otherwise appear in the final binary.
-	@${ECHO_CMD} "===> Rebuilding SIMDUTF.cpp.o for baseline (no icelake/haswell)"
-	@_SDTmp=$$(mktemp -d /tmp/bun-simdutf.XXXXXX) && \
-	bsdtar xzf ${DD}/simdutf-simdutf-v${SIMDUTF_VERSION}_GH0.tar.gz \
-		-C $$_SDTmp --strip-components 1 && \
-	${LOCALBASE}/llvm${LLVM_VER}/bin/clang++ \
-		-std=c++17 -march=nehalem -O2 \
-		-ffunction-sections -fdata-sections \
-		-fno-exceptions -fno-rtti \
-		-DSIMDUTF_IMPLEMENTATION_ICELAKE=0 \
-		-DSIMDUTF_IMPLEMENTATION_HASWELL=0 \
-		-I$$_SDTmp/include -I$$_SDTmp/src \
-		-c $$_SDTmp/src/simdutf.cpp \
-		-o $$_SDTmp/SIMDUTF.cpp.o && \
-	${LOCALBASE}/llvm${LLVM_VER}/bin/llvm-ar d \
-		${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd/lib/libWTF.a \
-		SIMDUTF.cpp.o && \
-	${LOCALBASE}/llvm${LLVM_VER}/bin/llvm-ar r \
-		${BUN_CACHE_DIR}/webkit-${WEBKIT_SHORT}-freebsd/lib/libWTF.a \
-		$$_SDTmp/SIMDUTF.cpp.o && \
-	${RM} -rf $$_SDTmp
-.endif
+	@for _e in ${_BUN_DEP_CACHE}; do \
+		_cache=$${_e%%:*}; _dist=$${_e#*:}; \
+		${CP} ${DD}/$${_dist} ${BUN_CACHE_DIR}/tarballs/$${_cache}; \
+	done
+	@${MKDIR} ${BUN_INSTALL_CACHE_DIR}
+	# Cargo uses the vendored crates fetched by USES=cargo.  Keep this in
+	# $CARGO_HOME rather than the project .cargo/config.toml, which the bun
+	# build regenerates for its own linker settings.
+	@${MKDIR} ${CARGO_HOME}
+	@${ECHO_CMD} "[source.cargo]" > ${CARGO_HOME}/config.toml
+	@${ECHO_CMD} "directory = '${CARGO_VENDOR_DIR}'" >> ${CARGO_HOME}/config.toml
+	@${ECHO_CMD} "[source.crates-io]" >> ${CARGO_HOME}/config.toml
+	@${ECHO_CMD} "replace-with = 'cargo'" >> ${CARGO_HOME}/config.toml
+	@${TAR} xf ${DD}/bun-install-cache-${DISTVERSION}.tar.gz -C ${BUN_INSTALL_CACHE_DIR}
 
-post-patch:
-	# Install FreeBSD-specific bun-internal patches applied by bun's build
-	# system (fetchDep) when it extracts each vendor tarball from cache.
-	# These disable AVX2/AVX/AVX-512 code paths that would otherwise appear
-	# in the ELF binary even with -march=x86-64.
-	@${MKDIR} ${WRKSRC}/patches/libdeflate
-	@${CP} ${FILESDIR}/bun-libdeflate-adler32-disable-avx2.patch \
-		${WRKSRC}/patches/libdeflate/adler32-disable-avx2.patch
-	@${CP} ${FILESDIR}/bun-libdeflate-crc32-disable-avx.patch \
-		${WRKSRC}/patches/libdeflate/crc32-disable-avx.patch
-	@${MKDIR} ${WRKSRC}/patches/boringssl
-	@${CP} ${FILESDIR}/bun-boringssl-disable-avx512-gcm.patch \
-		${WRKSRC}/patches/boringssl/disable-avx512-gcm.patch
+# Fail early if the pinned toolchain is not the one these patches target.
+pre-configure:
+	@if ${RUST_PREFIX}/bin/rustc --version | ${GREP} -Fq "${RUSTC_TESTED_VERSION}"; then \
+		${ECHO_MSG} "Rust nightly matches ${RUSTC_TESTED_VERSION}"; \
+	else \
+		${ECHO_MSG} "bun requires Rust ${RUSTC_TESTED_VERSION}; installed:"; \
+		${RUST_PREFIX}/bin/rustc --version | ${SED} 's/^/    /'; \
+		if [ "${ALLOW_UNTESTED_RUST}" != "yes" ]; then \
+			${ECHO_MSG} "Refusing to build; set ALLOW_UNTESTED_RUST=yes to override."; \
+			exit 1; \
+		fi; \
+		${ECHO_MSG} "ALLOW_UNTESTED_RUST=yes set; continuing."; \
+	fi
 
 do-build:
-	@cd ${WRKSRC} && \
-		${SETENV} PATH=${LOCALBASE}/llvm${LLVM_VER}/bin:${LOCALBASE}/bin:/usr/bin:/bin \
-		BUN_ZIG_PATH=${BUN_ZIG_DIR}/bootstrap-x86_64-linux-musl \
-		BUN_HOST_OS=freebsd \
-		FREEBSD_SYSROOT=/ \
-		CARGO_HOME=${WRKDIR}/.cargo \
-		GIT_SHA=${DISTVERSIONSUFFIX:S/-g//} \
-		${WRKDIR}/bun-bootstrap/bun scripts/build.ts \
-			--os=freebsd \
+	@cd ${WRKSRC} && ${SETENV} \
+		PATH=${RUST_PREFIX}/bin:${LOCALBASE}/llvm${LLVM_VER}/bin:${LOCALBASE}/bin:/usr/bin:/bin \
+		BUN_TOOLCHAIN_LLVM=${LOCALBASE}/llvm${LLVM_VER} \
+		BUN_TOOLCHAIN_RUST=${RUST_PREFIX} \
+		BUN_TOOLCHAIN_CARGO=${RUST_PREFIX}/bin/cargo \
+		CC=clang \
+		CXX=clang++ \
+		CARGO_HOME=${CARGO_HOME} \
+		CARGO_NET_OFFLINE=true \
+		BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+		GIT_SHA=${BUN_GIT_SHA} \
+		${BUN_BOOTSTRAP} scripts/build.ts \
+			--profile=release \
+			--canary=off \
 			--cacheDir=${BUN_CACHE_DIR} \
 			--buildDir=${BUN_BUILD_DIR} \
-			--profile=release \
-			-j${MAKE_JOBS_NUMBER} \
-			${_BUN_CPU_FLAGS}
+			-j${MAKE_JOBS_NUMBER}
 
 do-install:
 	${INSTALL_PROGRAM} ${BUN_BUILD_DIR}/bun ${STAGEDIR}${PREFIX}/bin/
 
 do-test:
-	@${ECHO_CMD} "==> Running Bun version check..."
+	@${ECHO_MSG} "==> Running Bun smoke tests..."
 	${STAGEDIR}${PREFIX}/bin/bun --version
-	@${ECHO_CMD} "==> Installing test dependencies..."
-	cd ${WRKSRC}/test && ${STAGEDIR}${PREFIX}/bin/bun install \
-		--frozen-lockfile --ignore-scripts
-	@${ECHO_CMD} "==> Running Bun regression tests..."
-	cd ${WRKSRC} && ${STAGEDIR}${PREFIX}/bin/bun test --timeout 120000 --parallel 1
+	${STAGEDIR}${PREFIX}/bin/bun -e 'console.log("hello from", process.platform, process.arch)'
 
 .include <bsd.port.post.mk>
diff --git a/lang/bun/Makefile.crates b/lang/bun/Makefile.crates
new file mode 100644
index 000000000000..a1af932c08a2
--- /dev/null
+++ b/lang/bun/Makefile.crates
@@ -0,0 +1,222 @@
+# Generated from Cargo.lock by `make cargo-crates`.  To refresh after a bun
+# update:
+#   { sed -n '/^#/p' lang/bun/Makefile.crates; \
+#     make -C lang/bun cargo-crates | sed -n '/^CARGO_CRATES=/,$p'; } \
+#       > lang/bun/Makefile.crates.new && \
+#   mv lang/bun/Makefile.crates.new lang/bun/Makefile.crates
+#   make -C lang/bun makesum
+# The second sed drops the make(1) progress lines before CARGO_CRATES; the
+# first one preserves this header.
+# For -Zbuild-std, merge in the crates from the pinned toolchain's
+# lib/rustlib/src/rust/library/Cargo.lock as well; makesum must checksum the
+# union of bun's lock and the toolchain's std lock.
+CARGO_CRATES=	addr2line-0.27.1 \
+		adler2-2.0.1 \
+		aho-corasick-1.1.4 \
+		allocator-api2-0.2.21 \
+		anes-0.1.6 \
+		anstyle-1.0.14 \
+		anyhow-1.0.102 \
+		arrayref-0.3.9 \
+		arrayvec-0.7.6 \
+		autocfg-1.5.0 \
+		base64-0.22.1 \
+		bcrypt-0.19.0 \
+		bitflags-2.11.1 \
+		blake2-0.10.6 \
+		blake2b_simd-1.0.4 \
+		block-buffer-0.10.4 \
+		blowfish-0.9.1 \
+		bstr-1.12.1 \
+		bumpalo-3.20.2 \
+		bytemuck-1.25.0 \
+		byteorder-1.5.0 \
+		cast-0.3.0 \
+		cc-1.4.3 \
+		cfg-if-1.0.4 \
+		ciborium-0.2.2 \
+		ciborium-io-0.2.2 \
+		ciborium-ll-0.2.2 \
+		cipher-0.4.4 \
+		clap-4.6.1 \
+		clap_builder-4.6.0 \
+		clap_lex-1.1.0 \
+		const_format-0.2.36 \
+		const_format_proc_macros-0.2.34 \
+		constant_time_eq-0.4.2 \
+		cpufeatures-0.2.17 \
+		criterion-0.5.1 \
+		criterion-plot-0.5.0 \
+		crossbeam-deque-0.8.6 \
+		crossbeam-epoch-0.9.18 \
+		crossbeam-utils-0.8.21 \
+		crunchy-0.2.4 \
+		crypto-common-0.1.7 \
+		cssparser-0.36.0 \
+		cssparser-macros-0.6.1 \
+		darling-0.21.3 \
+		darling_core-0.21.3 \
+		darling_macro-0.21.3 \
+		derive_more-2.1.1 \
+		derive_more-impl-2.1.1 \
+		digest-0.10.7 \
+		dlmalloc-0.2.14 \
+		dtoa-1.0.11 \
+		dtoa-short-0.3.5 \
+		either-1.15.0 \
+		encoding_rs-0.8.35 \
+		enum-map-2.7.3 \
+		enum-map-derive-0.17.0 \
+		enumset-1.1.10 \
+		enumset_derive-0.14.0 \
+		equivalent-1.0.2 \
+		errno-0.3.14 \
+		fastrand-2.4.1 \
+		find-msvc-tools-0.1.11 \
+		fnv-1.0.7 \
+		foldhash-0.1.5 \
+		foldhash-0.2.0 \
+		fortanix-sgx-abi-0.6.1 \
+		futures-core-0.3.32 \
+		futures-task-0.3.32 \
+		futures-util-0.3.32 \
+		generic-array-0.14.7 \
+		getopts-0.2.24 \
+		getrandom-0.4.2 \
+		gimli-0.34.0 \
+		half-2.7.1 \
+		hashbrown-0.15.5 \
+		hashbrown-0.16.1 \
+		hashbrown-0.17.0 \
+		hashbrown-0.17.1 \
+		heck-0.5.0 \
+		hermit-abi-0.5.2 \
+		hermit-abi-0.5.3 \
+		id-arena-2.3.0 \
+		ident_case-1.0.1 \
+		indexmap-2.14.0 \
+		inout-0.1.4 \
+		is-terminal-0.4.17 \
+		itertools-0.10.5 \
+		itoa-1.0.18 \
+		js-sys-0.3.98 \
+		keccak-0.1.6 \
+		konst-0.2.20 \
+		konst_macro_rules-0.2.19 \
+		leb128fmt-0.1.0 \
+		libc-0.2.186 \
+		libc-0.2.189 \
+		linux-raw-sys-0.4.15 \
+		log-0.4.29 \
+		memchr-2.8.0 \
+		memchr-2.8.3 \
+		mime-0.3.17 \
+		miniz_oxide-0.9.1 \
+		moto-rt-0.17.4 \
+		new_debug_unreachable-1.0.6 \
+		num-traits-0.2.19 \
+		object-0.39.1 \
+		once_cell-1.21.4 \
+		oorandom-11.1.5 \
+		paste-1.0.15 \
+		phf-0.13.1 \
+		phf_codegen-0.13.1 \
+		phf_generator-0.13.1 \
+		phf_macros-0.13.1 \
+		phf_shared-0.13.1 \
+		pin-project-lite-0.2.17 \
+		plotters-0.3.7 \
+		plotters-backend-0.3.7 \
+		plotters-svg-0.3.7 \
+		precomputed-hash-0.1.1 \
+		prettyplease-0.2.37 \
+		proc-macro2-1.0.106 \
+		quick-xml-0.38.4 \
+		quote-1.0.45 \
+		r-efi-5.3.0 \
+		r-efi-6.0.0 \
+		r-efi-alloc-2.1.0 \
+		rand-0.9.5 \
+		rand_core-0.9.5 \
+		rand_xorshift-0.4.0 \
+		rayon-1.12.0 \
+		rayon-core-1.13.0 \
+		regex-1.12.3 \
+		regex-automata-0.4.14 \
+		regex-syntax-0.8.10 \
+		roxmltree-0.20.0 \
+		rustc-demangle-0.1.28 \
+		rustc-hash-2.1.2 \
+		rustc-literal-escaper-0.0.8 \
+		rustc_version-0.4.1 \
+		rustix-0.38.44 \
+		rustversion-1.0.22 \
+		same-file-1.0.6 \
+		scopeguard-1.2.0 \
+		selectors-0.33.0 \
+		semver-1.0.28 \
+		serde-1.0.228 \
+		serde_core-1.0.228 \
+		serde_derive-1.0.228 \
+		serde_json-1.0.149 \
+		servo_arc-0.4.3 \
+		sha3-0.10.9 \
+		shlex-2.0.1 \
+		siphasher-1.0.3 \
+		slab-0.4.12 \
+		smallvec-1.15.1 \
+		stable_deref_trait-1.2.1 \
+		strum-0.26.3 \
+		strum_macros-0.26.4 \
+		subtle-2.6.1 \
+		syn-2.0.117 \
+		thiserror-2.0.18 \
+		thiserror-impl-2.0.18 \
+		tinytemplate-1.2.1 \
+		typed-arena-2.0.2 \
+		typenum-1.20.0 \
+		unicode-ident-1.0.24 \
+		unicode-xid-0.2.6 \
+		unwinding-0.2.10 \
+		version_check-0.9.5 \
+		vex-sdk-0.27.1 \
+		walkdir-2.5.0 \
+		wasip1-1.0.0 \
+		wasip2-1.0.3+wasi-0.2.9 \
+		wasip2-2.0.0+wasi-0.2.12 \
+		wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06 \
+		wasip3-0.8.0+wasi-0.3.0 \
+		wasm-bindgen-0.2.121 \
+		wasm-bindgen-macro-0.2.121 \
+		wasm-bindgen-macro-support-0.2.121 \
+		wasm-bindgen-shared-0.2.121 \
+		wasm-encoder-0.244.0 \
+		wasm-metadata-0.244.0 \
+		wasmparser-0.244.0 \
+		web-sys-0.3.98 \
+		winapi-util-0.1.11 \
+		windows-link-0.2.1 \
+		windows-sys-0.59.0 \
+		windows-sys-0.61.2 \
+		windows-targets-0.52.6 \
+		windows_aarch64_gnullvm-0.52.6 \
+		windows_aarch64_msvc-0.52.6 \
+		windows_i686_gnu-0.52.6 \
+		windows_i686_gnullvm-0.52.6 \
+		windows_i686_msvc-0.52.6 \
+		windows_x86_64_gnu-0.52.6 \
+		windows_x86_64_gnullvm-0.52.6 \
+		windows_x86_64_msvc-0.52.6 \
+		wit-bindgen-0.51.0 \
+		wit-bindgen-0.57.1 \
+		wit-bindgen-0.61.1 \
+		wit-bindgen-core-0.51.0 \
+		wit-bindgen-rust-0.51.0 \
+		wit-bindgen-rust-macro-0.51.0 \
+		wit-component-0.244.0 \
+		wit-parser-0.244.0 \
+		xml-rs-0.8.29 \
+		zerocopy-0.8.48 \
+		zerocopy-derive-0.8.48 \
+		zeroize-1.8.2 \
+		zmij-1.0.21
diff --git a/lang/bun/distinfo b/lang/bun/distinfo
index 47226f8ef255..5afc3343f7f9 100644
--- a/lang/bun/distinfo
+++ b/lang/bun/distinfo
@@ -1,19 +1,475 @@
-TIMESTAMP = 1779128958
-SHA256 (bun/bootstrap-x86_64-linux-musl.zip) = 0c09b44c0b2432d7ad8a759b685ba8ae1f883902851ac52e282ad60a89bebe42
-SIZE (bun/bootstrap-x86_64-linux-musl.zip) = 100112252
-SHA256 (bun/bun-webkit-freebsd-amd64.tar.gz) = 2bbab3f44e3b3d7961408c703271285ca3cc4d128d7ff9fc54dc5ab112e89fbf
-SIZE (bun/bun-webkit-freebsd-amd64.tar.gz) = 37660405
-SHA256 (bun/node-v24.3.0-headers.tar.gz) = 045e9bf477cd5db0ec67f8c1a63ba7f784dedfe2c581e3d0ed09b88e9115dd07
-SIZE (bun/node-v24.3.0-headers.tar.gz) = 8747815
-SHA256 (bun/bun-1.3.13-93-bootstrap) = aea7f1c221f812d726aad220ecc879914bbe49b05e5bd4e76c3155ec0a133f54
-SIZE (bun/bun-1.3.13-93-bootstrap) = 105685712
-SHA256 (bun/bun-node-modules-1.3.14.tar.gz) = 5fa07dc80359b9144253c67e67e8519840de9652b40a8fda223db4e74d91c0c6
-SIZE (bun/bun-node-modules-1.3.14.tar.gz) = 31861513
-SHA256 (bun/bun-dep-tarballs-1.3.14.tar.gz) = 8cf5f1aaae1f3494bde36d358fd5d8046e62a4aea48431f99b1317e33dc603ac
-SIZE (bun/bun-dep-tarballs-1.3.14.tar.gz) = 98808662
-SHA256 (bun/bun-cargo-vendor-lolhtml-1.3.14.tar.gz) = 55bd5cbcd4c430c8f8fe8ef3f2bb097da7bfd017a76472d17fb973bb3b49edbb
-SIZE (bun/bun-cargo-vendor-lolhtml-1.3.14.tar.gz) = 4020543
-SHA256 (bun/oven-sh-bun-bun-v1.3.14_GH0.tar.gz) = 112a5915992807f04b183854d360c2bf87ac7c1587fb5da3c560bdbb75b8c92e
-SIZE (bun/oven-sh-bun-bun-v1.3.14_GH0.tar.gz) = 54898395
-SHA256 (bun/simdutf-simdutf-v8.2.0_GH0.tar.gz) = 033a91b1d7d1cb818c1eff49e61faaa1b64a3a530d59ef9efef0195e56bda8b1
-SIZE (bun/simdutf-simdutf-v8.2.0_GH0.tar.gz) = 2403142
+TIMESTAMP = 1792437323
+SHA256 (bun/bun-freebsd-x64.zip) = ec044ed91c370a16f5e434208dd502093e98ec86a3cb1aff3aad29b13426ecc2
+SIZE (bun/bun-freebsd-x64.zip) = 36206407
+SHA256 (bun/bun-webkit-freebsd-amd64.tar.gz) = 11c918a96d70c38c6ed5e350afc8be9bf3a2904f6917da079a48bb8a4a63d51c
+SIZE (bun/bun-webkit-freebsd-amd64.tar.gz) = 79730947
+SHA256 (bun/node-v26.3.0-headers.tar.gz) = fca113c5d5add8bfb1aa31129a24acb8d49aa69ab3c22a2cc569aec88960526d
+SIZE (bun/node-v26.3.0-headers.tar.gz) = 9957179
+SHA256 (bun/bun-freebsd-aarch64.zip) = a554958e5691c5036e576da78efb4114665da354c882cb0ca059bbd4a896b44a
+SIZE (bun/bun-freebsd-aarch64.zip) = 36307040
+SHA256 (bun/bun-webkit-freebsd-arm64.tar.gz) = dffcf1623b916fa367906f5821d8c280e7be3adc4a6dd37aca48d7ff38adabb5
+SIZE (bun/bun-webkit-freebsd-arm64.tar.gz) = 79128236
+SHA256 (bun/oven-sh-bun-bun-v1.4.2_GH0.tar.gz) = e14670b117d69012d828514d657f0a3133d1c25d13d69461184d05b6a8e9a876
+SIZE (bun/oven-sh-bun-bun-v1.4.2_GH0.tar.gz) = 64582774
+SHA256 (bun/oven-sh-boringssl-41bf9b59c2ebf277a7aa427e1ecad5cc80dd4d4f_GH0.tar.gz) = a5028d5475f1eaf0ad785c18666b330027a923121d601129f4a61e7bfc89a1dd
+SIZE (bun/oven-sh-boringssl-41bf9b59c2ebf277a7aa427e1ecad5cc80dd4d4f_GH0.tar.gz) = 74564872
+SHA256 (bun/google-brotli-v1.1.0_GH0.tar.gz) = e720a6ca29428b803f4ad165371771f5398faba397edf6778837a18599ea13ff
+SIZE (bun/google-brotli-v1.1.0_GH0.tar.gz) = 511969
+SHA256 (bun/c-ares-c-ares-c7a3138dcfe3bb0eaaf10c0c24c36dc66dc790ab_GH0.tar.gz) = c9ea1b3029b23b04376c229bd519489cee180874ec48cd863a5dcba628c0fe03
+SIZE (bun/c-ares-c-ares-c7a3138dcfe3bb0eaaf10c0c24c36dc66dc790ab_GH0.tar.gz) = 608129
+SHA256 (bun/HdrHistogram-HdrHistogram_c-be60a9987ee48d0abf0d7b6a175bad8d6c1585d1_GH0.tar.gz) = 811c5e5ae5303a75ade50688880af6aad5d2f951ec5785f68186bd18635cdfc9
+SIZE (bun/HdrHistogram-HdrHistogram_c-be60a9987ee48d0abf0d7b6a175bad8d6c1585d1_GH0.tar.gz) = 306742
+SHA256 (bun/google-highway-2607d3b5b0113992fe84d3848859eae13b3b52c1_GH0.tar.gz) = 741d705781e0b3e406beda8f1f994fbae01321237ce8023a1ad90fbaf7940c25
+SIZE (bun/google-highway-2607d3b5b0113992fe84d3848859eae13b3b52c1_GH0.tar.gz) = 3692133
+SHA256 (bun/libarchive-libarchive-ded82291ab41d5e355831b96b0e1ff49e24d8939_GH0.tar.gz) = 042f0efe7147063ff9ba10f1a38ed080e949bcbd04bdbf3592b8846dd11b1da2
+SIZE (bun/libarchive-libarchive-ded82291ab41d5e355831b96b0e1ff49e24d8939_GH0.tar.gz) = 6134289
+SHA256 (bun/ebiggers-libdeflate-c8c56a20f8f621e6a966b716b31f1dedab6a41e3_GH0.tar.gz) = 1e5cc06bdbf3e1245d8b89c9e3588f507e3c8bc53fe8b8229770a9e8661dea81
+SIZE (bun/ebiggers-libdeflate-c8c56a20f8f621e6a966b716b31f1dedab6a41e3_GH0.tar.gz) = 197522
+SHA256 (bun/libjpeg-turbo-libjpeg-turbo-e352b02f794f701407b39af08576035ba3360d60_GH0.tar.gz) = 440f3a94390c78eab88f74b92944d2f6b248e592e984412e389885dfb5796bf0
+SIZE (bun/libjpeg-turbo-libjpeg-turbo-e352b02f794f701407b39af08576035ba3360d60_GH0.tar.gz) = 2529165
+SHA256 (bun/randy408-libspng-fb768002d4288590083a476af628e51c3f1d47cd_GH0.tar.gz) = d656813290d70a750b69e768323ff3b3875adf8c2e8c2fdb4e57ca1467abf86a
+SIZE (bun/randy408-libspng-fb768002d4288590083a476af628e51c3f1d47cd_GH0.tar.gz) = 159282
+SHA256 (bun/oven-sh-libuv-8023581113b276e7c1aee3f82da57ca0893faab1_GH0.tar.gz) = 93bb95e613d8c324e673607282fac0ae25a07368eabcc12c0e2539eaa95b0ecc
+SIZE (bun/oven-sh-libuv-8023581113b276e7c1aee3f82da57ca0893faab1_GH0.tar.gz) = 1368857
+SHA256 (bun/webmproject-libwebp-b7e29b9d75bd31422b00c2a446d49d7af06c328d_GH0.tar.gz) = 76fb89b4454ff2161bb0cca2cf832e19b8b4001b0ef42fbcc2b4a437c945b2b6
+SIZE (bun/webmproject-libwebp-b7e29b9d75bd31422b00c2a446d49d7af06c328d_GH0.tar.gz) = 3834595
+SHA256 (bun/oven-sh-lol-html-725ce499aa9b71e38b7a2d0a9fbb6d7294a4079e_GH0.tar.gz) = afd83edbe1a2d4accb72e869cd4218bb8665fda2b7cb2c5106fc4be80001a748
+SIZE (bun/oven-sh-lol-html-725ce499aa9b71e38b7a2d0a9fbb6d7294a4079e_GH0.tar.gz) = 570130
+SHA256 (bun/litespeedtech-ls-hpack-8905c024b6d052f083a3d11d0a169b3c2735c8a1_GH0.tar.gz) = 07d8bf901bb1b15543f38eabd23938519e1210eebadb52f3d651d6ef130ef973
+SIZE (bun/litespeedtech-ls-hpack-8905c024b6d052f083a3d11d0a169b3c2735c8a1_GH0.tar.gz) = 952726
+SHA256 (bun/litespeedtech-ls-qpack-1e9c5b8e59f8161c54f168a570c8bfdc59ded0c3_GH0.tar.gz) = e9d8abe5b7c1e35b9908a9521e2acd7c1d17547babc01d73c7297e02aebbcc2d
+SIZE (bun/litespeedtech-ls-qpack-1e9c5b8e59f8161c54f168a570c8bfdc59ded0c3_GH0.tar.gz) = 710309
+SHA256 (bun/litespeedtech-lsquic-3181911301b1aa4f54c1ed690901abc674ee08fb_GH0.tar.gz) = f8cb90fb327eb91597c23163bf596c0d1882560be35b661d9ba84891cc461735
+SIZE (bun/litespeedtech-lsquic-3181911301b1aa4f54c1ed690901abc674ee08fb_GH0.tar.gz) = 1952886
+SHA256 (bun/oven-sh-mimalloc-6a64e1ba7f5b2130d4efccb67ec87fd0003f0f6a_GH0.tar.gz) = f36343416ad823dfcca61bd18ad4bb7f0d8814ab77e0fd5ef169f4a9cddeb8b8
+SIZE (bun/oven-sh-mimalloc-6a64e1ba7f5b2130d4efccb67ec87fd0003f0f6a_GH0.tar.gz) = 1582650
+SHA256 (bun/h2o-picohttpparser-066d2b1e9ab820703db0837a7255d92d30f0c9f5_GH0.tar.gz) = 637ff2ab6f5c7f7e05a5b5dc393d5cf2fea8d4754fcaceaaf935ffff5c1323ee
+SIZE (bun/h2o-picohttpparser-066d2b1e9ab820703db0837a7255d92d30f0c9f5_GH0.tar.gz) = 15163
+SHA256 (bun/sru-systems-rust-argon2-ed81866f163f0c7026aa6fd8388adf37242eb32a_GH0.tar.gz) = e77c797444f191faf488d49c76c4f45c10b3d9275e0364ee10b6d05cfbe57baf
+SIZE (bun/sru-systems-rust-argon2-ed81866f163f0c7026aa6fd8388adf37242eb32a_GH0.tar.gz) = 30025
+SHA256 (bun/oven-sh-tinycc-05f0fafaa3be31e31d7b4b5c17dc60f62c991171_GH0.tar.gz) = 50750680312923a59fdd36ae41f7091d8e35e51909d0e0b25b0b33ea9534bc08
+SIZE (bun/oven-sh-tinycc-05f0fafaa3be31e31d7b4b5c17dc60f62c991171_GH0.tar.gz) = 1036641
+SHA256 (bun/zlib-ng-zlib-ng-12731092979c6d07f42da27da673a9f6c7b13586_GH0.tar.gz) = a0d2a5d122c84b56a793a1553a9c3327fb2eb7469bf7a86b79e3c7be5d92e8d6
+SIZE (bun/zlib-ng-zlib-ng-12731092979c6d07f42da27da673a9f6c7b13586_GH0.tar.gz) = 2450038
+SHA256 (bun/facebook-zstd-f8745da6ff1ad1e7bab384bd1f9d742439278e99_GH0.tar.gz) = 4b0bd1f0cfb25e61b9103c35f27395530ff5b4c0d2513a00fd745849e85ea52c
+SIZE (bun/facebook-zstd-f8745da6ff1ad1e7bab384bd1f9d742439278e99_GH0.tar.gz) = 2453329
+SHA256 (bun/rust/crates/addr2line-0.27.1.crate) = e567177890eb1617b1f774005b66b26b2377afd138a2ca37aae7d8f0c81429d4
+SIZE (bun/rust/crates/addr2line-0.27.1.crate) = 43584
+SHA256 (bun/rust/crates/adler2-2.0.1.crate) = 320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa
+SIZE (bun/rust/crates/adler2-2.0.1.crate) = 13366
+SHA256 (bun/rust/crates/aho-corasick-1.1.4.crate) = ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301
+SIZE (bun/rust/crates/aho-corasick-1.1.4.crate) = 184015
+SHA256 (bun/rust/crates/allocator-api2-0.2.21.crate) = 683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923
+SIZE (bun/rust/crates/allocator-api2-0.2.21.crate) = 63622
+SHA256 (bun/rust/crates/anes-0.1.6.crate) = 4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299
+SIZE (bun/rust/crates/anes-0.1.6.crate) = 23857
+SHA256 (bun/rust/crates/anstyle-1.0.14.crate) = 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000
+SIZE (bun/rust/crates/anstyle-1.0.14.crate) = 17787
+SHA256 (bun/rust/crates/anyhow-1.0.102.crate) = 7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c
+SIZE (bun/rust/crates/anyhow-1.0.102.crate) = 48658
+SHA256 (bun/rust/crates/arrayref-0.3.9.crate) = 76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb
+SIZE (bun/rust/crates/arrayref-0.3.9.crate) = 9186
+SHA256 (bun/rust/crates/arrayvec-0.7.6.crate) = 7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50
+SIZE (bun/rust/crates/arrayvec-0.7.6.crate) = 31237
+SHA256 (bun/rust/crates/autocfg-1.5.0.crate) = c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8
+SIZE (bun/rust/crates/autocfg-1.5.0.crate) = 18729
+SHA256 (bun/rust/crates/base64-0.22.1.crate) = 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6
+SIZE (bun/rust/crates/base64-0.22.1.crate) = 81597
+SHA256 (bun/rust/crates/bcrypt-0.19.0.crate) = 523ab528ce3a7ada6597f8ccf5bd8d85ebe26d5edf311cad4d1d3cfb2d357ac6
+SIZE (bun/rust/crates/bcrypt-0.19.0.crate) = 14949
+SHA256 (bun/rust/crates/bitflags-2.11.1.crate) = c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3
+SIZE (bun/rust/crates/bitflags-2.11.1.crate) = 49082
+SHA256 (bun/rust/crates/blake2-0.10.6.crate) = 46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe
+SIZE (bun/rust/crates/blake2-0.10.6.crate) = 47234
+SHA256 (bun/rust/crates/blake2b_simd-1.0.4.crate) = b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3
+SIZE (bun/rust/crates/blake2b_simd-1.0.4.crate) = 34878
+SHA256 (bun/rust/crates/block-buffer-0.10.4.crate) = 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71
+SIZE (bun/rust/crates/block-buffer-0.10.4.crate) = 10538
+SHA256 (bun/rust/crates/blowfish-0.9.1.crate) = e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7
+SIZE (bun/rust/crates/blowfish-0.9.1.crate) = 16734
+SHA256 (bun/rust/crates/bstr-1.12.1.crate) = 63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab
+SIZE (bun/rust/crates/bstr-1.12.1.crate) = 354916
+SHA256 (bun/rust/crates/bumpalo-3.20.2.crate) = 5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb
+SIZE (bun/rust/crates/bumpalo-3.20.2.crate) = 97696
+SHA256 (bun/rust/crates/bytemuck-1.25.0.crate) = c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec
+SIZE (bun/rust/crates/bytemuck-1.25.0.crate) = 53466
+SHA256 (bun/rust/crates/byteorder-1.5.0.crate) = 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b
*** 6075 LINES SKIPPED ***