Skip to content

fix(bundler): RN 플랫폼에서 IIFE 래핑 제거#807

Merged
ohah merged 1 commit into
mainfrom
fix/rn-no-iife
Apr 6, 2026
Merged

fix(bundler): RN 플랫폼에서 IIFE 래핑 제거#807
ohah merged 1 commit into
mainfrom
fix/rn-no-iife

Conversation

@ohah
Copy link
Copy Markdown
Owner

@ohah ohah commented Apr 6, 2026

Summary

  • --platform=react-native에서 IIFE 자동 적용 제거 (Rollipop/Metro 호환)
  • --platform=browser만 IIFE 유지

배경

Rollipop 번들은 IIFE 없이 글로벌 스코프에서 실행. ZTS는 isBrowserLike()에 react-native가 포함되어 IIFE가 자동 적용됨. RN에서는 preamble + __esm 래핑이 스코프 격리를 담당하므로 IIFE 불필요.

Test plan

  • zig build test — 전체 통과
  • bun test tests/bundle-smoke.test.ts tests/runtime-helpers.test.ts — 111개 통과
  • --platform=browser 여전히 IIFE 적용 확인
  • --platform=react-native IIFE 미적용 확인

🤖 Generated with Claude Code

react-native는 IIFE 불필요 — Metro/Rollipop도 글로벌 스코프에서 실행.
preamble과 __esm 래핑이 스코프 격리를 담당.

기존: --platform=react-native → isBrowserLike()=true → IIFE 자동 적용
수정: --platform=browser만 IIFE 자동 적용, react-native는 ESM(default)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ohah ohah added the bug Something isn't working label Apr 6, 2026
@ohah ohah self-assigned this Apr 6, 2026
@ohah ohah merged commit 265ff68 into main Apr 6, 2026
11 of 14 checks passed
@ohah ohah deleted the fix/rn-no-iife branch April 6, 2026 13:17
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 6, 2026

Smoke Test Results (CI)

Smoke Test Results

Project ZTS Size Time esbuild Size Time rolldown Size Time rspack Size Time Output
lodash-es OK 46KB 23ms OK 64KB 62ms OK 99KB 160ms OK 122KB 134ms MATCH
preact OK 13KB 4ms OK 15KB 8ms OK 13KB 113ms OK 13KB 110ms MATCH
date-fns OK 37KB 155ms OK 47KB 44ms OK 77KB 126ms OK 102KB 158ms MATCH
uuid OK 2.2KB 4ms OK 2.1KB 8ms OK 2.0KB 114ms OK 3.9KB 111ms MATCH
zod OK 102KB 10ms OK 119KB 15ms OK 98KB 118ms OK 147KB 130ms MATCH
axios OK 346KB 23ms FAIL 436KB 35ms OK 399KB 144ms OK 411KB 158ms MATCH
toolkit OK 65KB 10ms OK 51KB 17ms OK 39KB 123ms OK 126KB 127ms MATCH
rxjs OK 329KB 22ms OK 367KB 37ms OK 308KB 156ms OK 325KB 143ms MATCH
immer OK 18KB 5ms OK 22KB 8ms OK 19KB 113ms OK 36KB 112ms MATCH
superjson OK 23KB 7ms OK 26KB 11ms OK 24KB 116ms OK 32KB 112ms MATCH
express OK 787KB 30ms OK 1138KB 82ms OK 908KB 167ms OK 917KB 173ms MATCH
react OK 53KB 5ms OK 64KB 8ms OK 53KB 115ms OK 18KB 110ms MATCH
commander OK 68KB 7ms OK 119KB 11ms OK 100KB 125ms OK 121KB 116ms MATCH
eventemitter3 OK 6.6KB 3ms OK 7.8KB 7ms OK 9.2KB 106ms OK 10KB 109ms MATCH
ms OK 3.5KB 3ms OK 4.3KB 6ms OK 4.0KB 110ms OK 5.0KB 105ms MATCH
dotenv OK 14KB 3ms OK 14KB 7ms OK 12KB 109ms OK 14KB 110ms MATCH
jsonwebtoken OK 117KB 10ms OK 137KB 19ms OK 141KB 121ms OK 159KB 120ms MATCH
bcryptjs OK 32KB 5ms OK 46KB 9ms OK 47KB 111ms OK 60KB 114ms MATCH
clsx OK 0.6KB 3ms OK 0.6KB 6ms OK 0.7KB 107ms OK 1.5KB 105ms MATCH
tiny-invariant OK 0.5KB 2ms OK 0.6KB 5ms OK 0.6KB 105ms OK 1.5KB 107ms MATCH
tanstack-query OK 47KB 6ms OK 57KB 11ms OK 49KB 117ms OK 59KB 118ms MATCH
fast-glob OK 165KB 12ms OK 199KB 22ms OK 187KB 124ms OK 201KB 124ms MATCH
micromatch OK 82KB 8ms OK 100KB 13ms OK 100KB 119ms OK 108KB 114ms MATCH
semver OK 56KB 6ms OK 66KB 12ms OK 52KB 119ms OK 67KB 114ms MATCH
debug OK 20KB 5ms FAIL 25KB 10ms OK 24KB 122ms OK 28KB 123ms MATCH
chalk OK 13KB 4ms OK 15KB 8ms OK 14KB 123ms OK 17KB 112ms MATCH
yaml OK 211KB 13ms OK 261KB 20ms OK 228KB 144ms OK 284KB 133ms MATCH
yargs OK 167KB 14ms OK 185KB 18ms OK 167KB 124ms OK 227KB 127ms MATCH
effect OK 666KB 150ms OK 477KB 163ms OK 368KB 270ms OK 1460KB 251ms MATCH
vue OK 1635KB 77ms OK 2009KB 78ms OK 1606KB 258ms OK 1216KB 175ms MATCH
svelte OK 71KB 13ms OK 4.7KB 17ms OK 3.5KB 121ms OK 197KB 130ms MATCH
solid-js OK 0.3KB 4ms OK 2.4KB 8ms OK 2.2KB 121ms OK 23KB 113ms MATCH
three OK 246KB 72ms OK 296KB 71ms OK 276KB 185ms OK 1280KB 255ms MATCH
graphql OK 55KB 14ms OK 604KB 35ms OK 547KB 158ms OK 100KB 123ms MATCH
supabase OK 312KB 20ms OK 759KB 30ms OK 706KB 157ms OK 779KB 152ms MATCH
mobx OK 135KB 13ms OK 271KB 22ms OK 234KB 140ms OK 190KB 134ms MATCH
jotai OK 21KB 5ms OK 23KB 9ms OK 20KB 126ms OK 26KB 120ms MATCH
mitt OK 0.5KB 3ms OK 0.6KB 7ms OK 0.7KB 112ms OK 1.5KB 110ms MATCH
zustand OK 1.1KB 3ms OK 1.2KB 6ms OK 1.3KB 110ms OK 2.3KB 111ms MATCH
valtio OK 6.8KB 4ms OK 7.5KB 8ms OK 8.3KB 122ms OK 24KB 112ms MATCH
react-dom OK 1110KB 35ms OK 1355KB 41ms OK 1116KB 201ms OK 534KB 137ms MATCH
d3 OK 116KB 41ms OK 100KB 75ms OK 96KB 167ms OK 150KB 190ms MATCH
hono OK 43KB 8ms OK 59KB 12ms OK 52KB 122ms OK 68KB 119ms MATCH
dayjs OK 11KB 4ms OK 14KB 8ms OK 11KB 113ms OK 8.9KB 108ms MATCH
nanoid OK 0.8KB 3ms OK 0.9KB 6ms OK 0.9KB 109ms OK 2.6KB 111ms MATCH
zlib OK 97KB 12ms OK 112KB 16ms OK 102KB 123ms OK 222KB 127ms MATCH
fp-ts OK 8.8KB 7ms OK 70KB 13ms OK 100KB 122ms OK 50KB 118ms MATCH
neverthrow OK 11KB 4ms OK 18KB 8ms OK 13KB 110ms OK 19KB 111ms MATCH
drizzle-orm OK 20KB 31ms OK 30KB 27ms OK 14KB 125ms OK 35KB 126ms MATCH
tslib OK 0.8KB 4ms OK 0.8KB 7ms OK 0.8KB 120ms OK 18KB 114ms MATCH
iconv-lite OK 303KB 8ms OK 543KB 14ms OK 319KB 119ms OK 325KB 119ms MATCH
qs OK 79KB 10ms OK 95KB 21ms OK 81KB 127ms OK 92KB 117ms MATCH
change-case OK 3.1KB 3ms OK 3.2KB 6ms OK 3.3KB 105ms OK 8.0KB 107ms MATCH
path-to-regexp OK 12KB 3ms OK 14KB 7ms OK 8.0KB 110ms OK 15KB 108ms MATCH
mime-types OK 178KB 9ms OK 235KB 14ms OK 198KB 118ms OK 164KB 134ms MATCH
ajv OK 214KB 13ms OK 243KB 20ms OK 208KB 129ms OK 239KB 125ms MATCH
cac OK 17KB 4ms OK 18KB 8ms OK 16KB 111ms OK 19KB 111ms MATCH
defu OK 1.9KB 3ms OK 2.1KB 6ms OK 1.8KB 117ms OK 3.0KB 110ms MATCH
pathe OK 14KB 4ms OK 3.4KB 7ms OK 3.0KB 115ms OK 13KB 113ms MATCH
destr OK 2.0KB 2ms OK 2.1KB 6ms OK 1.8KB 120ms OK 3.1KB 108ms MATCH
hookable OK 5.3KB 3ms OK 5.9KB 7ms OK 5.2KB 107ms OK 9.3KB 111ms MATCH
minimatch OK 46KB 7ms OK 56KB 12ms OK 47KB 124ms OK 90KB 116ms MATCH
cheerio OK 1743KB 58ms OK 2186KB 88ms OK 1747KB 269ms OK 2387KB 216ms MATCH
is-glob OK 4.8KB 3ms OK 6.4KB 6ms OK 4.9KB 106ms OK 6.0KB 109ms MATCH
glob-parent OK 6.2KB 3ms OK 8.4KB 7ms OK 6.3KB 106ms OK 7.9KB 109ms MATCH
escape-string-regexp OK 0.3KB 2ms OK 0.4KB 6ms OK 0.4KB 110ms OK 1.5KB 108ms MATCH
fast-deep-equal OK 2.3KB 3ms OK 2.9KB 6ms OK 2.3KB 114ms OK 3.2KB 107ms MATCH
deepmerge OK 4.8KB 3ms OK 5.5KB 7ms OK 4.5KB 107ms OK 6.0KB 107ms MATCH
color-convert OK 25KB 5ms OK 30KB 9ms OK 27KB 118ms OK 27KB 111ms MATCH
picomatch OK 48KB 6ms OK 58KB 10ms OK 55KB 113ms OK 61KB 112ms MATCH
type-is OK 186KB 10ms OK 244KB 16ms OK 210KB 120ms OK 179KB 138ms MATCH
object-assign OK 3.0KB 3ms OK 3.8KB 6ms OK 2.8KB 109ms OK 4.3KB 109ms MATCH
has-flag OK 0.4KB 2ms OK 0.5KB 6ms OK 1.5KB 113ms OK 1.7KB 110ms MATCH
p-limit OK 2.6KB 3ms OK 3.0KB 7ms OK 2.7KB 106ms OK 5.2KB 114ms MATCH
strip-ansi OK 0.7KB 3ms OK 0.8KB 6ms OK 0.8KB 117ms OK 2.2KB 114ms MATCH
ansi-regex OK 0.4KB 3ms OK 0.5KB 6ms OK 0.4KB 117ms OK 1.8KB 110ms MATCH
wrap-ansi OK 32KB 5ms OK 35KB 11ms OK 34KB 119ms OK 38KB 118ms MATCH
supports-color OK 3.6KB 3ms OK 3.8KB 6ms OK 4.6KB 115ms OK 5.7KB 113ms MATCH
cross-spawn OK 15KB 5ms OK 18KB 9ms OK 15KB 114ms OK 19KB 117ms MATCH
lru-cache OK 21KB 5ms OK 23KB 9ms OK 22KB 124ms OK 18KB 116ms MATCH
signal-exit OK 5.2KB 3ms OK 6.8KB 8ms OK 6.5KB 113ms OK 12KB 115ms MATCH
which OK 7.8KB 3ms OK 9.5KB 8ms OK 7.7KB 118ms OK 8.7KB 111ms MATCH
string-width OK 23KB 4ms OK 25KB 9ms OK 25KB 113ms OK 27KB 115ms MATCH
safe-buffer OK 2.7KB 3ms OK 3.8KB 6ms OK 1.7KB 117ms OK 3.8KB 107ms MATCH
bytes OK 3.4KB 3ms OK 4.3KB 6ms OK 4.3KB 106ms OK 5.5KB 106ms MATCH
depd OK 9.6KB 3ms OK 12KB 7ms OK 11KB 108ms OK 13KB 112ms MATCH
merge-descriptors OK 1.9KB 3ms OK 2.3KB 6ms OK 1.8KB 106ms OK 2.9KB 109ms MATCH
content-type OK 4.3KB 3ms OK 5.3KB 7ms OK 4.2KB 108ms OK 6.0KB 108ms MATCH
cookie OK 8.2KB 3ms OK 9.8KB 7ms OK 5.6KB 108ms OK 13KB 107ms MATCH
on-finished OK 5.1KB 3ms OK 6.9KB 7ms OK 6.6KB 107ms OK 8.3KB 106ms MATCH
statuses OK 4.5KB 3ms OK 5.8KB 6ms OK 5.3KB 110ms OK 6.1KB 107ms MATCH
etag OK 2.8KB 3ms OK 3.7KB 6ms OK 3.3KB 103ms OK 4.6KB 108ms MATCH
vary OK 3.0KB 3ms OK 3.7KB 6ms OK 3.5KB 115ms OK 5.1KB 105ms MATCH
flat OK 1.2KB 3ms OK 1.3KB 5ms OK 1.2KB 105ms OK 4.9KB 108ms MATCH
retry OK 7.1KB 3ms OK 8.6KB 6ms OK 7.0KB 115ms OK 7.3KB 110ms MATCH
camelcase OK 3.5KB 3ms OK 3.7KB 6ms OK 3.5KB 108ms OK 4.5KB 107ms MATCH
decamelize OK 1.2KB 3ms OK 1.3KB 6ms OK 1.3KB 111ms OK 3.0KB 108ms MATCH
memoize-one OK 1.2KB 3ms OK 3.1KB 6ms OK 2.3KB 108ms OK 2.4KB 108ms MATCH
rfdc OK 6.8KB 3ms OK 8.2KB 7ms OK 6.4KB 108ms OK 7.7KB 107ms MATCH
ohash OK 3.6KB 3ms OK 4.1KB 7ms OK 3.9KB 115ms OK 4.6KB 109ms MATCH
nanoevents OK 0.5KB 3ms OK 0.5KB 6ms OK 0.5KB 106ms OK 1.6KB 106ms MATCH
typebox OK 104KB 16ms OK 116KB 27ms OK 123KB 127ms OK 182KB 149ms MATCH
ts-pattern OK 10KB 4ms OK 12KB 8ms OK 11KB 116ms OK 9.6KB 111ms MATCH
valibot OK 5.9KB 13ms OK 6.8KB 16ms OK 8.0KB 124ms OK 193KB 134ms MATCH
ts-results-es OK 19KB 4ms OK 22KB 9ms OK 26KB 114ms OK 34KB 117ms MATCH
remeda OK 2.1KB 13ms OK 2.2KB 20ms OK 2.1KB 117ms OK 3.3KB 124ms MATCH
nanostores OK 4.9KB 4ms OK 5.7KB 8ms OK 5.1KB 111ms OK 8.2KB 109ms MATCH
ky OK 26KB 5ms OK 30KB 9ms OK 30KB 111ms OK 49KB 114ms MATCH
typedi OK 13KB 4ms OK 27KB 8ms OK 28KB 118ms OK 25KB 114ms MATCH
io-ts OK 23KB 9ms OK 104KB 17ms OK 117KB 126ms OK 102KB 125ms MATCH
type-fest OK 0.1KB 2ms OK 0.1KB 5ms OK 0.1KB 106ms OK 0.9KB 106ms MATCH
arktype OK 258KB 19ms OK 297KB 30ms OK 273KB 141ms OK 382KB 165ms MATCH
kysely OK 225KB 23ms OK 371KB 39ms OK 357KB 142ms OK 471KB 173ms MATCH
lodash-es@es5 OK 13KB 20ms OK 18KB 56ms OK 28KB 157ms FAIL - 0ms MATCH
clsx@es5 OK 1.0KB 3ms OK 0.6KB 6ms OK 0.6KB 110ms FAIL - 0ms MATCH
ms@es5 OK 3.9KB 3ms OK 4.5KB 6ms OK 4.0KB 104ms FAIL - 0ms MATCH
deepmerge@es5 OK 5.2KB 3ms OK 5.7KB 6ms OK 4.5KB 110ms FAIL - 0ms MATCH
fast-deep-equal@es5 OK 2.7KB 3ms OK 3.0KB 6ms OK 2.3KB 106ms FAIL - 0ms MATCH
semver@es5 OK 60KB 6ms FAIL - 10ms OK 52KB 124ms FAIL - 0ms MATCH
lodash-es@es2015 OK 13KB 23ms OK 18KB 57ms OK 28KB 156ms FAIL - 0ms MATCH
superjson@es2015 OK 23KB 6ms OK 27KB 12ms OK 24KB 122ms FAIL - 0ms MATCH
flat@es2017 OK 1.2KB 3ms OK 1.3KB 7ms OK 1.2KB 112ms FAIL - 0ms MATCH
defu@es2017 OK 1.9KB 3ms OK 2.8KB 6ms OK 1.8KB 118ms FAIL - 0ms MATCH
picomatch@es2018 OK 48KB 6ms OK 58KB 9ms OK 55KB 117ms FAIL - 0ms MATCH
semver@es2019 OK 56KB 6ms OK 66KB 13ms OK 52KB 113ms FAIL - 0ms MATCH
clsx@es2019 OK 0.5KB 3ms OK 0.6KB 7ms OK 0.6KB 118ms FAIL - 0ms MATCH
nanoid@es2019 OK 0.8KB 3ms OK 1.0KB 6ms OK 0.9KB 107ms FAIL - 0ms MATCH
dayjs@es2020 OK 11KB 3ms OK 14KB 8ms OK 11KB 118ms FAIL - 0ms MATCH
ohash@es2020 OK 3.7KB 3ms OK 4.8KB 7ms OK 3.9KB 115ms FAIL - 0ms MATCH
lru-cache@es2021 FAIL 25KB 5ms OK 35KB 9ms OK 22KB 111ms FAIL - 0ms -
nanostores@es2021 OK 1.8KB 3ms OK 2.3KB 7ms OK 1.9KB 108ms FAIL - 0ms MATCH
lodash-es@chrome80 OK 46KB 24ms OK 64KB 58ms OK 99KB 151ms FAIL - 0ms MATCH
clsx@chrome49 OK 1.0KB 2ms OK 0.6KB 6ms OK 0.7KB 113ms FAIL - 0ms MATCH
dayjs@safari14 OK 11KB 4ms OK 14KB 8ms OK 11KB 117ms FAIL - 0ms MATCH
nanoid@node16 OK 0.8KB 3ms OK 0.9KB 6ms OK 0.9KB 117ms FAIL - 0ms DIFF

Size Comparison (ZTS vs esbuild)

Project ZTS esbuild rolldown rspack Ratio Status
svelte 71KB 4.7KB 3.5KB 197KB 15.28x
pathe 14KB 3.4KB 3.0KB 13KB 3.96x
clsx@es5 1.0KB 0.6KB 0.6KB - 1.57x
clsx@chrome49 1.0KB 0.6KB 0.7KB - 1.56x
effect 666KB 477KB 368KB 1460KB 1.40x ⚠️
toolkit 65KB 51KB 39KB 126KB 1.28x ⚠️
type-fest 0.1KB 0.1KB 0.1KB 0.9KB 1.18x ⚠️
d3 116KB 100KB 96KB 150KB 1.16x ⚠️
uuid 2.2KB 2.1KB 2.0KB 3.9KB 1.05x
remeda 2.1KB 2.2KB 2.1KB 3.3KB 0.97x
dotenv 14KB 14KB 12KB 14KB 0.96x
camelcase 3.5KB 3.7KB 3.5KB 4.5KB 0.96x
change-case 3.1KB 3.2KB 3.3KB 8.0KB 0.95x
string-width 23KB 25KB 25KB 27KB 0.94x
destr 2.0KB 2.1KB 1.8KB 3.1KB 0.94x
supports-color 3.6KB 3.8KB 4.6KB 5.7KB 0.94x
flat@es2017 1.2KB 1.3KB 1.2KB - 0.94x
flat 1.2KB 1.3KB 1.2KB 4.9KB 0.94x
zustand 1.1KB 1.2KB 1.3KB 2.3KB 0.93x
decamelize 1.2KB 1.3KB 1.3KB 3.0KB 0.93x
tslib 0.8KB 0.8KB 0.8KB 18KB 0.93x
lru-cache 21KB 23KB 22KB 18KB 0.92x
cac 17KB 18KB 16KB 19KB 0.92x
wrap-ansi 32KB 35KB 34KB 38KB 0.92x
deepmerge@es5 5.2KB 5.7KB 4.5KB - 0.92x
has-flag 0.4KB 0.5KB 1.5KB 1.7KB 0.92x
valtio 6.8KB 7.5KB 8.3KB 24KB 0.91x
ansi-regex 0.4KB 0.5KB 0.4KB 1.8KB 0.91x
hookable 5.3KB 5.9KB 5.2KB 9.3KB 0.91x
yargs 167KB 185KB 167KB 227KB 0.90x
fast-deep-equal@es5 2.7KB 3.0KB 2.3KB - 0.90x
clsx 0.6KB 0.6KB 0.7KB 1.5KB 0.90x
jotai 21KB 23KB 20KB 26KB 0.90x
rxjs 329KB 367KB 308KB 325KB 0.90x
clsx@es2019 0.5KB 0.6KB 0.6KB - 0.90x
defu 1.9KB 2.1KB 1.8KB 3.0KB 0.89x
typebox 104KB 116KB 123KB 182KB 0.89x
ts-pattern 10KB 12KB 11KB 9.6KB 0.89x
superjson 23KB 26KB 24KB 32KB 0.89x
ohash 3.6KB 4.1KB 3.9KB 4.6KB 0.88x
ky 26KB 30KB 30KB 49KB 0.88x
strip-ansi 0.7KB 0.8KB 0.8KB 2.2KB 0.88x
ajv 214KB 243KB 208KB 239KB 0.88x
superjson@es2015 23KB 27KB 24KB - 0.87x
ms@es5 3.9KB 4.5KB 4.0KB - 0.87x
zlib 97KB 112KB 102KB 222KB 0.87x
chalk 13KB 15KB 14KB 17KB 0.87x
deepmerge 4.8KB 5.5KB 4.5KB 6.0KB 0.87x
arktype 258KB 297KB 273KB 382KB 0.87x
tiny-invariant 0.5KB 0.6KB 0.6KB 1.5KB 0.87x
valibot 5.9KB 6.8KB 8.0KB 193KB 0.87x
p-limit 2.6KB 3.0KB 2.7KB 5.2KB 0.86x
preact 13KB 15KB 13KB 13KB 0.86x
ts-results-es 19KB 22KB 26KB 34KB 0.86x
zod 102KB 119KB 98KB 147KB 0.86x
nanostores 4.9KB 5.7KB 5.1KB 8.2KB 0.85x
jsonwebtoken 117KB 137KB 141KB 159KB 0.85x
mitt 0.5KB 0.6KB 0.7KB 1.5KB 0.85x
semver@es2019 56KB 66KB 52KB - 0.85x
semver 56KB 66KB 52KB 67KB 0.85x
eventemitter3 6.6KB 7.8KB 9.2KB 10KB 0.85x
nanoevents 0.5KB 0.5KB 0.5KB 1.6KB 0.85x
immer 18KB 22KB 19KB 36KB 0.84x
color-convert 25KB 30KB 27KB 27KB 0.84x
cookie 8.2KB 9.8KB 5.6KB 13KB 0.84x
rfdc 6.8KB 8.2KB 6.4KB 7.7KB 0.84x
path-to-regexp 12KB 14KB 8.0KB 15KB 0.84x
react 53KB 64KB 53KB 18KB 0.83x
three 246KB 296KB 276KB 1280KB 0.83x
retry 7.1KB 8.6KB 7.0KB 7.3KB 0.83x
fast-glob 165KB 199KB 187KB 201KB 0.83x
picomatch@es2018 48KB 58KB 55KB - 0.83x
picomatch 48KB 58KB 55KB 61KB 0.83x
qs 79KB 95KB 81KB 92KB 0.83x
tanstack-query 47KB 57KB 49KB 59KB 0.82x
micromatch 82KB 100KB 100KB 108KB 0.82x
content-type 4.3KB 5.3KB 4.2KB 6.0KB 0.82x
react-dom 1110KB 1355KB 1116KB 534KB 0.82x
depd 9.6KB 12KB 11KB 13KB 0.82x
which 7.8KB 9.5KB 7.7KB 8.7KB 0.82x
vue 1635KB 2009KB 1606KB 1216KB 0.81x
escape-string-regexp 0.3KB 0.4KB 0.4KB 1.5KB 0.81x
ms 3.5KB 4.3KB 4.0KB 5.0KB 0.81x
fast-deep-equal 2.3KB 2.9KB 2.3KB 3.2KB 0.81x
minimatch 46KB 56KB 47KB 90KB 0.81x
yaml 211KB 261KB 228KB 284KB 0.81x
bytes 3.4KB 4.3KB 4.3KB 5.5KB 0.81x
nanoid@es2019 0.8KB 1.0KB 0.9KB - 0.80x
merge-descriptors 1.9KB 2.3KB 1.8KB 2.9KB 0.80x
nanoid 0.8KB 0.9KB 0.9KB 2.6KB 0.80x
vary 3.0KB 3.7KB 3.5KB 5.1KB 0.80x
nanoid@node16 0.8KB 0.9KB 0.9KB - 0.80x
nanostores@es2021 1.8KB 2.3KB 1.9KB - 0.80x
cheerio 1743KB 2186KB 1747KB 2387KB 0.80x
cross-spawn 15KB 18KB 15KB 19KB 0.80x
dayjs@es2020 11KB 14KB 11KB - 0.79x
dayjs 11KB 14KB 11KB 8.9KB 0.79x
dayjs@safari14 11KB 14KB 11KB - 0.79x
object-assign 3.0KB 3.8KB 2.8KB 4.3KB 0.79x
date-fns 37KB 47KB 77KB 102KB 0.79x
statuses 4.5KB 5.8KB 5.3KB 6.1KB 0.78x
signal-exit 5.2KB 6.8KB 6.5KB 12KB 0.77x
ohash@es2020 3.7KB 4.8KB 3.9KB - 0.77x
type-is 186KB 244KB 210KB 179KB 0.76x
is-glob 4.8KB 6.4KB 4.9KB 6.0KB 0.76x
mime-types 178KB 235KB 198KB 164KB 0.76x
on-finished 5.1KB 6.9KB 6.6KB 8.3KB 0.75x
etag 2.8KB 3.7KB 3.3KB 4.6KB 0.75x
hono 43KB 59KB 52KB 68KB 0.73x
glob-parent 6.2KB 8.4KB 6.3KB 7.9KB 0.73x
lodash-es@chrome80 46KB 64KB 99KB - 0.72x
lodash-es 46KB 64KB 99KB 122KB 0.72x
safe-buffer 2.7KB 3.8KB 1.7KB 3.8KB 0.72x
bcryptjs 32KB 46KB 47KB 60KB 0.70x
lodash-es@es2015 13KB 18KB 28KB - 0.70x
lodash-es@es5 13KB 18KB 28KB - 0.70x
express 787KB 1138KB 908KB 917KB 0.69x
defu@es2017 1.9KB 2.8KB 1.8KB - 0.68x
drizzle-orm 20KB 30KB 14KB 35KB 0.67x
neverthrow 11KB 18KB 13KB 19KB 0.62x
kysely 225KB 371KB 357KB 471KB 0.61x
commander 68KB 119KB 100KB 121KB 0.57x
iconv-lite 303KB 543KB 319KB 325KB 0.56x
mobx 135KB 271KB 234KB 190KB 0.50x
typedi 13KB 27KB 28KB 25KB 0.49x
supabase 312KB 759KB 706KB 779KB 0.41x
memoize-one 1.2KB 3.1KB 2.3KB 2.4KB 0.39x
io-ts 23KB 104KB 117KB 102KB 0.22x
solid-js 0.3KB 2.4KB 2.2KB 23KB 0.14x
fp-ts 8.8KB 70KB 100KB 50KB 0.13x
graphql 55KB 604KB 547KB 100KB 0.09x

Average ratio: 0.96x | Smaller: 122 | Similar(±10%): 1 | Larger: 8

Auto-generated by CI on 2026-04-06 13:20 UTC

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 6, 2026

Benchmark Results (CI)

macos-latest

transpile — small (100 lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 5 3 7 1.0x
esbuild 8 6 9 1.6x
Bun 8 7 9 1.6x
oxc (node) 99 78 108 19.8x
SWC 208 190 219 41.6x

transpile — medium (1K lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 8 6 11 1.0x
esbuild 9 6 13 1.1x
Bun 11 10 12 1.4x
oxc (node) 104 92 111 13.0x
SWC 199 180 230 24.9x

transpile — large (5K lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
esbuild 6 5 7 1.0x
ZTS 14 13 15 2.3x
Bun 20 18 24 3.3x
oxc (node) 104 85 123 17.3x
SWC 243 231 258 40.5x

bundle — small (10 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 7 6 10 1.0x
Bun 12 10 13 1.7x
esbuild 18 10 34 2.6x
rolldown 180 165 190 25.7x
rspack 203 170 224 29.0x
webpack 631 544 727 90.1x

bundle — medium (50 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 9 8 11 1.0x
Bun 15 12 19 1.7x
esbuild 16 13 19 1.8x
rolldown 225 191 253 25.0x
rspack 246 188 276 27.3x
webpack 673 593 755 74.8x

bundle — large (200 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 14 10 20 1.0x
Bun 15 14 15 1.1x
esbuild 26 21 30 1.9x
rolldown 264 201 304 18.9x

ubuntu-latest

transpile — small (100 lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 1 1 2 1.0x
esbuild 2 2 2 2.0x
Bun 2 2 3 2.0x
oxc (node) 32 30 35 32.0x
SWC 96 93 101 96.0x

transpile — medium (1K lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
esbuild 2 2 2 1.0x
ZTS 4 4 4 2.0x
Bun 4 4 4 2.0x
oxc (node) 32 31 33 16.0x
SWC 99 98 100 49.5x

transpile — large (5K lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
esbuild 2 2 2 1.0x
Bun 10 10 11 5.0x
ZTS 16 16 16 8.0x
oxc (node) 33 32 35 16.5x
SWC 118 117 121 59.0x

bundle — small (10 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 2 2 2 1.0x
Bun 4 4 4 2.0x
esbuild 6 5 6 3.0x
rolldown 109 106 117 54.5x
rspack 113 112 114 56.5x
webpack 525 524 527 262.5x

bundle — medium (50 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 3 3 3 1.0x
Bun 5 5 5 1.7x
esbuild 7 7 8 2.3x
rolldown 113 107 118 37.7x
rspack 119 118 120 39.7x
webpack 530 527 537 176.7x

bundle — large (200 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 8 7 8 1.0x
Bun 9 8 9 1.1x
esbuild 14 14 15 1.8x
rolldown 122 116 130 15.3x

windows-latest

transpile — small (100 lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 9 9 10 1.0x
Bun 17 17 18 1.9x
oxc (node) 61 59 64 6.8x

transpile — medium (1K lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 11 11 11 1.0x
Bun 18 17 18 1.6x
oxc (node) 60 58 62 5.5x

transpile — large (5K lines)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
Bun 19 18 20 1.0x
ZTS 22 21 24 1.2x
oxc (node) 65 59 69 3.4x

bundle — small (10 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 13 13 14 1.0x
Bun 34 32 35 2.6x

bundle — medium (50 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 16 16 17 1.0x
Bun 37 35 40 2.3x

bundle — large (200 modules)

Tool Avg (ms) Min (ms) Max (ms) vs fastest
ZTS 30 28 31 1.0x
Bun 46 46 47 1.5x

Auto-generated by CI on 2026-04-06 13:21 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant