Skip to content

chore(agent): add tc39-mcp spec lookup workflow#695

Merged
frostney merged 4 commits into
mainfrom
t3code/7b30c15c
Jun 2, 2026
Merged

chore(agent): add tc39-mcp spec lookup workflow#695
frostney merged 4 commits into
mainfrom
t3code/7b30c15c

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Jun 2, 2026

Summary

  • Add a pinned .mcp.example.json for local tc39-mcp stdio setup.
  • Document tc39-mcp as the preferred agent path for ECMA-262 / ECMA-402 lookup and issue validation.
  • Add a weekly tc39-mcp npm pin bump workflow plus a small Bun updater script.
  • Non-goal: this does not change GocciaScript runtime behavior, build outputs, or conformance gates.

Testing

  • Verified no regressions and confirmed the new feature or bugfix in end-to-end JavaScript/TypeScript tests
    • jq -e . .mcp.example.json
    • bun scripts/tc39-mcp-bump-pin.ts 0.1.4
    • Temp-fixture bump test across .mcp.example.json, AGENTS.md, and the issue-validation skill
    • git diff --check
  • Updated documentation
  • Optional: Verified no regressions and confirmed the new feature or bugfix in native Pascal tests (if AST, scope, evaluator, or value types changed)
  • Optional: Verified no benchmark regressions or confirmed benchmark coverage for the change

@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 2, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
gocciascript-homepage Ignored Ignored Preview Jun 2, 2026 5:19am

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 2, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7a294a1c-c4cc-445e-9576-f8c541a21e4d

📥 Commits

Reviewing files that changed from the base of the PR and between 5d34f20 and 81e8bc4.

📒 Files selected for processing (3)
  • .github/workflows/test262-bump.yml
  • .github/workflows/toml-test-bump.yml
  • .github/workflows/yaml-test-bump.yml

📝 Walkthrough

Walkthrough

Adds a pinned tc39-mcp server entry and guidance, implements a script to update checked-in tc39-mcp@ pins, schedules a weekly GitHub Actions workflow to run the script and open/update a PR when pins change, and pins several workflow action references to commit SHAs.

Changes

tc39-mcp Integration and Automation

Layer / File(s) Summary
tc39-mcp Server Configuration
.mcp.example.json
Introduces mcpServers.tc39 entry configured to run tc39-mcp@0.1.4 via npx, establishing the standard MCP server setup for specification lookups.
tc39-mcp Usage Documentation in Agent Skills and Guidance
.agents/skills/gocciascript-issue-validation/SKILL.md, AGENTS.md
Documents how agent skills and assistants should consult ECMA-262/ECMA-402 specs using the configured server, specifying MCP methods (spec.search, clause.get, spec.crossrefs, spec.diff/spec.history, test262.search, proposal.list/proposal.get), required metadata recording (edition, clause id, section, snapshot SHA), and official TC39 source fallback when the server is unavailable.
Version Management Script Implementation
scripts/tc39-mcp-bump-pin.ts
Implements a Bun/Node script that validates semver input, reads target files, replaces all tc39-mcp@... occurrences with the new version via regex, writes back only on changes, and reports errors for missing pins or invalid arguments.
Scheduled Version Bump GitHub Actions Workflow
.github/workflows/tc39-mcp-bump.yml
Adds a weekly workflow (Mondays 07:30 UTC, manual dispatch supported) that fetches the latest tc39-mcp npm version, runs the bump script to update pinned files, detects changes via git diff, and opens/updates a pull request on branch chore/tc39-mcp-bump with versioned commit messages and labels when updates are found.
Pin CI workflow action references
.github/workflows/test262-bump.yml, .github/workflows/toml-test-bump.yml, .github/workflows/yaml-test-bump.yml
Pins actions/checkout, oven-sh/setup-bun, and peter-evans/create-pull-request steps to specific commit SHAs instead of floating tags; workflow logic otherwise unchanged.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

documentation, internal, automation

Possibly related PRs

  • frostney/GocciaScript#689: Modifies the same skill documentation (.agents/skills/gocciascript-issue-validation/SKILL.md) with complementary Test262 validation guidance.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the main change: adding a tc39-mcp spec lookup workflow with supporting configuration and documentation.
Description check ✅ Passed The description includes a detailed summary of changes, non-goals, and comprehensive testing verification. All key required sections from the template are present and well-documented.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Suite Timing

Test Runner (interpreted: 9,853 passed; bytecode: 9,853 passed)
Metric Interpreted Bytecode
Total 9853 9853
Passed 9853 ✅ 9853 ✅
Workers 4 4
Test Duration 3.61s 3.91s
Lex (cumulative) 419.1ms 478.6ms
Parse (cumulative) 298.0ms 342.8ms
Compile (cumulative) 651.5ms
Execute (cumulative) 5.51s 4.96s
Engine Total (cumulative) 6.23s 6.43s
Lex (avg/worker) 104.8ms 119.7ms
Parse (avg/worker) 74.5ms 85.7ms
Compile (avg/worker) 162.9ms
Execute (avg/worker) 1.38s 1.24s
Engine Total (avg/worker) 1.56s 1.61s

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.

Metric Interpreted Bytecode
GC Live 287.12 MiB 279.55 MiB
GC Peak Live 287.13 MiB 279.55 MiB
GC Allocated During Run 291.66 MiB 284.08 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1 1
GC Collected Objects 87 87
Heap Start Allocated 160.6 KiB 160.6 KiB
Heap End Allocated 1.54 MiB 1.54 MiB
Heap Delta Allocated 1.38 MiB 1.38 MiB
Heap Delta Free 890.4 KiB 890.4 KiB
Benchmarks (interpreted: 407; bytecode: 407)
Metric Interpreted Bytecode
Total 407 407
Workers 4 4
Duration 2.56min 2.42min

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.

Metric Interpreted Bytecode
GC Live 3.97 MiB 3.97 MiB
GC Peak Live 126.07 MiB 131.62 MiB
GC Allocated During Run 17.13 GiB 10.86 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 2,829 2,662
GC Collected Objects 273,930,654 243,237,975
Heap Start Allocated 1.27 MiB 1.27 MiB
Heap End Allocated 1.27 MiB 1.27 MiB
Heap Delta Allocated 128 B 128 B

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Benchmark Results

407 benchmarks

Interpreted: 🟢 353 improved · 🔴 19 regressed · 35 unchanged · avg +9.3%
Bytecode: 🟢 280 improved · 🔴 41 regressed · 86 unchanged · avg +7.3%

arraybuffer.js — Interp: 🟢 12, 2 unch. · avg +7.3% · Bytecode: 🟢 10, 🔴 1, 3 unch. · avg +5.6%
Benchmark Interpreted Δ Bytecode Δ
create ArrayBuffer(0) 152,516 ops/sec [124,418..156,412] → 169,553 ops/sec [162,797..174,064] 🟢 +11.2% 189,078 ops/sec [184,679..193,653] → 203,583 ops/sec [157,838..207,114] ~ overlap (+7.7%)
create ArrayBuffer(64) 153,246 ops/sec [152,538..154,356] → 166,198 ops/sec [165,668..166,812] 🟢 +8.5% 185,332 ops/sec [183,900..186,103] → 195,808 ops/sec [193,947..198,802] 🟢 +5.7%
create ArrayBuffer(1024) 135,950 ops/sec [131,265..139,972] → 142,177 ops/sec [140,884..143,496] 🟢 +4.6% 162,259 ops/sec [161,487..162,590] → 165,047 ops/sec [163,041..166,389] 🟢 +1.7%
create ArrayBuffer(8192) 76,975 ops/sec [74,672..80,077] → 73,810 ops/sec [73,024..75,225] ~ overlap (-4.1%) 94,134 ops/sec [93,639..94,917] → 81,033 ops/sec [80,894..82,497] 🔴 -13.9%
slice full buffer (64 bytes) 178,491 ops/sec [174,600..182,246] → 200,271 ops/sec [197,778..201,763] 🟢 +12.2% 228,444 ops/sec [228,129..229,374] → 247,741 ops/sec [246,009..248,456] 🟢 +8.4%
slice half buffer (512 of 1024 bytes) 159,005 ops/sec [102,826..161,995] → 179,327 ops/sec [171,738..196,978] 🟢 +12.8% 204,718 ops/sec [203,192..206,094] → 216,911 ops/sec [212,306..217,998] 🟢 +6.0%
slice with negative indices 156,737 ops/sec [156,136..157,011] → 169,074 ops/sec [167,738..169,734] 🟢 +7.9% 212,509 ops/sec [210,233..214,411] → 227,091 ops/sec [226,466..227,569] 🟢 +6.9%
slice empty range 180,617 ops/sec [179,664..182,128] → 195,627 ops/sec [194,910..196,477] 🟢 +8.3% 227,500 ops/sec [219,184..233,184] → 233,147 ops/sec [229,964..238,655] ~ overlap (+2.5%)
byteLength access 412,124 ops/sec [406,013..419,935] → 425,175 ops/sec [423,114..436,554] 🟢 +3.2% 398,248 ops/sec [395,961..400,214] → 457,072 ops/sec [448,921..460,973] 🟢 +14.8%
Symbol.toStringTag access 339,432 ops/sec [334,951..345,075] → 347,361 ops/sec [338,159..357,522] ~ overlap (+2.3%) 294,994 ops/sec [291,722..296,225] → 330,734 ops/sec [329,786..335,769] 🟢 +12.1%
ArrayBuffer.isView 249,557 ops/sec [243,323..252,509] → 266,272 ops/sec [260,873..269,622] 🟢 +6.7% 280,030 ops/sec [277,804..283,122] → 317,210 ops/sec [314,172..319,211] 🟢 +13.3%
clone ArrayBuffer(64) 166,908 ops/sec [166,538..168,029] → 177,343 ops/sec [175,331..179,280] 🟢 +6.3% 204,781 ops/sec [203,408..205,162] → 220,271 ops/sec [218,300..221,830] 🟢 +7.6%
clone ArrayBuffer(1024) 143,766 ops/sec [141,573..144,404] → 159,518 ops/sec [153,282..160,272] 🟢 +11.0% 176,763 ops/sec [175,601..177,993] → 176,678 ops/sec [172,842..180,877] ~ overlap (-0.0%)
clone ArrayBuffer inside object 113,844 ops/sec [112,542..115,453] → 126,657 ops/sec [122,578..127,509] 🟢 +11.3% 131,288 ops/sec [130,415..131,857] → 139,183 ops/sec [138,610..140,327] 🟢 +6.0%
arrays.js — Interp: 🟢 17, 2 unch. · avg +11.5% · Bytecode: 🟢 16, 3 unch. · avg +7.4%
Benchmark Interpreted Δ Bytecode Δ
Array.from length 100 2,935 ops/sec [2,331..3,073] → 3,289 ops/sec [2,702..3,322] ~ overlap (+12.0%) 4,210 ops/sec [4,102..4,242] → 4,674 ops/sec [4,455..4,819] 🟢 +11.0%
Array.from 10 elements 82,711 ops/sec [81,755..83,840] → 92,854 ops/sec [91,088..94,483] 🟢 +12.3% 92,719 ops/sec [92,456..92,863] → 98,382 ops/sec [96,676..99,581] 🟢 +6.1%
Array.of 10 elements 103,334 ops/sec [102,977..103,958] → 118,132 ops/sec [116,770..120,360] 🟢 +14.3% 122,908 ops/sec [121,563..123,444] → 133,230 ops/sec [131,708..135,003] 🟢 +8.4%
spread into new array 128,088 ops/sec [125,929..129,702] → 139,769 ops/sec [137,890..143,161] 🟢 +9.1% 81,249 ops/sec [80,150..81,743] → 79,732 ops/sec [79,102..82,300] ~ overlap (-1.9%)
map over 50 elements 4,912 ops/sec [4,688..5,058] → 5,477 ops/sec [5,421..5,656] 🟢 +11.5% 7,390 ops/sec [7,357..7,447] → 7,774 ops/sec [7,659..7,822] 🟢 +5.2%
filter over 50 elements 4,632 ops/sec [4,318..4,885] → 5,197 ops/sec [4,737..5,360] ~ overlap (+12.2%) 7,268 ops/sec [7,243..7,402] → 7,585 ops/sec [7,500..7,616] 🟢 +4.4%
reduce sum 50 elements 5,035 ops/sec [4,983..5,073] → 6,071 ops/sec [5,657..6,209] 🟢 +20.6% 6,889 ops/sec [6,806..6,943] → 7,935 ops/sec [6,732..8,006] ~ overlap (+15.2%)
forEach over 50 elements 4,776 ops/sec [4,666..4,801] → 5,380 ops/sec [5,312..5,524] 🟢 +12.6% 7,490 ops/sec [7,282..7,600] → 8,282 ops/sec [8,119..8,344] 🟢 +10.6%
find in 50 elements 6,560 ops/sec [6,486..6,631] → 7,306 ops/sec [7,265..7,372] 🟢 +11.4% 9,558 ops/sec [9,507..9,599] → 10,571 ops/sec [10,519..10,594] 🟢 +10.6%
sort 20 elements 2,747 ops/sec [2,726..2,775] → 3,077 ops/sec [3,048..3,171] 🟢 +12.0% 4,117 ops/sec [4,106..4,120] → 4,754 ops/sec [4,684..4,794] 🟢 +15.5%
flat nested array 46,067 ops/sec [45,376..47,224] → 50,338 ops/sec [49,687..51,530] 🟢 +9.3% 50,274 ops/sec [49,631..50,550] → 53,348 ops/sec [53,203..53,575] 🟢 +6.1%
flatMap 22,399 ops/sec [22,015..22,741] → 24,713 ops/sec [24,078..24,970] 🟢 +10.3% 28,242 ops/sec [27,964..28,542] → 29,073 ops/sec [28,432..29,480] ~ overlap (+2.9%)
map inside map (5x5) 5,671 ops/sec [5,607..5,729] → 6,271 ops/sec [6,162..6,330] 🟢 +10.6% 7,656 ops/sec [7,535..7,680] → 8,061 ops/sec [7,982..8,084] 🟢 +5.3%
filter inside map (5x10) 3,842 ops/sec [3,804..3,921] → 4,271 ops/sec [4,189..4,444] 🟢 +11.2% 5,449 ops/sec [5,434..5,480] → 5,846 ops/sec [5,777..5,856] 🟢 +7.3%
reduce inside map (5x10) 4,100 ops/sec [4,079..4,221] → 4,622 ops/sec [4,509..4,673] 🟢 +12.7% 5,562 ops/sec [5,469..5,679] → 5,921 ops/sec [5,887..5,962] 🟢 +6.5%
forEach inside forEach (5x10) 3,954 ops/sec [3,887..3,961] → 4,421 ops/sec [4,356..4,484] 🟢 +11.8% 6,294 ops/sec [6,138..6,385] → 6,659 ops/sec [6,569..6,666] 🟢 +5.8%
find inside some (10x10) 3,092 ops/sec [2,943..3,114] → 3,312 ops/sec [3,272..3,391] 🟢 +7.1% 4,571 ops/sec [4,447..4,594] → 5,022 ops/sec [4,754..5,159] 🟢 +9.9%
map+filter chain nested (5x20) 1,155 ops/sec [1,125..1,200] → 1,265 ops/sec [1,228..1,290] 🟢 +9.6% 1,699 ops/sec [1,692..1,705] → 1,854 ops/sec [1,782..1,923] 🟢 +9.1%
reduce flatten (10x5) 13,467 ops/sec [13,289..13,694] → 14,466 ops/sec [14,074..15,386] 🟢 +7.4% 6,848 ops/sec [6,808..6,880] → 7,015 ops/sec [6,956..7,065] 🟢 +2.4%
async-await.js — Interp: 🟢 4, 2 unch. · avg +9.7% · Bytecode: 🟢 5, 1 unch. · avg +5.3%
Benchmark Interpreted Δ Bytecode Δ
single await 137,812 ops/sec [90,513..152,031] → 154,464 ops/sec [133,796..156,324] ~ overlap (+12.1%) 151,071 ops/sec [89,234..153,639] → 159,880 ops/sec [143,174..162,312] ~ overlap (+5.8%)
multiple awaits 67,052 ops/sec [65,586..67,885] → 72,792 ops/sec [71,896..73,905] 🟢 +8.6% 68,465 ops/sec [67,555..68,991] → 71,254 ops/sec [70,752..72,098] 🟢 +4.1%
await non-Promise value 266,829 ops/sec [260,666..271,443] → 292,090 ops/sec [288,729..299,584] 🟢 +9.5% 365,852 ops/sec [363,357..367,072] → 387,276 ops/sec [382,358..392,030] 🟢 +5.9%
await with try/catch 105,542 ops/sec [104,042..109,949] → 116,870 ops/sec [114,988..119,830] 🟢 +10.7% 145,136 ops/sec [143,848..146,000] → 154,428 ops/sec [153,705..155,056] 🟢 +6.4%
await Promise.all 22,679 ops/sec [20,012..22,810] → 24,816 ops/sec [24,348..25,061] 🟢 +9.4% 23,348 ops/sec [22,985..23,501] → 24,355 ops/sec [24,173..24,432] 🟢 +4.3%
nested async function call 73,746 ops/sec [72,851..74,679] → 79,549 ops/sec [72,863..81,052] ~ overlap (+7.9%) 92,344 ops/sec [91,101..93,456] → 97,306 ops/sec [96,906..97,849] 🟢 +5.4%
async-generators.js — Interp: 🟢 1, 1 unch. · avg +12.5% · Bytecode: 🟢 1, 1 unch. · avg +2.7%
Benchmark Interpreted Δ Bytecode Δ
for-await-of over async generator 2,126 ops/sec [1,760..2,137] → 2,347 ops/sec [1,989..2,360] ~ overlap (+10.4%) 2,618 ops/sec [2,550..2,621] → 2,658 ops/sec [2,259..2,708] ~ overlap (+1.5%)
async generator with await in body 19,280 ops/sec [19,191..19,494] → 22,086 ops/sec [21,834..22,203] 🟢 +14.5% 22,307 ops/sec [21,852..22,648] → 23,172 ops/sec [22,848..23,184] 🟢 +3.9%
base64.js — Interp: 🟢 3, 🔴 6, 1 unch. · avg +0.7% · Bytecode: 🟢 3, 🔴 7 · avg -3.9%
Benchmark Interpreted Δ Bytecode Δ
short ASCII (13 chars) 3,009 ops/sec [3,002..3,039] → 3,457 ops/sec [3,334..3,513] 🟢 +14.9% 3,266 ops/sec [3,240..3,325] → 3,417 ops/sec [3,399..3,431] 🟢 +4.6%
medium ASCII (450 chars) 113 ops/sec [110..114] → 124 ops/sec [121..131] 🟢 +9.8% 121 ops/sec [121..121] → 126 ops/sec [125..127] 🟢 +3.4%
Latin-1 characters 4,422 ops/sec [3,236..4,541] → 5,007 ops/sec [4,951..5,113] 🟢 +13.2% 4,819 ops/sec [4,792..4,833] → 5,047 ops/sec [5,000..5,214] 🟢 +4.7%
short base64 (20 chars) 692 ops/sec [687..697] → 652 ops/sec [645..656] 🔴 -5.8% 705 ops/sec [698..707] → 656 ops/sec [649..663] 🔴 -7.0%
medium base64 (600 chars) 25 ops/sec [25..25] → 24 ops/sec [24..24] 🔴 -6.5% 26 ops/sec [26..26] → 24 ops/sec [24..24] 🔴 -7.9%
Latin-1 output 1,077 ops/sec [1,062..1,085] → 1,020 ops/sec [1,002..1,028] 🔴 -5.3% 1,095 ops/sec [1,075..1,107] → 1,010 ops/sec [1,003..1,013] 🔴 -7.8%
forgiving (no padding) 1,682 ops/sec [1,639..1,696] → 1,610 ops/sec [1,589..1,616] 🔴 -4.3% 1,726 ops/sec [1,719..1,733] → 1,590 ops/sec [1,581..1,603] 🔴 -7.9%
with whitespace 641 ops/sec [634..648] → 615 ops/sec [610..622] 🔴 -4.1% 674 ops/sec [669..680] → 612 ops/sec [607..624] 🔴 -9.1%
atob(btoa(short)) 557 ops/sec [556..560] → 550 ops/sec [536..562] ~ overlap (-1.3%) 591 ops/sec [584..593] → 550 ops/sec [547..555] 🔴 -6.9%
atob(btoa(medium)) 20 ops/sec [20..21] → 20 ops/sec [20..20] 🔴 -3.1% 21 ops/sec [20..21] → 20 ops/sec [20..20] 🔴 -5.1%
classes.js — Interp: 🟢 27, 4 unch. · avg +9.2% · Bytecode: 🟢 24, 7 unch. · avg +8.4%
Benchmark Interpreted Δ Bytecode Δ
simple class new 51,672 ops/sec [50,956..51,851] → 60,531 ops/sec [56,465..61,073] 🟢 +17.1% 69,530 ops/sec [39,805..72,751] → 75,249 ops/sec [74,588..75,619] 🟢 +8.2%
class with defaults 39,506 ops/sec [38,638..39,913] → 47,583 ops/sec [47,254..48,206] 🟢 +20.4% 46,759 ops/sec [46,663..47,409] → 53,127 ops/sec [40,458..53,998] ~ overlap (+13.6%)
50 instances via Array.from 1,726 ops/sec [1,708..1,750] → 2,052 ops/sec [2,016..2,076] 🟢 +18.9% 2,304 ops/sec [2,233..2,334] → 2,555 ops/sec [2,525..2,600] 🟢 +10.9%
instance method call 25,058 ops/sec [24,770..25,684] → 29,781 ops/sec [29,718..30,244] 🟢 +18.8% 34,578 ops/sec [34,470..34,690] → 39,476 ops/sec [39,152..39,823] 🟢 +14.2%
static method call 41,290 ops/sec [40,569..41,390] → 48,707 ops/sec [43,357..50,239] 🟢 +18.0% 77,266 ops/sec [77,123..77,394] → 85,313 ops/sec [84,692..86,191] 🟢 +10.4%
single-level inheritance 21,083 ops/sec [19,873..21,793] → 23,610 ops/sec [23,143..24,427] 🟢 +12.0% 27,469 ops/sec [27,167..27,621] → 29,834 ops/sec [29,208..30,281] 🟢 +8.6%
two-level inheritance 18,521 ops/sec [18,108..18,704] → 20,196 ops/sec [19,967..21,446] 🟢 +9.0% 22,071 ops/sec [21,874..22,222] → 23,727 ops/sec [23,624..24,340] 🟢 +7.5%
private field access 27,963 ops/sec [27,034..28,531] → 31,098 ops/sec [30,563..31,921] 🟢 +11.2% 24,540 ops/sec [23,976..24,750] → 27,949 ops/sec [27,867..28,133] 🟢 +13.9%
private methods 31,399 ops/sec [30,892..31,730] → 34,291 ops/sec [33,299..35,262] 🟢 +9.2% 27,747 ops/sec [27,602..27,788] → 31,420 ops/sec [31,030..31,874] 🟢 +13.2%
getter/setter access 28,269 ops/sec [28,167..28,378] → 30,890 ops/sec [30,489..31,284] 🟢 +9.3% 38,275 ops/sec [37,887..38,688] → 42,881 ops/sec [42,703..43,066] 🟢 +12.0%
class decorator (identity) 37,497 ops/sec [37,327..37,846] → 41,270 ops/sec [40,141..41,896] 🟢 +10.1% 42,441 ops/sec [41,357..42,618] → 46,397 ops/sec [44,255..46,812] 🟢 +9.3%
class decorator (wrapping) 22,086 ops/sec [21,866..22,134] → 24,260 ops/sec [23,705..24,730] 🟢 +9.8% 23,610 ops/sec [23,342..23,844] → 24,916 ops/sec [24,393..25,056] 🟢 +5.5%
identity method decorator 28,241 ops/sec [27,245..29,032] → 30,100 ops/sec [29,187..31,674] 🟢 +6.6% 34,357 ops/sec [33,901..34,817] → 35,440 ops/sec [34,961..37,188] 🟢 +3.2%
wrapping method decorator 22,701 ops/sec [22,586..22,915] → 24,378 ops/sec [24,162..25,260] 🟢 +7.4% 26,617 ops/sec [26,323..27,266] → 27,487 ops/sec [27,093..28,884] ~ overlap (+3.3%)
stacked method decorators (x3) 15,241 ops/sec [15,085..15,384] → 16,565 ops/sec [16,463..16,677] 🟢 +8.7% 17,714 ops/sec [17,424..17,910] → 18,175 ops/sec [17,530..18,621] ~ overlap (+2.6%)
identity field decorator 30,867 ops/sec [30,346..31,004] → 33,442 ops/sec [31,830..35,467] 🟢 +8.3% 33,990 ops/sec [33,488..34,524] → 33,672 ops/sec [32,053..34,900] ~ overlap (-0.9%)
field initializer decorator 25,715 ops/sec [25,535..26,125] → 27,529 ops/sec [27,183..28,561] 🟢 +7.1% 28,093 ops/sec [27,135..29,098] → 29,531 ops/sec [28,932..30,335] ~ overlap (+5.1%)
getter decorator (identity) 25,812 ops/sec [25,537..25,871] → 27,782 ops/sec [27,720..28,468] 🟢 +7.6% 25,535 ops/sec [25,081..26,132] → 26,079 ops/sec [25,794..26,266] ~ overlap (+2.1%)
setter decorator (identity) 21,631 ops/sec [21,520..21,787] → 22,923 ops/sec [22,603..22,985] 🟢 +6.0% 19,726 ops/sec [19,429..20,299] → 21,768 ops/sec [21,319..21,899] 🟢 +10.4%
static method decorator 28,692 ops/sec [28,300..29,064] → 31,313 ops/sec [30,830..32,322] 🟢 +9.1% 37,244 ops/sec [36,510..38,691] → 37,474 ops/sec [37,197..38,085] ~ overlap (+0.6%)
static field decorator 35,358 ops/sec [35,135..36,137] → 36,382 ops/sec [35,946..38,022] ~ overlap (+2.9%) 37,288 ops/sec [36,912..38,096] → 39,649 ops/sec [38,302..41,718] 🟢 +6.3%
private method decorator 23,049 ops/sec [22,696..23,242] → 24,564 ops/sec [24,076..25,582] 🟢 +6.6% 26,180 ops/sec [25,721..26,442] → 28,318 ops/sec [27,630..28,970] 🟢 +8.2%
private field decorator 24,935 ops/sec [24,454..25,416] → 26,412 ops/sec [26,096..27,015] 🟢 +5.9% 23,118 ops/sec [23,077..23,594] → 25,118 ops/sec [24,363..25,609] 🟢 +8.7%
plain auto-accessor (no decorator) 42,819 ops/sec [41,481..43,558] → 45,211 ops/sec [44,098..45,676] 🟢 +5.6% 39,479 ops/sec [39,112..41,265] → 43,498 ops/sec [42,545..43,708] 🟢 +10.2%
auto-accessor with decorator 23,044 ops/sec [22,333..23,998] → 24,827 ops/sec [23,469..25,184] ~ overlap (+7.7%) 22,557 ops/sec [21,865..23,260] → 26,520 ops/sec [25,309..27,998] 🟢 +17.6%
decorator writing metadata 19,322 ops/sec [19,168..19,379] → 20,325 ops/sec [19,525..20,910] 🟢 +5.2% 21,408 ops/sec [21,144..22,263] → 22,689 ops/sec [22,387..23,175] 🟢 +6.0%
static getter read 48,772 ops/sec [48,165..49,999] → 49,070 ops/sec [48,960..50,520] ~ overlap (+0.6%) 61,584 ops/sec [61,258..62,095] → 68,707 ops/sec [67,016..69,711] 🟢 +11.6%
static getter/setter pair 36,879 ops/sec [36,689..37,347] → 39,460 ops/sec [38,344..40,124] 🟢 +7.0% 47,244 ops/sec [45,651..48,224] → 51,021 ops/sec [50,488..51,220] 🟢 +8.0%
inherited static getter 31,823 ops/sec [30,807..32,441] → 31,884 ops/sec [30,036..33,094] ~ overlap (+0.2%) 37,715 ops/sec [36,875..38,027] → 41,783 ops/sec [40,835..42,220] 🟢 +10.8%
inherited static setter 33,167 ops/sec [32,622..34,229] → 35,529 ops/sec [34,965..36,162] 🟢 +7.1% 39,126 ops/sec [38,637..40,133] → 42,627 ops/sec [41,957..43,671] 🟢 +8.9%
inherited static getter with this binding 26,422 ops/sec [26,044..27,135] → 29,778 ops/sec [29,549..30,050] 🟢 +12.7% 31,030 ops/sec [30,930..31,152] → 34,652 ops/sec [34,094..35,536] 🟢 +11.7%
closures.js — Interp: 🟢 11 · avg +12.4% · Bytecode: 🟢 8, 3 unch. · avg +7.8%
Benchmark Interpreted Δ Bytecode Δ
closure over single variable 44,233 ops/sec [43,664..44,331] → 50,453 ops/sec [49,467..51,017] 🟢 +14.1% 135,126 ops/sec [133,071..135,786] → 146,541 ops/sec [144,343..147,554] 🟢 +8.4%
closure over multiple variables 45,124 ops/sec [44,994..45,292] → 52,108 ops/sec [51,080..52,511] 🟢 +15.5% 119,954 ops/sec [119,578..120,461] → 128,825 ops/sec [127,378..129,767] 🟢 +7.4%
nested closures 50,422 ops/sec [49,293..50,645] → 56,861 ops/sec [56,576..57,160] 🟢 +12.8% 124,264 ops/sec [123,107..125,172] → 128,081 ops/sec [125,080..130,101] ~ overlap (+3.1%)
function as argument 31,903 ops/sec [31,431..32,024] → 36,257 ops/sec [35,622..39,647] 🟢 +13.6% 114,054 ops/sec [111,221..115,590] → 126,061 ops/sec [124,844..126,541] 🟢 +10.5%
function returning function 42,469 ops/sec [42,320..42,608] → 47,395 ops/sec [46,152..48,654] 🟢 +11.6% 135,886 ops/sec [133,260..137,595] → 145,580 ops/sec [142,414..149,176] 🟢 +7.1%
compose two functions 25,989 ops/sec [25,922..26,028] → 29,105 ops/sec [29,068..29,196] 🟢 +12.0% 79,303 ops/sec [77,834..79,541] → 85,991 ops/sec [84,114..88,139] 🟢 +8.4%
fn.call 58,508 ops/sec [57,846..58,793] → 65,549 ops/sec [64,818..66,784] 🟢 +12.0% 85,354 ops/sec [84,113..88,678] → 92,821 ops/sec [91,057..97,049] 🟢 +8.7%
fn.apply 44,694 ops/sec [44,229..44,904] → 49,704 ops/sec [49,389..50,352] 🟢 +11.2% 88,663 ops/sec [87,981..89,910] → 89,975 ops/sec [88,226..94,027] ~ overlap (+1.5%)
fn.bind 48,765 ops/sec [48,058..49,725] → 54,310 ops/sec [53,361..55,816] 🟢 +11.4% 119,747 ops/sec [113,806..122,667] → 122,553 ops/sec [118,626..125,506] ~ overlap (+2.3%)
recursive sum to 50 3,683 ops/sec [3,466..3,736] → 4,120 ops/sec [4,108..4,231] 🟢 +11.9% 14,934 ops/sec [14,673..15,263] → 17,811 ops/sec [17,780..17,919] 🟢 +19.3%
recursive tree traversal 6,640 ops/sec [6,602..6,790] → 7,308 ops/sec [7,235..7,401] 🟢 +10.1% 14,289 ops/sec [13,723..14,540] → 15,497 ops/sec [14,995..15,962] 🟢 +8.5%
collections.js — Interp: 🟢 12 · avg +10.9% · Bytecode: 🟢 4, 🔴 4, 4 unch. · avg +0.3%
Benchmark Interpreted Δ Bytecode Δ
add 50 elements 2,607 ops/sec [2,566..2,617] → 2,917 ops/sec [2,858..2,949] 🟢 +11.9% 3,138 ops/sec [3,113..3,159] → 3,139 ops/sec [3,046..3,170] ~ overlap (+0.0%)
has lookup (50 elements) 42,033 ops/sec [41,671..42,542] → 45,963 ops/sec [45,519..47,576] 🟢 +9.3% 54,642 ops/sec [54,352..54,921] → 52,670 ops/sec [52,094..53,218] 🔴 -3.6%
delete elements 22,605 ops/sec [22,477..23,005] → 25,876 ops/sec [25,512..26,046] 🟢 +14.5% 28,746 ops/sec [28,505..28,989] → 28,045 ops/sec [27,773..28,155] 🔴 -2.4%
forEach iteration 5,054 ops/sec [5,042..5,074] → 5,688 ops/sec [5,558..5,834] 🟢 +12.5% 7,734 ops/sec [7,680..7,769] → 8,546 ops/sec [8,388..8,700] 🟢 +10.5%
spread to array 13,613 ops/sec [13,337..13,790] → 15,092 ops/sec [14,830..15,169] 🟢 +10.9% 105,728 ops/sec [103,573..107,423] → 109,568 ops/sec [108,932..110,379] 🟢 +3.6%
deduplicate array 18,877 ops/sec [18,708..19,059] → 21,008 ops/sec [20,879..21,319] 🟢 +11.3% 37,455 ops/sec [37,238..37,728] → 37,842 ops/sec [37,316..38,012] ~ overlap (+1.0%)
set 50 entries 1,996 ops/sec [1,974..1,997] → 2,178 ops/sec [2,158..2,229] 🟢 +9.1% 2,499 ops/sec [2,480..2,513] → 2,552 ops/sec [2,515..2,569] 🟢 +2.1%
get lookup (50 entries) 41,832 ops/sec [41,595..42,415] → 46,098 ops/sec [44,457..46,818] 🟢 +10.2% 50,628 ops/sec [49,380..51,538] → 49,144 ops/sec [48,316..49,809] ~ overlap (-2.9%)
has check 60,362 ops/sec [59,666..61,015] → 67,610 ops/sec [64,346..68,386] 🟢 +12.0% 75,663 ops/sec [74,317..76,597] → 70,355 ops/sec [67,704..73,280] 🔴 -7.0%
delete entries 22,877 ops/sec [22,569..23,193] → 25,009 ops/sec [24,062..25,544] 🟢 +9.3% 27,968 ops/sec [27,639..28,198] → 26,487 ops/sec [26,188..26,939] 🔴 -5.3%
forEach iteration 4,972 ops/sec [4,885..5,076] → 5,651 ops/sec [5,562..5,757] 🟢 +13.7% 8,121 ops/sec [7,980..8,265] → 8,708 ops/sec [8,603..8,798] 🟢 +7.2%
keys/values/entries 3,915 ops/sec [3,878..3,954] → 4,141 ops/sec [4,066..4,238] 🟢 +5.8% 15,142 ops/sec [15,093..15,151] → 15,116 ops/sec [14,928..15,474] ~ overlap (-0.2%)
csv.js — Interp: 🟢 12, 1 unch. · avg +11.0% · Bytecode: 🟢 13 · avg +12.3%
Benchmark Interpreted Δ Bytecode Δ
parse simple 3-column CSV 43,354 ops/sec [42,477..44,487] → 48,523 ops/sec [48,233..49,122] 🟢 +11.9% 44,590 ops/sec [44,397..45,059] → 50,556 ops/sec [50,394..51,130] 🟢 +13.4%
parse 10-row CSV 12,082 ops/sec [11,934..12,171] → 13,548 ops/sec [13,015..13,628] 🟢 +12.1% 11,922 ops/sec [11,852..12,024] → 13,522 ops/sec [13,363..13,585] 🟢 +13.4%
parse 100-row CSV 1,886 ops/sec [1,856..1,919] → 2,122 ops/sec [2,069..2,157] 🟢 +12.5% 1,841 ops/sec [1,796..1,869] → 2,095 ops/sec [2,079..2,101] 🟢 +13.8%
parse CSV with quoted fields 66,215 ops/sec [64,879..66,744] → 73,880 ops/sec [71,341..77,214] 🟢 +11.6% 67,149 ops/sec [66,701..67,297] → 73,855 ops/sec [73,451..74,205] 🟢 +10.0%
parse without headers (array of arrays) 5,866 ops/sec [5,817..5,898] → 6,534 ops/sec [6,248..6,623] 🟢 +11.4% 5,872 ops/sec [5,430..5,905] → 6,473 ops/sec [6,434..6,533] 🟢 +10.2%
parse with semicolon delimiter 8,855 ops/sec [8,806..8,888] → 9,723 ops/sec [9,569..9,883] 🟢 +9.8% 8,840 ops/sec [8,611..8,924] → 9,725 ops/sec [9,552..9,786] 🟢 +10.0%
stringify array of objects 65,867 ops/sec [65,299..66,522] → 75,162 ops/sec [74,461..77,580] 🟢 +14.1% 67,201 ops/sec [65,009..69,273] → 76,477 ops/sec [74,876..78,141] 🟢 +13.8%
stringify array of arrays 23,713 ops/sec [23,552..23,882] → 26,696 ops/sec [26,517..27,858] 🟢 +12.6% 22,466 ops/sec [22,353..22,561] → 26,849 ops/sec [26,063..27,278] 🟢 +19.5%
stringify with values needing escaping 49,270 ops/sec [48,612..49,777] → 56,185 ops/sec [55,764..56,979] 🟢 +14.0% 49,507 ops/sec [49,387..50,471] → 57,957 ops/sec [57,677..58,311] 🟢 +17.1%
reviver converts numbers 1,152 ops/sec [1,145..1,153] → 1,286 ops/sec [1,268..1,331] 🟢 +11.7% 1,302 ops/sec [1,295..1,321] → 1,418 ops/sec [1,412..1,422] 🟢 +8.9%
reviver filters empty to null 9,082 ops/sec [8,953..9,150] → 9,903 ops/sec [9,870..9,993] 🟢 +9.0% 11,234 ops/sec [11,152..11,357] → 11,981 ops/sec [11,824..12,232] 🟢 +6.7%
parse then stringify 7,590 ops/sec [7,477..8,002] → 8,268 ops/sec [8,158..8,306] 🟢 +8.9% 7,632 ops/sec [7,559..7,705] → 8,565 ops/sec [8,434..8,637] 🟢 +12.2%
stringify then parse 7,765 ops/sec [7,494..7,932] → 8,054 ops/sec [7,920..8,180] ~ overlap (+3.7%) 7,564 ops/sec [7,509..7,672] → 8,394 ops/sec [8,244..8,464] 🟢 +11.0%
destructuring.js — Interp: 🟢 22 · avg +10.9% · Bytecode: 🟢 11, 11 unch. · avg +4.8%
Benchmark Interpreted Δ Bytecode Δ
simple array destructuring 160,042 ops/sec [157,985..165,123] → 174,578 ops/sec [172,237..177,828] 🟢 +9.1% 113,310 ops/sec [111,169..122,456] → 119,735 ops/sec [119,044..120,022] ~ overlap (+5.7%)
with rest element 110,242 ops/sec [108,135..112,567] → 121,218 ops/sec [119,383..122,701] 🟢 +10.0% 85,431 ops/sec [82,798..86,145] → 93,763 ops/sec [90,448..96,706] 🟢 +9.8%
with defaults 159,941 ops/sec [156,115..165,665] → 175,950 ops/sec [174,225..183,395] 🟢 +10.0% 120,263 ops/sec [116,272..121,199] → 128,854 ops/sec [127,987..130,617] 🟢 +7.1%
skip elements 168,160 ops/sec [167,322..170,942] → 184,310 ops/sec [176,453..193,573] 🟢 +9.6% 124,895 ops/sec [115,046..125,202] → 133,847 ops/sec [131,819..135,110] 🟢 +7.2%
nested array destructuring 81,709 ops/sec [81,107..81,789] → 88,554 ops/sec [86,903..91,206] 🟢 +8.4% 43,323 ops/sec [42,612..43,493] → 45,384 ops/sec [44,250..47,212] 🟢 +4.8%
swap variables 188,593 ops/sec [185,309..190,802] → 208,511 ops/sec [201,154..214,225] 🟢 +10.6% 151,955 ops/sec [150,384..152,306] → 157,130 ops/sec [152,349..162,933] 🟢 +3.4%
simple object destructuring 120,812 ops/sec [119,832..121,044] → 134,363 ops/sec [132,802..140,192] 🟢 +11.2% 107,396 ops/sec [105,406..108,577] → 118,336 ops/sec [114,639..128,819] 🟢 +10.2%
with defaults 138,763 ops/sec [137,399..143,384] → 160,236 ops/sec [155,384..162,512] 🟢 +15.5% 170,272 ops/sec [165,886..173,538] → 187,800 ops/sec [185,794..188,097] 🟢 +10.3%
with renaming 129,423 ops/sec [127,778..133,226] → 146,835 ops/sec [140,567..149,034] 🟢 +13.5% 116,267 ops/sec [114,582..117,413] → 132,997 ops/sec [130,757..134,038] 🟢 +14.4%
nested object destructuring 64,864 ops/sec [64,160..65,223] → 74,541 ops/sec [72,365..77,220] 🟢 +14.9% 61,466 ops/sec [59,309..63,108] → 65,997 ops/sec [64,680..67,479] 🟢 +7.4%
rest properties 49,526 ops/sec [49,187..50,323] → 55,441 ops/sec [52,841..56,859] 🟢 +11.9% 60,665 ops/sec [59,785..61,181] → 64,217 ops/sec [61,002..64,738] ~ overlap (+5.9%)
object parameter 38,317 ops/sec [37,992..39,078] → 43,185 ops/sec [42,051..44,395] 🟢 +12.7% 55,122 ops/sec [52,925..56,872] → 56,441 ops/sec [55,972..58,538] ~ overlap (+2.4%)
array parameter 49,800 ops/sec [48,994..50,218] → 54,041 ops/sec [52,805..56,095] 🟢 +8.5% 59,007 ops/sec [56,481..60,565] → 58,665 ops/sec [57,459..62,244] ~ overlap (-0.6%)
mixed destructuring in map 9,500 ops/sec [9,395..9,641] → 10,695 ops/sec [10,300..11,103] 🟢 +12.6% 12,304 ops/sec [12,206..12,723] → 13,473 ops/sec [12,970..13,607] 🟢 +9.5%
forEach with array destructuring 22,987 ops/sec [22,551..23,338] → 25,311 ops/sec [25,234..26,001] 🟢 +10.1% 20,465 ops/sec [19,885..20,678] → 20,859 ops/sec [20,527..21,693] ~ overlap (+1.9%)
map with array destructuring 23,327 ops/sec [22,890..23,588] → 25,867 ops/sec [25,131..26,847] 🟢 +10.9% 19,583 ops/sec [19,180..19,707] → 19,900 ops/sec [19,244..20,027] ~ overlap (+1.6%)
filter with array destructuring 23,623 ops/sec [23,423..23,811] → 25,705 ops/sec [25,386..25,816] 🟢 +8.8% 20,704 ops/sec [20,293..21,097] → 20,932 ops/sec [20,721..21,044] ~ overlap (+1.1%)
reduce with array destructuring 25,672 ops/sec [25,089..26,014] → 27,795 ops/sec [27,645..28,997] 🟢 +8.3% 21,295 ops/sec [21,205..21,607] → 21,049 ops/sec [20,204..21,548] ~ overlap (-1.2%)
map with object destructuring 20,720 ops/sec [20,398..20,923] → 22,844 ops/sec [22,566..23,054] 🟢 +10.3% 26,825 ops/sec [26,744..27,582] → 28,174 ops/sec [26,739..29,536] ~ overlap (+5.0%)
map with nested destructuring 18,107 ops/sec [18,037..18,849] → 20,073 ops/sec [19,880..20,391] 🟢 +10.9% 25,363 ops/sec [25,228..25,476] → 26,771 ops/sec [26,417..27,119] 🟢 +5.5%
map with rest in destructuring 14,314 ops/sec [14,121..14,622] → 15,622 ops/sec [15,566..15,817] 🟢 +9.1% 10,542 ops/sec [10,479..10,678] → 10,609 ops/sec [10,541..10,902] ~ overlap (+0.6%)
map with defaults in destructuring 17,175 ops/sec [16,203..17,688] → 19,300 ops/sec [18,566..19,651] 🟢 +12.4% 23,190 ops/sec [21,310..23,342] → 21,773 ops/sec [21,634..22,757] ~ overlap (-6.1%)
fibonacci.js — Interp: 🟢 8 · avg +12.8% · Bytecode: 🟢 6, 2 unch. · avg +8.9%
Benchmark Interpreted Δ Bytecode Δ
recursive fib(15) 97 ops/sec [96..98] → 110 ops/sec [109..111] 🟢 +13.2% 436 ops/sec [431..445] → 489 ops/sec [480..493] 🟢 +12.3%
recursive fib(20) 9 ops/sec [9..9] → 10 ops/sec [10..10] 🟢 +14.4% 40 ops/sec [39..40] → 45 ops/sec [44..45] 🟢 +12.6%
recursive fib(15) typed 103 ops/sec [100..104] → 112 ops/sec [110..115] 🟢 +8.5% 440 ops/sec [416..452] → 504 ops/sec [501..505] 🟢 +14.6%
recursive fib(20) typed 9 ops/sec [9..9] → 10 ops/sec [10..10] 🟢 +12.4% 40 ops/sec [39..40] → 44 ops/sec [44..46] 🟢 +10.0%
iterative fib(20) via reduce 4,199 ops/sec [4,160..4,530] → 4,821 ops/sec [4,672..5,083] 🟢 +14.8% 8,030 ops/sec [7,910..8,082] → 8,092 ops/sec [8,054..8,240] ~ overlap (+0.8%)
iterator fib(20) 3,162 ops/sec [3,156..3,172] → 3,640 ops/sec [3,572..3,700] 🟢 +15.1% 5,061 ops/sec [4,984..5,260] → 5,207 ops/sec [5,198..5,227] ~ overlap (+2.9%)
iterator fib(20) via Iterator.from + take 4,212 ops/sec [4,171..4,286] → 4,737 ops/sec [4,662..4,896] 🟢 +12.5% 5,434 ops/sec [5,363..5,537] → 5,823 ops/sec [5,686..5,901] 🟢 +7.1%
iterator fib(20) last value via reduce 3,153 ops/sec [3,136..3,177] → 3,530 ops/sec [3,463..3,628] 🟢 +12.0% 4,093 ops/sec [3,947..4,176] → 4,541 ops/sec [4,494..4,599] 🟢 +11.0%
float16array.js — Interp: 🟢 25, 7 unch. · avg +7.6% · Bytecode: 🟢 21, 🔴 4, 7 unch. · avg +9.1%
Benchmark Interpreted Δ Bytecode Δ
new Float16Array(0) 113,948 ops/sec [111,427..116,263] → 121,657 ops/sec [119,601..124,647] 🟢 +6.8% 132,852 ops/sec [131,336..133,917] → 141,887 ops/sec [141,283..142,532] 🟢 +6.8%
new Float16Array(100) 112,537 ops/sec [110,631..113,119] → 118,484 ops/sec [116,714..121,652] 🟢 +5.3% 126,120 ops/sec [124,917..127,279] → 136,172 ops/sec [134,522..137,444] 🟢 +8.0%
new Float16Array(1000) 94,695 ops/sec [93,355..97,396] → 99,770 ops/sec [98,637..101,101] 🟢 +5.4% 108,646 ops/sec [107,603..110,851] → 108,726 ops/sec [107,897..109,443] ~ overlap (+0.1%)
Float16Array.from([...100]) 3,821 ops/sec [3,795..3,854] → 3,940 ops/sec [3,775..4,032] ~ overlap (+3.1%) 3,667 ops/sec [3,637..3,688] → 3,956 ops/sec [3,939..4,013] 🟢 +7.9%
Float16Array.of(1.5, 2.5, 3.5, 4.5, 5.5) 112,931 ops/sec [111,052..113,589] → 121,671 ops/sec [113,193..125,108] ~ overlap (+7.7%) 92,715 ops/sec [91,824..93,414] → 101,310 ops/sec [99,241..101,825] 🟢 +9.3%
new Float16Array(float64Array) 32,646 ops/sec [31,517..32,752] → 35,488 ops/sec [34,980..35,977] 🟢 +8.7% 26,328 ops/sec [26,157..26,883] → 35,824 ops/sec [35,510..36,067] 🟢 +36.1%
sequential write 100 elements 950 ops/sec [936..973] → 1,071 ops/sec [1,066..1,087] 🟢 +12.7% 2,000 ops/sec [1,981..2,028] → 2,079 ops/sec [2,028..2,110] ~ overlap (+3.9%)
sequential read 100 elements 1,095 ops/sec [1,086..1,099] → 1,180 ops/sec [1,170..1,188] 🟢 +7.8% 2,367 ops/sec [2,334..2,420] → 2,584 ops/sec [2,519..2,613] 🟢 +9.2%
write special values (NaN, Inf, -0) 32,285 ops/sec [31,453..33,975] → 35,528 ops/sec [34,069..35,777] 🟢 +10.0% 41,821 ops/sec [41,513..42,029] → 46,780 ops/sec [46,612..46,904] 🟢 +11.9%
Float16Array write 990 ops/sec [980..995] → 1,054 ops/sec [1,021..1,110] 🟢 +6.4% 2,045 ops/sec [2,031..2,092] → 2,103 ops/sec [2,085..2,124] ~ overlap (+2.8%)
Float32Array write 964 ops/sec [951..1,008] → 1,040 ops/sec [1,026..1,050] 🟢 +7.8% 2,130 ops/sec [2,123..2,141] → 2,083 ops/sec [2,074..2,094] 🔴 -2.2%
Float64Array write 974 ops/sec [925..1,009] → 1,042 ops/sec [1,014..1,089] 🟢 +7.0% 2,061 ops/sec [1,992..2,094] → 2,100 ops/sec [2,079..2,169] ~ overlap (+1.9%)
Float16Array read 1,066 ops/sec [1,053..1,076] → 1,139 ops/sec [1,103..1,151] 🟢 +6.8% 2,149 ops/sec [2,133..2,157] → 2,201 ops/sec [2,184..2,221] 🟢 +2.4%
Float32Array read 1,077 ops/sec [1,066..1,092] → 1,115 ops/sec [1,095..1,134] 🟢 +3.5% 2,208 ops/sec [2,193..2,214] → 2,349 ops/sec [2,326..2,401] 🟢 +6.4%
Float64Array read 1,071 ops/sec [1,062..1,082] → 1,104 ops/sec [1,075..1,109] ~ overlap (+3.1%) 2,185 ops/sec [2,165..2,226] → 2,364 ops/sec [2,304..2,386] 🟢 +8.2%
fill(1.5) 4,384 ops/sec [4,367..4,409] → 4,710 ops/sec [4,675..4,738] 🟢 +7.4% 3,237 ops/sec [3,230..3,297] → 4,734 ops/sec [4,660..4,840] 🟢 +46.2%
slice() 32,362 ops/sec [31,755..32,904] → 34,758 ops/sec [34,689..35,021] 🟢 +7.4% 25,950 ops/sec [25,906..26,048] → 36,579 ops/sec [35,828..37,126] 🟢 +41.0%
map(x => x * 2) 1,972 ops/sec [1,948..1,987] → 2,211 ops/sec [2,181..2,245] 🟢 +12.2% 2,605 ops/sec [2,559..2,635] → 2,769 ops/sec [2,228..2,836] ~ overlap (+6.3%)
filter(x => x > 25) 1,981 ops/sec [1,967..2,053] → 2,230 ops/sec [2,182..2,271] 🟢 +12.6% 2,745 ops/sec [2,705..2,763] → 2,944 ops/sec [2,906..3,033] 🟢 +7.3%
reduce (sum) 1,975 ops/sec [1,960..1,986] → 2,202 ops/sec [2,137..2,224] 🟢 +11.5% 2,396 ops/sec [2,377..2,412] → 2,564 ops/sec [2,519..2,659] 🟢 +7.0%
sort() 10,465 ops/sec [10,420..10,720] → 10,397 ops/sec [10,246..10,465] ~ overlap (-0.7%) 8,995 ops/sec [8,947..9,042] → 7,675 ops/sec [7,585..7,692] 🔴 -14.7%
indexOf() 28,556 ops/sec [28,304..28,875] → 31,715 ops/sec [30,222..32,102] 🟢 +11.1% 26,793 ops/sec [26,133..27,200] → 27,372 ops/sec [27,043..27,706] ~ overlap (+2.2%)
reverse() 35,235 ops/sec [34,655..35,384] → 38,299 ops/sec [37,588..39,931] 🟢 +8.7% 28,155 ops/sec [27,983..28,648] → 39,478 ops/sec [38,915..39,949] 🟢 +40.2%
toReversed() 25,333 ops/sec [25,235..25,531] → 26,821 ops/sec [26,151..27,081] 🟢 +5.9% 22,800 ops/sec [22,421..23,092] → 21,957 ops/sec [21,593..22,304] 🔴 -3.7%
toSorted() 378 ops/sec [376..380] → 377 ops/sec [374..381] ~ overlap (-0.2%) 333 ops/sec [332..333] → 286 ops/sec [278..293] 🔴 -14.2%
create view over existing buffer 129,273 ops/sec [124,956..133,650] → 140,362 ops/sec [139,227..141,807] 🟢 +8.6% 149,184 ops/sec [148,717..151,030] → 159,686 ops/sec [156,683..169,988] 🟢 +7.0%
subarray() 145,527 ops/sec [142,883..148,935] → 162,889 ops/sec [160,506..165,878] 🟢 +11.9% 164,825 ops/sec [163,558..167,307] → 171,051 ops/sec [169,608..174,947] 🟢 +3.8%
set() from array 122,476 ops/sec [114,191..131,136] → 133,422 ops/sec [130,898..135,513] ~ overlap (+8.9%) 126,209 ops/sec [124,679..126,751] → 148,033 ops/sec [144,935..154,210] 🟢 +17.3%
for-of loop 1,872 ops/sec [1,828..1,954] → 2,000 ops/sec [1,931..2,045] ~ overlap (+6.8%) 7,358 ops/sec [7,248..7,402] → 7,625 ops/sec [7,595..7,708] 🟢 +3.6%
spread into array 7,287 ops/sec [7,268..7,382] → 7,684 ops/sec [7,484..7,763] 🟢 +5.4% 24,296 ops/sec [24,133..24,936] → 29,487 ops/sec [29,331..30,414] 🟢 +21.4%
f16round(1.337) 242,766 ops/sec [235,850..245,568] → 277,019 ops/sec [270,650..279,651] 🟢 +14.1% 231,830 ops/sec [230,270..233,457] → 247,711 ops/sec [241,206..253,396] 🟢 +6.9%
f16round over 100 values 1,402 ops/sec [1,387..1,418] → 1,522 ops/sec [1,512..1,529] 🟢 +8.6% 2,748 ops/sec [2,711..2,848] → 2,767 ops/sec [2,744..2,848] ~ overlap (+0.7%)
for-of.js — Interp: 🟢 7 · avg +5.2% · Bytecode: 🟢 4, 3 unch. · avg +6.7%
Benchmark Interpreted Δ Bytecode Δ
for...of with 10-element array 17,484 ops/sec [17,281..17,635] → 18,534 ops/sec [18,002..18,637] 🟢 +6.0% 105,225 ops/sec [103,992..106,480] → 117,419 ops/sec [116,546..118,365] 🟢 +11.6%
for...of with 100-element array 2,028 ops/sec [1,992..2,038] → 2,139 ops/sec [2,122..2,160] 🟢 +5.4% 14,161 ops/sec [13,662..14,269] → 15,560 ops/sec [15,449..16,026] 🟢 +9.9%
for...of with string (10 chars) 13,031 ops/sec [12,991..13,209] → 13,978 ops/sec [13,832..14,043] 🟢 +7.3% 31,837 ops/sec [30,930..31,962] → 35,072 ops/sec [33,651..35,155] 🟢 +10.2%
for...of with Set (10 elements) 17,903 ops/sec [17,409..18,001] → 18,688 ops/sec [18,095..19,126] 🟢 +4.4% 104,086 ops/sec [102,013..104,682] → 112,534 ops/sec [109,943..115,663] 🟢 +8.1%
for...of with Map entries (10 entries) 12,149 ops/sec [12,052..12,234] → 12,798 ops/sec [12,730..12,849] 🟢 +5.3% 16,228 ops/sec [16,148..16,757] → 16,856 ops/sec [16,255..17,330] ~ overlap (+3.9%)
for...of with destructuring 15,420 ops/sec [15,344..15,591] → 16,028 ops/sec [15,785..16,271] 🟢 +3.9% 21,231 ops/sec [20,815..21,778] → 21,726 ops/sec [21,225..22,390] ~ overlap (+2.3%)
for-await-of with sync array 16,681 ops/sec [16,527..16,851] → 17,396 ops/sec [17,350..17,435] 🟢 +4.3% 16,452 ops/sec [16,355..16,631] → 16,633 ops/sec [16,533..16,683] ~ overlap (+1.1%)
generators.js — Interp: 🟢 4 · avg +10.2% · Bytecode: 🟢 4 · avg +4.6%
Benchmark Interpreted Δ Bytecode Δ
manual next over object generator 796 ops/sec [787..815] → 893 ops/sec [891..894] 🟢 +12.2% 933 ops/sec [919..944] → 1,010 ops/sec [996..1,015] 🟢 +8.2%
for...of over object generator 1,216 ops/sec [1,196..1,243] → 1,336 ops/sec [1,323..1,349] 🟢 +9.9% 1,835 ops/sec [1,831..1,854] → 1,902 ops/sec [1,869..1,943] 🟢 +3.6%
yield delegation 1,220 ops/sec [1,217..1,223] → 1,342 ops/sec [1,338..1,345] 🟢 +10.0% 1,859 ops/sec [1,841..1,868] → 1,904 ops/sec [1,899..1,917] 🟢 +2.4%
class generator method 1,222 ops/sec [1,208..1,269] → 1,328 ops/sec [1,301..1,377] 🟢 +8.7% 1,849 ops/sec [1,831..1,864] → 1,923 ops/sec [1,914..1,947] 🟢 +4.0%
iterators.js — Interp: 🟢 41, 1 unch. · avg +9.1% · Bytecode: 🟢 37, 5 unch. · avg +8.2%
Benchmark Interpreted Δ Bytecode Δ
Iterator.from({next}).toArray() — 20 elements 3,936 ops/sec [3,770..3,943] → 4,336 ops/sec [4,234..4,405] 🟢 +10.2% 5,010 ops/sec [4,975..5,028] → 5,515 ops/sec [5,449..5,613] 🟢 +10.1%
Iterator.from({next}).toArray() — 50 elements 1,682 ops/sec [1,636..1,712] → 1,831 ops/sec [1,816..1,862] 🟢 +8.9% 2,172 ops/sec [2,141..2,181] → 2,497 ops/sec [2,469..2,512] 🟢 +15.0%
spread pre-wrapped iterator — 20 elements 3,952 ops/sec [3,939..3,977] → 4,368 ops/sec [4,259..4,447] 🟢 +10.5% 5,019 ops/sec [4,975..5,069] → 5,784 ops/sec [5,742..5,814] 🟢 +15.2%
Iterator.from({next}).forEach — 50 elements 1,213 ops/sec [1,195..1,224] → 1,341 ops/sec [1,319..1,369] 🟢 +10.6% 1,636 ops/sec [1,630..1,647] → 1,789 ops/sec [1,760..1,797] 🟢 +9.3%
Iterator.from({next}).reduce — 50 elements 1,218 ops/sec [1,210..1,239] → 1,348 ops/sec [1,314..1,366] 🟢 +10.7% 1,552 ops/sec [1,548..1,563] → 1,844 ops/sec [1,834..1,852] 🟢 +18.8%
wrap array iterator 69,940 ops/sec [69,767..70,015] → 76,440 ops/sec [75,463..78,630] 🟢 +9.3% 72,030 ops/sec [71,233..72,555] → 81,314 ops/sec [80,559..81,578] 🟢 +12.9%
wrap plain {next()} object 2,736 ops/sec [2,715..2,773] → 3,043 ops/sec [3,008..3,116] 🟢 +11.2% 3,652 ops/sec [3,624..3,668] → 3,914 ops/sec [3,866..3,958] 🟢 +7.2%
map + toArray (50 elements) 1,232 ops/sec [1,217..1,240] → 1,340 ops/sec [1,317..1,369] 🟢 +8.8% 1,588 ops/sec [1,586..1,608] → 1,840 ops/sec [1,829..1,888] 🟢 +15.9%
filter + toArray (50 elements) 1,218 ops/sec [1,188..1,238] → 1,332 ops/sec [1,311..1,371] 🟢 +9.4% 1,661 ops/sec [1,640..1,677] → 1,860 ops/sec [1,845..1,862] 🟢 +12.0%
take(10) + toArray (50 element source) 7,615 ops/sec [7,447..7,700] → 8,199 ops/sec [8,019..8,477] 🟢 +7.7% 9,723 ops/sec [9,602..9,856] → 10,934 ops/sec [10,804..11,156] 🟢 +12.5%
drop(40) + toArray (50 element source) 1,709 ops/sec [1,673..1,734] → 1,809 ops/sec [1,778..1,832] 🟢 +5.9% 2,282 ops/sec [2,243..2,309] → 2,539 ops/sec [2,515..2,602] 🟢 +11.2%
chained map + filter + take (100 element source) 2,279 ops/sec [2,274..2,302] → 2,449 ops/sec [2,425..2,483] 🟢 +7.5% 3,126 ops/sec [3,090..3,147] → 3,357 ops/sec [3,343..3,395] 🟢 +7.4%
some + every (50 elements) 678 ops/sec [664..690] → 748 ops/sec [730..770] 🟢 +10.3% 945 ops/sec [937..958] → 1,030 ops/sec [1,022..1,036] 🟢 +8.9%
find (50 elements) 1,500 ops/sec [1,490..1,508] → 1,676 ops/sec [1,659..1,688] 🟢 +11.7% 2,005 ops/sec [1,986..2,010] → 2,211 ops/sec [2,181..2,277] 🟢 +10.3%
concat 2 arrays (10 + 10 elements) 64,965 ops/sec [64,412..65,951] → 72,065 ops/sec [70,068..74,573] 🟢 +10.9% 68,253 ops/sec [67,994..68,449] → 75,570 ops/sec [74,346..76,184] 🟢 +10.7%
concat 5 arrays (10 elements each) 39,302 ops/sec [37,806..39,491] → 41,653 ops/sec [40,742..42,320] 🟢 +6.0% 40,314 ops/sec [40,145..40,471] → 44,870 ops/sec [44,322..44,956] 🟢 +11.3%
concat 2 arrays (20 + 20 elements) 55,709 ops/sec [54,264..57,731] → 62,217 ops/sec [60,306..62,247] 🟢 +11.7% 57,888 ops/sec [57,231..58,226] → 61,805 ops/sec [61,355..62,001] 🟢 +6.8%
concat + filter + toArray (20 + 20 elements) 4,948 ops/sec [4,836..5,000] → 5,397 ops/sec [5,225..5,573] 🟢 +9.1% 6,913 ops/sec [6,753..7,000] → 7,445 ops/sec [7,400..7,689] 🟢 +7.7%
concat + map + take (20 + 20 elements, take 10) 15,456 ops/sec [15,251..15,969] → 17,138 ops/sec [16,795..17,399] 🟢 +10.9% 20,316 ops/sec [19,986..20,972] → 22,007 ops/sec [21,951..22,028] 🟢 +8.3%
concat Sets (15 + 15 elements) 64,519 ops/sec [63,649..65,220] → 70,370 ops/sec [68,660..71,606] 🟢 +9.1% 62,293 ops/sec [61,621..63,303] → 67,101 ops/sec [65,588..67,333] 🟢 +7.7%
concat strings (13 + 13 characters) 46,616 ops/sec [46,537..46,889] → 49,684 ops/sec [49,099..50,042] 🟢 +6.6% 39,730 ops/sec [39,259..39,913] → 45,073 ops/sec [44,762..45,390] 🟢 +13.4%
zip 2 arrays (10 + 10 elements) 27,430 ops/sec [27,184..27,947] → 29,764 ops/sec [28,670..29,935] 🟢 +8.5% 27,599 ops/sec [27,248..27,857] → 28,034 ops/sec [27,512..28,452] ~ overlap (+1.6%)
zip 3 arrays (10 elements each) 25,524 ops/sec [25,000..25,869] → 27,285 ops/sec [27,143..27,751] 🟢 +6.9% 24,797 ops/sec [24,671..24,938] → 26,040 ops/sec [25,528..26,706] 🟢 +5.0%
zip 2 arrays (20 + 20 elements) 18,463 ops/sec [18,187..18,590] → 19,766 ops/sec [19,697..19,840] 🟢 +7.1% 17,922 ops/sec [17,712..18,149] → 18,571 ops/sec [18,366..18,819] 🟢 +3.6%
zip 2 arrays (50 + 50 elements) 9,384 ops/sec [9,137..9,481] → 10,024 ops/sec [9,866..10,160] 🟢 +6.8% 9,197 ops/sec [9,146..9,303] → 9,376 ops/sec [9,130..9,476] ~ overlap (+1.9%)
zip shortest mode (20 + 10 elements) 28,177 ops/sec [27,773..28,355] → 29,327 ops/sec [28,764..30,966] 🟢 +4.1% 26,571 ops/sec [25,875..26,968] → 27,956 ops/sec [27,332..28,335] 🟢 +5.2%
zip longest mode (10 + 20 elements) 16,581 ops/sec [16,203..16,778] → 17,350 ops/sec [17,003..17,817] 🟢 +4.6% 15,385 ops/sec [15,226..15,529] → 15,944 ops/sec [15,464..16,139] ~ overlap (+3.6%)
zip strict mode (20 + 20 elements) 17,905 ops/sec [17,411..18,079] → 18,832 ops/sec [18,409..19,017] 🟢 +5.2% 16,616 ops/sec [16,508..16,767] → 17,658 ops/sec [17,579..17,833] 🟢 +6.3%
zip + map + toArray (20 + 20 elements) 6,623 ops/sec [6,536..6,639] → 6,865 ops/sec [6,786..6,949] 🟢 +3.7% 4,749 ops/sec [4,722..4,780] → 5,089 ops/sec [5,026..5,144] 🟢 +7.2%
zip + filter + toArray (20 + 20 elements) 6,287 ops/sec [6,177..6,364] → 6,827 ops/sec [6,805..6,830] 🟢 +8.6% 4,864 ops/sec [4,809..4,912] → 5,129 ops/sec [5,038..5,179] 🟢 +5.5%
zip Sets (15 + 15 elements) 23,233 ops/sec [22,224..23,487] → 24,942 ops/sec [24,195..25,037] 🟢 +7.4% 21,095 ops/sec [20,958..21,263] → 22,420 ops/sec [22,296..22,586] 🟢 +6.3%
zipKeyed 2 keys (10 elements each) 25,089 ops/sec [24,712..25,639] → 26,787 ops/sec [26,665..26,870] 🟢 +6.8% 25,263 ops/sec [24,726..25,417] → 26,318 ops/sec [25,840..26,970] 🟢 +4.2%
zipKeyed 3 keys (20 elements each) 12,346 ops/sec [12,027..12,443] → 13,640 ops/sec [13,374..13,737] 🟢 +10.5% 12,217 ops/sec [12,162..12,424] → 12,892 ops/sec [12,860..13,039] 🟢 +5.5%
zipKeyed longest mode (10 + 20 elements) 14,530 ops/sec [14,312..14,692] → 16,648 ops/sec [15,567..16,825] 🟢 +14.6% 13,776 ops/sec [13,743..13,813] → 14,527 ops/sec [14,436..14,630] 🟢 +5.4%
zipKeyed strict mode (20 + 20 elements) 15,299 ops/sec [15,062..15,369] → 16,999 ops/sec [15,903..17,660] 🟢 +11.1% 14,691 ops/sec [14,576..14,794] → 15,831 ops/sec [15,737..15,990] 🟢 +7.8%
zipKeyed + filter + map (20 elements) 4,361 ops/sec [4,316..4,383] → 5,007 ops/sec [4,931..5,176] 🟢 +14.8% 5,419 ops/sec [5,396..5,460] → 5,678 ops/sec [5,571..5,723] 🟢 +4.8%
array.values().map().filter().toArray() 2,153 ops/sec [2,118..2,178] → 2,611 ops/sec [2,522..2,629] 🟢 +21.3% 3,143 ops/sec [3,105..3,163] → 3,406 ops/sec [3,338..3,462] 🟢 +8.4%
array.values().take(5).toArray() 90,812 ops/sec [89,856..92,985] → 106,767 ops/sec [104,501..109,013] 🟢 +17.6% 97,726 ops/sec [96,235..98,036] → 101,466 ops/sec [97,833..103,794] ~ overlap (+3.8%)
array.values().drop(45).toArray() 75,183 ops/sec [74,122..76,185] → 79,311 ops/sec [71,515..86,780] ~ overlap (+5.5%) 81,080 ops/sec [80,543..82,355] → 82,867 ops/sec [81,574..83,477] ~ overlap (+2.2%)
map.entries() chained helpers 3,357 ops/sec [3,309..3,381] → 3,551 ops/sec [3,488..3,691] 🟢 +5.8% 2,414 ops/sec [2,387..2,427] → 2,627 ops/sec [2,604..2,661] 🟢 +8.8%
set.values() chained helpers 5,144 ops/sec [5,105..5,213] → 5,481 ops/sec [5,418..5,530] 🟢 +6.5% 7,094 ops/sec [6,972..7,125] → 7,556 ops/sec [7,457..7,656] 🟢 +6.5%
string iterator map + toArray 4,611 ops/sec [4,548..4,666] → 5,037 ops/sec [4,834..5,163] 🟢 +9.2% 4,822 ops/sec [4,744..4,881] → 5,159 ops/sec [5,117..5,237] 🟢 +7.0%
json.js — Interp: 🟢 20 · avg +8.9% · Bytecode: 🟢 16, 4 unch. · avg +7.6%
Benchmark Interpreted Δ Bytecode Δ
parse simple object 63,441 ops/sec [62,400..64,433] → 70,548 ops/sec [68,979..75,644] 🟢 +11.2% 76,767 ops/sec [75,995..77,395] → 78,294 ops/sec [77,039..79,901] ~ overlap (+2.0%)
parse nested object 42,681 ops/sec [41,873..43,684] → 46,765 ops/sec [45,798..47,991] 🟢 +9.6% 50,241 ops/sec [49,868..50,668] → 51,223 ops/sec [49,989..51,448] ~ overlap (+2.0%)
parse array of objects 25,366 ops/sec [24,930..26,074] → 27,721 ops/sec [27,485..27,970] 🟢 +9.3% 27,403 ops/sec [26,966..27,856] → 29,707 ops/sec [29,412..31,088] 🟢 +8.4%
parse large flat object 26,811 ops/sec [26,721..27,214] → 29,746 ops/sec [28,724..30,174] 🟢 +10.9% 28,741 ops/sec [28,489..29,325] → 32,266 ops/sec [31,492..33,080] 🟢 +12.3%
parse mixed types 33,454 ops/sec [32,830..34,342] → 36,153 ops/sec [35,223..36,583] 🟢 +8.1% 34,553 ops/sec [34,176..34,904] → 38,955 ops/sec [38,066..39,547] 🟢 +12.7%
stringify simple object 71,447 ops/sec [70,307..71,588] → 76,639 ops/sec [75,335..78,145] 🟢 +7.3% 68,161 ops/sec [62,222..68,700] → 71,235 ops/sec [70,720..73,118] 🟢 +4.5%
stringify nested object 41,893 ops/sec [41,525..42,089] → 44,430 ops/sec [43,987..44,792] 🟢 +6.1% 37,943 ops/sec [37,838..37,992] → 39,915 ops/sec [39,122..40,815] 🟢 +5.2%
stringify array of objects 19,546 ops/sec [19,475..19,658] → 21,412 ops/sec [20,682..21,690] 🟢 +9.5% 19,875 ops/sec [19,326..20,081] → 21,361 ops/sec [20,751..22,789] 🟢 +7.5%
stringify mixed types 28,953 ops/sec [28,770..29,029] → 30,205 ops/sec [30,007..30,448] 🟢 +4.3% 25,127 ops/sec [24,736..25,779] → 27,518 ops/sec [26,633..28,330] 🟢 +9.5%
reviver doubles numbers 12,022 ops/sec [11,901..12,090] → 13,108 ops/sec [13,012..13,609] 🟢 +9.0% 17,478 ops/sec [17,380..17,559] → 17,238 ops/sec [17,038..18,153] ~ overlap (-1.4%)
reviver filters properties 11,710 ops/sec [11,578..11,879] → 12,837 ops/sec [12,635..13,231] 🟢 +9.6% 14,845 ops/sec [14,524..15,504] → 14,938 ops/sec [14,432..15,221] ~ overlap (+0.6%)
reviver on nested object 14,225 ops/sec [13,965..14,312] → 15,468 ops/sec [15,241..15,765] 🟢 +8.7% 18,475 ops/sec [18,356..18,512] → 18,975 ops/sec [18,806..19,002] 🟢 +2.7%
reviver on array 7,607 ops/sec [7,451..7,630] → 7,862 ops/sec [7,748..7,970] 🟢 +3.3% 10,043 ops/sec [9,863..10,133] → 10,777 ops/sec [10,539..10,872] 🟢 +7.3%
replacer function doubles numbers 14,124 ops/sec [13,871..14,160] → 14,983 ops/sec [14,879..15,177] 🟢 +6.1% 17,444 ops/sec [17,350..17,805] → 19,428 ops/sec [19,196..19,875] 🟢 +11.4%
replacer function excludes properties 19,183 ops/sec [19,051..19,341] → 20,648 ops/sec [20,199..21,011] 🟢 +7.6% 21,699 ops/sec [21,497..22,085] → 24,051 ops/sec [23,760..24,535] 🟢 +10.8%
array replacer (allowlist) 43,036 ops/sec [42,104..43,537] → 47,132 ops/sec [46,825..47,993] 🟢 +9.5% 37,980 ops/sec [37,733..38,673] → 41,802 ops/sec [41,421..43,228] 🟢 +10.1%
stringify with 2-space indent 36,029 ops/sec [35,296..37,123] → 40,529 ops/sec [39,945..41,315] 🟢 +12.5% 35,394 ops/sec [34,979..35,758] → 38,069 ops/sec [37,734..38,909] 🟢 +7.6%
stringify with tab indent 36,450 ops/sec [36,136..36,756] → 40,477 ops/sec [39,363..40,870] 🟢 +11.1% 34,188 ops/sec [33,613..36,436] → 37,755 ops/sec [37,081..39,247] 🟢 +10.4%
parse then stringify 21,965 ops/sec [21,783..22,171] → 24,488 ops/sec [24,281..25,062] 🟢 +11.5% 22,517 ops/sec [21,070..23,131] → 25,958 ops/sec [25,443..26,733] 🟢 +15.3%
stringify then parse 12,829 ops/sec [12,658..13,084] → 14,460 ops/sec [14,370..14,583] 🟢 +12.7% 13,418 ops/sec [13,388..13,616] → 15,235 ops/sec [15,173..15,291] 🟢 +13.5%
jsx.jsx — Interp: 🟢 21 · avg +11.8% · Bytecode: 🟢 15, 6 unch. · avg +5.6%
Benchmark Interpreted Δ Bytecode Δ
simple element 82,301 ops/sec [81,839..83,336] → 93,546 ops/sec [92,064..96,971] 🟢 +13.7% 101,879 ops/sec [100,645..102,371] → 108,570 ops/sec [107,412..111,091] 🟢 +6.6%
self-closing element 86,929 ops/sec [84,448..89,940] → 101,328 ops/sec [101,272..101,899] 🟢 +16.6% 110,294 ops/sec [109,454..110,827] → 116,142 ops/sec [111,747..120,468] 🟢 +5.3%
element with string attribute 72,335 ops/sec [70,816..75,205] → 82,380 ops/sec [80,017..85,506] 🟢 +13.9% 81,332 ops/sec [80,220..82,367] → 85,387 ops/sec [84,957..87,334] 🟢 +5.0%
element with multiple attributes 62,154 ops/sec [61,527..63,113] → 71,304 ops/sec [71,038..71,516] 🟢 +14.7% 59,385 ops/sec [58,192..61,143] → 62,827 ops/sec [62,094..64,087] 🟢 +5.8%
element with expression attribute 67,716 ops/sec [67,400..68,169] → 74,459 ops/sec [72,978..75,627] 🟢 +10.0% 81,843 ops/sec [80,980..86,115] → 87,665 ops/sec [84,783..88,578] ~ overlap (+7.1%)
text child 84,170 ops/sec [83,787..85,430] → 95,542 ops/sec [93,808..98,248] 🟢 +13.5% 99,485 ops/sec [98,854..103,428] → 108,417 ops/sec [107,606..108,766] 🟢 +9.0%
expression child 81,349 ops/sec [80,024..82,599] → 94,477 ops/sec [90,770..95,201] 🟢 +16.1% 95,793 ops/sec [94,542..96,520] → 106,382 ops/sec [101,497..108,801] 🟢 +11.1%
mixed text and expression 77,925 ops/sec [77,407..78,193] → 88,472 ops/sec [87,845..88,767] 🟢 +13.5% 87,245 ops/sec [86,460..87,742] → 93,849 ops/sec [92,026..95,127] 🟢 +7.6%
nested elements (3 levels) 32,526 ops/sec [32,078..33,025] → 36,921 ops/sec [36,804..37,487] 🟢 +13.5% 37,699 ops/sec [37,560..38,928] → 40,921 ops/sec [40,462..42,228] 🟢 +8.5%
sibling children 24,381 ops/sec [24,308..24,539] → 28,345 ops/sec [27,749..28,842] 🟢 +16.3% 27,669 ops/sec [27,385..28,524] → 29,868 ops/sec [29,576..30,083] 🟢 +7.9%
component element 62,881 ops/sec [61,442..64,584] → 67,929 ops/sec [67,213..70,076] 🟢 +8.0% 76,404 ops/sec [75,234..78,145] → 81,006 ops/sec [80,783..81,109] 🟢 +6.0%
component with children 38,692 ops/sec [37,821..39,599] → 42,525 ops/sec [42,241..43,642] 🟢 +9.9% 46,182 ops/sec [45,520..47,313] → 48,182 ops/sec [47,048..49,384] ~ overlap (+4.3%)
dotted component 54,458 ops/sec [53,351..54,931] → 59,397 ops/sec [58,801..61,289] 🟢 +9.1% 61,792 ops/sec [60,797..62,865] → 64,078 ops/sec [62,660..66,105] ~ overlap (+3.7%)
empty fragment 86,602 ops/sec [85,842..86,848] → 95,819 ops/sec [94,178..98,793] 🟢 +10.6% 112,968 ops/sec [112,207..113,352] → 118,180 ops/sec [116,645..120,547] 🟢 +4.6%
fragment with children 24,564 ops/sec [24,399..24,674] → 27,258 ops/sec [26,734..27,351] 🟢 +11.0% 28,592 ops/sec [28,558..28,717] → 29,296 ops/sec [29,107..31,558] 🟢 +2.5%
spread attributes 45,617 ops/sec [45,441..45,808] → 50,704 ops/sec [50,306..50,782] 🟢 +11.2% 44,555 ops/sec [44,044..45,200] → 48,618 ops/sec [48,185..48,808] 🟢 +9.1%
spread with overrides 41,076 ops/sec [40,318..41,876] → 45,709 ops/sec [45,093..46,361] 🟢 +11.3% 40,077 ops/sec [38,951..40,978] → 42,797 ops/sec [42,364..43,041] 🟢 +6.8%
shorthand props 65,093 ops/sec [64,107..66,124] → 70,898 ops/sec [69,413..71,835] 🟢 +8.9% 70,332 ops/sec [68,604..72,578] → 72,698 ops/sec [71,851..73,154] ~ overlap (+3.4%)
nav bar structure 11,692 ops/sec [11,462..11,989] → 12,603 ops/sec [12,381..13,347] 🟢 +7.8% 13,905 ops/sec [12,751..14,161] → 13,925 ops/sec [13,828..14,055] ~ overlap (+0.1%)
card component tree 13,642 ops/sec [13,477..13,890] → 14,821 ops/sec [14,093..15,302] 🟢 +8.6% 14,899 ops/sec [14,775..14,912] → 15,349 ops/sec [15,240..15,633] 🟢 +3.0%
10 list items via Array.from 5,893 ops/sec [5,882..5,917] → 6,462 ops/sec [6,348..6,571] 🟢 +9.7% 6,523 ops/sec [6,485..6,538] → 6,543 ops/sec [6,516..6,558] ~ overlap (+0.3%)
modules.js — Interp: 🟢 9 · avg +10.5% · Bytecode: 🟢 9 · avg +17.3%
Benchmark Interpreted Δ Bytecode Δ
call imported function 145,206 ops/sec [142,640..146,806] → 163,153 ops/sec [158,713..167,585] 🟢 +12.4% 482,642 ops/sec [477,091..493,024] → 586,904 ops/sec [562,936..595,272] 🟢 +21.6%
call two imported functions 80,734 ops/sec [79,206..82,529] → 90,423 ops/sec [86,752..95,454] 🟢 +12.0% 315,909 ops/sec [309,662..323,518] → 376,585 ops/sec [366,606..381,469] 🟢 +19.2%
read imported constant 455,867 ops/sec [447,483..463,930] → 502,357 ops/sec [487,782..520,748] 🟢 +10.2% 1,113,500 ops/sec [1,106,522..1,139,886] → 1,348,181 ops/sec [1,275,740..1,358,762] 🟢 +21.1%
read imported string 449,710 ops/sec [441,267..459,741] → 495,806 ops/sec [478,950..510,831] 🟢 +10.2% 1,116,618 ops/sec [1,106,870..1,157,573] → 1,325,006 ops/sec [1,304,090..1,331,333] 🟢 +18.7%
read JSON string property 460,341 ops/sec [446,293..483,772] → 495,592 ops/sec [488,342..523,550] 🟢 +7.7% 1,148,623 ops/sec [1,124,380..1,158,145] → 1,317,429 ops/sec [1,298,056..1,350,929] 🟢 +14.7%
read JSON number property 458,409 ops/sec [440,094..475,496] → 499,145 ops/sec [480,081..508,236] 🟢 +8.9% 1,160,179 ops/sec [1,143,194..1,170,671] → 1,326,299 ops/sec [1,274,763..1,347,848] 🟢 +14.3%
read JSON boolean property 464,940 ops/sec [445,325..477,755] → 515,298 ops/sec [503,996..522,050] 🟢 +10.8% 1,141,253 ops/sec [1,118,800..1,166,938] → 1,309,965 ops/sec [1,284,709..1,355,764] 🟢 +14.8%
read JSON array property 452,160 ops/sec [445,274..467,660] → 507,206 ops/sec [500,940..511,605] 🟢 +12.2% 1,115,825 ops/sec [1,112,722..1,118,489] → 1,317,442 ops/sec [1,288,109..1,337,149] 🟢 +18.1%
read multiple JSON properties 274,787 ops/sec [270,311..277,054] → 302,049 ops/sec [296,359..309,829] 🟢 +9.9% 889,891 ops/sec [882,280..890,961] → 1,009,113 ops/sec [990,278..1,012,002] 🟢 +13.4%
numbers.js — Interp: 🟢 10, 1 unch. · avg +9.6% · Bytecode: 🟢 11 · avg +11.5%
Benchmark Interpreted Δ Bytecode Δ
integer arithmetic 141,442 ops/sec [139,136..146,829] → 155,660 ops/sec [150,077..163,742] 🟢 +10.1% 492,473 ops/sec [489,889..493,823] → 552,271 ops/sec [543,190..574,978] 🟢 +12.1%
floating point arithmetic 165,847 ops/sec [162,818..169,072] → 183,165 ops/sec [175,665..188,908] 🟢 +10.4% 259,764 ops/sec [259,161..262,323] → 285,683 ops/sec [280,692..294,037] 🟢 +10.0%
number coercion 68,897 ops/sec [67,006..70,892] → 75,462 ops/sec [74,317..78,541] 🟢 +9.5% 81,440 ops/sec [81,219..82,105] → 99,179 ops/sec [94,514..100,741] 🟢 +21.8%
toFixed 39,980 ops/sec [38,593..40,381] → 43,970 ops/sec [43,540..44,969] 🟢 +10.0% 40,885 ops/sec [40,752..41,077] → 44,346 ops/sec [42,730..45,482] 🟢 +8.5%
toString 62,126 ops/sec [61,950..62,301] → 66,266 ops/sec [65,484..66,438] 🟢 +6.7% 69,388 ops/sec [69,096..69,864] → 73,772 ops/sec [73,680..73,983] 🟢 +6.3%
valueOf 92,891 ops/sec [91,646..94,927] → 96,532 ops/sec [94,821..102,095] ~ overlap (+3.9%) 102,850 ops/sec [102,110..103,835] → 110,302 ops/sec [107,530..111,118] 🟢 +7.2%
toPrecision 35,385 ops/sec [34,710..35,806] → 39,168 ops/sec [37,922..39,718] 🟢 +10.7% 35,011 ops/sec [34,901..35,151] → 38,374 ops/sec [37,682..39,475] 🟢 +9.6%
Number.isNaN 108,110 ops/sec [106,078..110,081] → 120,177 ops/sec [116,638..122,080] 🟢 +11.2% 106,016 ops/sec [105,856..106,074] → 126,154 ops/sec [125,247..126,451] 🟢 +19.0%
Number.isFinite 106,300 ops/sec [105,744..109,869] → 120,348 ops/sec [117,898..120,969] 🟢 +13.2% 94,566 ops/sec [94,312..94,804] → 109,534 ops/sec [105,740..110,422] 🟢 +15.8%
Number.isInteger 110,698 ops/sec [109,298..112,599] → 122,400 ops/sec [121,535..125,185] 🟢 +10.6% 107,585 ops/sec [98,805..108,426] → 111,934 ops/sec [110,762..112,334] 🟢 +4.0%
Number.parseInt and parseFloat 86,522 ops/sec [84,673..87,624] → 95,015 ops/sec [92,658..96,040] 🟢 +9.8% 76,396 ops/sec [75,555..84,139] → 85,953 ops/sec [85,429..88,593] 🟢 +12.5%
objects.js — Interp: 🟢 7 · avg +12.2% · Bytecode: 🟢 4, 3 unch. · avg +3.4%
Benchmark Interpreted Δ Bytecode Δ
create simple object 175,289 ops/sec [172,686..177,902] → 193,628 ops/sec [192,314..194,453] 🟢 +10.5% 161,131 ops/sec [160,099..161,274] → 168,750 ops/sec [164,674..172,741] 🟢 +4.7%
create nested object 92,049 ops/sec [91,044..94,007] → 103,146 ops/sec [100,955..105,691] 🟢 +12.1% 72,179 ops/sec [71,470..72,916] → 75,658 ops/sec [74,957..76,283] 🟢 +4.8%
create 50 objects via Array.from 3,234 ops/sec [3,196..3,253] → 3,608 ops/sec [3,555..3,657] 🟢 +11.6% 3,086 ops/sec [2,944..3,145] → 3,170 ops/sec [3,117..3,211] ~ overlap (+2.7%)
property read 182,768 ops/sec [177,033..185,857] → 209,387 ops/sec [202,750..211,426] 🟢 +14.6% 274,440 ops/sec [271,297..275,628] → 293,445 ops/sec [289,206..294,182] 🟢 +6.9%
Object.keys 116,171 ops/sec [114,955..117,030] → 132,029 ops/sec [130,612..134,935] 🟢 +13.7% 134,398 ops/sec [132,289..134,624] → 140,405 ops/sec [139,933..141,917] 🟢 +4.5%
Object.entries 48,776 ops/sec [47,931..49,867] → 55,185 ops/sec [53,011..56,730] 🟢 +13.1% 53,740 ops/sec [53,281..54,009] → 53,485 ops/sec [53,151..54,136] ~ overlap (-0.5%)
spread operator 74,355 ops/sec [73,207..74,741] → 81,860 ops/sec [81,235..88,428] 🟢 +10.1% 74,808 ops/sec [70,384..75,753] → 75,004 ops/sec [74,320..75,187] ~ overlap (+0.3%)
promises.js — Interp: 🟢 6, 6 unch. · avg +4.0% · Bytecode: 🟢 3, 9 unch. · avg +1.1%
Benchmark Interpreted Δ Bytecode Δ
Promise.resolve(value) 193,792 ops/sec [193,076..195,112] → 210,490 ops/sec [206,410..215,442] 🟢 +8.6% 226,505 ops/sec [222,893..231,960] → 222,211 ops/sec [215,433..231,527] ~ overlap (-1.9%)
new Promise(resolve => resolve(value)) 72,907 ops/sec [71,617..74,097] → 77,855 ops/sec [76,991..78,784] 🟢 +6.8% 102,016 ops/sec [99,230..104,644] → 100,397 ops/sec [97,431..103,374] ~ overlap (-1.6%)
Promise.reject(reason) 198,796 ops/sec [197,233..200,484] → 218,264 ops/sec [217,153..220,389] 🟢 +9.8% 223,631 ops/sec [219,401..225,103] → 229,017 ops/sec [223,387..231,691] ~ overlap (+2.4%)
resolve + then (1 handler) 73,805 ops/sec [69,806..74,196] → 78,199 ops/sec [77,861..78,586] 🟢 +6.0% 97,461 ops/sec [93,345..97,811] → 96,027 ops/sec [92,909..97,219] ~ overlap (-1.5%)
resolve + then chain (3 deep) 30,640 ops/sec [30,459..31,781] → 32,834 ops/sec [31,330..34,172] ~ overlap (+7.2%) 41,560 ops/sec [38,916..41,808] → 39,729 ops/sec [39,125..42,487] ~ overlap (-4.4%)
resolve + then chain (10 deep) 10,648 ops/sec [10,443..10,813] → 10,894 ops/sec [10,763..11,428] ~ overlap (+2.3%) 13,384 ops/sec [12,946..13,454] → 13,233 ops/sec [13,002..13,689] ~ overlap (-1.1%)
reject + catch + then 46,074 ops/sec [45,552..46,370] → 47,020 ops/sec [46,804..47,194] 🟢 +2.1% 53,020 ops/sec [52,143..53,990] → 52,237 ops/sec [51,971..56,834] ~ overlap (-1.5%)
resolve + finally + then 38,233 ops/sec [37,939..38,943] → 41,244 ops/sec [40,377..43,159] 🟢 +7.9% 45,410 ops/sec [44,927..45,880] → 43,987 ops/sec [43,325..47,270] ~ overlap (-3.1%)
Promise.all (5 resolved) 17,190 ops/sec [15,669..17,304] → 17,050 ops/sec [16,910..17,172] ~ overlap (-0.8%) 16,694 ops/sec [16,568..16,824] → 16,842 ops/sec [15,731..17,009] ~ overlap (+0.9%)
Promise.race (5 resolved) 18,381 ops/sec [16,575..18,574] → 18,252 ops/sec [17,901..18,756] ~ overlap (-0.7%) 17,352 ops/sec [17,098..17,971] → 18,548 ops/sec [18,429..19,076] 🟢 +6.9%
Promise.allSettled (5 mixed) 14,022 ops/sec [13,909..14,183] → 14,274 ops/sec [13,890..14,449] ~ overlap (+1.8%) 13,594 ops/sec [13,541..13,967] → 14,859 ops/sec [14,797..15,002] 🟢 +9.3%
Promise.any (5 mixed) 17,665 ops/sec [17,401..17,789] → 17,132 ops/sec [17,032..17,677] ~ overlap (-3.0%) 16,534 ops/sec [16,172..16,832] → 17,942 ops/sec [17,881..17,970] 🟢 +8.5%
regexp.js — Interp: 🟢 5, 🔴 5, 1 unch. · avg +5.7% · Bytecode: 🟢 5, 🔴 6 · avg +2.9%
Benchmark Interpreted Δ Bytecode Δ
regex literal creation 7,215 ops/sec [7,136..7,232] → 9,020 ops/sec [8,826..9,111] 🟢 +25.0% 6,699 ops/sec [6,675..6,748] → 8,604 ops/sec [8,524..8,675] 🟢 +28.4%
new RegExp(pattern, flags) 7,105 ops/sec [7,026..7,138] → 8,924 ops/sec [8,825..8,960] 🟢 +25.6% 6,665 ops/sec [6,567..6,706] → 8,672 ops/sec [8,627..8,738] 🟢 +30.1%
RegExp(existingRegex) returns the same regex 227,403 ops/sec [225,590..232,543] → 263,150 ops/sec [258,091..269,402] 🟢 +15.7% 314,837 ops/sec [308,735..318,126] → 373,174 ops/sec [369,265..380,516] 🟢 +18.5%
test() on a global regex 37,713 ops/sec [37,327..39,206] → 44,125 ops/sec [43,584..44,508] 🟢 +17.0% 40,445 ops/sec [40,133..40,923] → 46,161 ops/sec [45,093..46,826] 🟢 +14.1%
exec() with capture groups 15,275 ops/sec [15,101..15,554] → 14,467 ops/sec [14,029..14,802] 🔴 -5.3% 16,410 ops/sec [16,346..16,576] → 14,891 ops/sec [14,723..15,002] 🔴 -9.3%
toString() 183,620 ops/sec [180,538..189,574] → 210,724 ops/sec [208,257..212,927] 🟢 +14.8% 228,255 ops/sec [223,472..230,115] → 245,139 ops/sec [241,587..247,480] 🟢 +7.4%
match() with global regex 1,676 ops/sec [1,655..1,699] → 1,559 ops/sec [1,506..1,595] 🔴 -7.0% 1,748 ops/sec [1,738..1,755] → 1,530 ops/sec [1,494..1,563] 🔴 -12.5%
matchAll() with capture groups 3,640 ops/sec [3,598..3,662] → 3,690 ops/sec [3,662..3,765] ~ overlap (+1.4%) 4,174 ops/sec [4,130..4,182] → 3,885 ops/sec [3,835..3,954] 🔴 -6.9%
replace() with global regex 1,658 ops/sec [1,638..1,683] → 1,538 ops/sec [1,514..1,568] 🔴 -7.2% 1,723 ops/sec [1,717..1,732] → 1,500 ops/sec [1,493..1,521] 🔴 -12.9%
search() with regex 1,848 ops/sec [1,803..1,855] → 1,645 ops/sec [1,609..1,737] 🔴 -11.0% 1,916 ops/sec [1,893..1,923] → 1,633 ops/sec [1,616..1,653] 🔴 -14.8%
split() with regex separator 1,364 ops/sec [1,352..1,371] → 1,275 ops/sec [1,252..1,297] 🔴 -6.5% 1,409 ops/sec [1,396..1,431] → 1,262 ops/sec [1,247..1,271] 🔴 -10.5%
strings.js — Interp: 🟢 16, 3 unch. · avg +6.8% · Bytecode: 🟢 17, 2 unch. · avg +8.8%
Benchmark Interpreted Δ Bytecode Δ
string concatenation 147,904 ops/sec [145,668..149,924] → 152,938 ops/sec [152,366..154,719] 🟢 +3.4% 742,402 ops/sec [732,678..757,774] → 874,152 ops/sec [872,258..882,656] 🟢 +17.7%
template literal 271,567 ops/sec [258,481..272,491] → 278,018 ops/sec [275,216..280,368] 🟢 +2.4% 517,416 ops/sec [511,153..520,943] → 588,239 ops/sec [585,026..593,191] 🟢 +13.7%
string repeat 163,855 ops/sec [161,544..168,777] → 176,209 ops/sec [172,568..179,500] 🟢 +7.5% 192,152 ops/sec [181,833..196,047] → 199,278 ops/sec [196,639..199,873] 🟢 +3.7%
split and join 26,840 ops/sec [26,511..27,473] → 30,025 ops/sec [29,651..30,035] 🟢 +11.9% 26,718 ops/sec [26,373..27,580] → 31,691 ops/sec [30,985..32,238] 🟢 +18.6%
indexOf and includes 50,061 ops/sec [49,707..52,088] → 55,143 ops/sec [53,590..56,207] 🟢 +10.2% 48,303 ops/sec [48,198..49,136] → 51,640 ops/sec [51,450..53,031] 🟢 +6.9%
toUpperCase and toLowerCase 81,004 ops/sec [80,240..81,828] → 85,446 ops/sec [84,401..86,601] 🟢 +5.5% 90,214 ops/sec [89,141..90,995] → 89,030 ops/sec [87,598..93,053] ~ overlap (-1.3%)
slice and substring 50,333 ops/sec [48,158..50,805] → 53,064 ops/sec [51,866..54,817] 🟢 +5.4% 52,754 ops/sec [51,838..53,921] → 57,048 ops/sec [54,559..58,141] 🟢 +8.1%
trim operations 74,782 ops/sec [72,592..75,656] → 77,620 ops/sec [75,501..78,725] ~ overlap (+3.8%) 76,622 ops/sec [74,676..77,655] → 81,419 ops/sec [78,063..82,843] 🟢 +6.3%
replace and replaceAll 50,153 ops/sec [49,709..50,918] → 55,873 ops/sec [54,612..56,808] 🟢 +11.4% 47,448 ops/sec [46,568..49,027] → 53,489 ops/sec [51,967..54,965] 🟢 +12.7%
startsWith and endsWith 47,440 ops/sec [46,008..48,410] → 50,644 ops/sec [49,595..52,918] 🟢 +6.8% 43,033 ops/sec [42,179..44,104] → 45,851 ops/sec [44,887..49,112] 🟢 +6.5%
padStart and padEnd 70,353 ops/sec [68,621..72,305] → 76,308 ops/sec [75,586..77,417] 🟢 +8.5% 71,099 ops/sec [69,167..72,460] → 75,316 ops/sec [73,454..78,360] 🟢 +5.9%
identity tag, no substitutions 154,867 ops/sec [153,296..159,551] → 169,485 ops/sec [168,320..170,827] 🟢 +9.4% 435,826 ops/sec [421,310..444,539] → 494,362 ops/sec [483,397..515,493] 🟢 +13.4%
tag with 1 substitution 31,639 ops/sec [31,338..31,957] → 34,237 ops/sec [33,740..34,930] 🟢 +8.2% 45,029 ops/sec [43,817..45,640] → 47,068 ops/sec [46,674..47,897] 🟢 +4.5%
tag with 3 substitutions 17,160 ops/sec [17,014..17,345] → 18,404 ops/sec [18,356..18,435] 🟢 +7.3% 26,109 ops/sec [25,801..26,974] → 27,542 ops/sec [27,278..28,116] 🟢 +5.5%
tag with 6 substitutions 9,961 ops/sec [9,867..10,348] → 10,831 ops/sec [10,656..11,016] 🟢 +8.7% 15,376 ops/sec [15,268..16,313] → 16,096 ops/sec [15,692..16,213] ~ overlap (+4.7%)
String.raw, no substitutions 218,191 ops/sec [215,368..226,191] → 227,005 ops/sec [211,965..233,995] ~ overlap (+4.0%) 220,255 ops/sec [212,976..221,778] → 233,417 ops/sec [230,619..236,943] 🟢 +6.0%
String.raw, 2 substitutions 158,766 ops/sec [157,834..159,383] → 164,640 ops/sec [163,034..166,398] 🟢 +3.7% 131,156 ops/sec [130,618..135,458] → 151,278 ops/sec [147,913..162,034] 🟢 +15.3%
tag accessing .raw array 62,212 ops/sec [60,791..65,300] → 65,292 ops/sec [64,099..66,298] ~ overlap (+5.0%) 74,467 ops/sec [74,218..74,902] → 82,030 ops/sec [80,552..83,250] 🟢 +10.2%
method as tag (this binding) 22,983 ops/sec [22,810..23,097] → 24,413 ops/sec [24,215..24,629] 🟢 +6.2% 33,268 ops/sec [32,834..33,419] → 36,187 ops/sec [35,719..37,067] 🟢 +8.8%
tsv.js — Interp: 🟢 7, 🔴 1, 1 unch. · avg +6.9% · Bytecode: 🟢 9 · avg +16.2%
Benchmark Interpreted Δ Bytecode Δ
parse simple 3-column TSV 48,114 ops/sec [48,073..48,296] → 47,529 ops/sec [47,157..47,956] 🔴 -1.2% 45,427 ops/sec [44,964..46,037] → 53,304 ops/sec [53,065..53,938] 🟢 +17.3%
parse 10-row TSV 11,703 ops/sec [11,603..11,860] → 12,685 ops/sec [12,596..13,197] 🟢 +8.4% 11,749 ops/sec [11,660..11,947] → 14,135 ops/sec [13,313..14,269] 🟢 +20.3%
parse 100-row TSV 1,886 ops/sec [1,856..1,894] → 1,992 ops/sec [1,976..2,052] 🟢 +5.6% 1,871 ops/sec [1,832..1,884] → 2,045 ops/sec [2,018..2,050] 🟢 +9.3%
parse TSV with backslash-escaped fields 9,028 ops/sec [8,881..9,270] → 9,624 ops/sec [9,215..10,273] ~ overlap (+6.6%) 8,918 ops/sec [8,572..9,275] → 9,948 ops/sec [9,841..10,128] 🟢 +11.6%
parse without headers (array of arrays) 6,021 ops/sec [5,962..6,039] → 6,331 ops/sec [6,088..6,520] 🟢 +5.1% 5,843 ops/sec [5,731..6,063] → 6,357 ops/sec [6,301..6,575] 🟢 +8.8%
stringify array of objects 40,165 ops/sec [39,323..40,807] → 44,984 ops/sec [43,255..45,280] 🟢 +12.0% 38,243 ops/sec [37,961..38,658] → 45,668 ops/sec [45,575..45,701] 🟢 +19.4%
stringify array of arrays 11,646 ops/sec [11,514..11,886] → 12,693 ops/sec [12,165..13,633] 🟢 +9.0% 10,441 ops/sec [10,296..10,452] → 13,020 ops/sec [12,979..13,133] 🟢 +24.7%
stringify with values needing escaping 32,172 ops/sec [31,096..33,573] → 35,809 ops/sec [35,546..36,110] 🟢 +11.3% 30,764 ops/sec [30,658..31,042] → 36,619 ops/sec [36,546..37,265] 🟢 +19.0%
parse then stringify 6,979 ops/sec [6,963..6,992] → 7,334 ops/sec [7,054..7,459] 🟢 +5.1% 6,658 ops/sec [6,605..6,717] → 7,670 ops/sec [7,553..7,826] 🟢 +15.2%
typed-arrays.js — Interp: 🟢 22 · avg +14.1% · Bytecode: 🟢 13, 🔴 5, 4 unch. · avg +25.2%
Benchmark Interpreted Δ Bytecode Δ
new Int32Array(0) 115,393 ops/sec [115,002..115,501] → 128,177 ops/sec [126,242..130,392] 🟢 +11.1% 137,862 ops/sec [135,441..140,463] → 146,342 ops/sec [146,185..146,901] 🟢 +6.2%
new Int32Array(100) 108,798 ops/sec [108,324..110,310] → 122,912 ops/sec [117,531..123,277] 🟢 +13.0% 130,885 ops/sec [127,533..134,826] → 136,997 ops/sec [133,838..141,061] ~ overlap (+4.7%)
new Int32Array(1000) 82,048 ops/sec [81,545..82,952] → 88,415 ops/sec [87,735..89,631] 🟢 +7.8% 98,307 ops/sec [96,909..99,089] → 92,649 ops/sec [91,994..94,303] 🔴 -5.8%
new Float64Array(100) 104,823 ops/sec [102,969..106,350] → 114,702 ops/sec [113,950..115,978] 🟢 +9.4% 124,667 ops/sec [120,541..126,470] → 125,822 ops/sec [125,152..127,183] ~ overlap (+0.9%)
Int32Array.from([...]) 3,646 ops/sec [3,628..3,648] → 4,090 ops/sec [3,944..4,142] 🟢 +12.2% 3,800 ops/sec [3,759..3,865] → 4,125 ops/sec [4,117..4,133] 🟢 +8.5%
Int32Array.of(1, 2, 3, 4, 5) 114,435 ops/sec [113,747..115,125] → 126,524 ops/sec [125,570..129,633] 🟢 +10.6% 128,611 ops/sec [126,748..130,950] → 140,620 ops/sec [139,360..141,987] 🟢 +9.3%
sequential write 100 elements 1,013 ops/sec [1,001..1,016] → 1,111 ops/sec [1,099..1,127] 🟢 +9.7% 2,487 ops/sec [2,378..2,489] → 2,473 ops/sec [2,444..2,486] ~ overlap (-0.6%)
sequential read 100 elements 1,052 ops/sec [1,049..1,059] → 1,166 ops/sec [1,151..1,185] 🟢 +10.8% 2,462 ops/sec [2,454..2,538] → 2,735 ops/sec [2,648..2,759] 🟢 +11.1%
Float64Array write 100 elements 943 ops/sec [926..958] → 1,039 ops/sec [1,028..1,049] 🟢 +10.1% 2,158 ops/sec [2,144..2,178] → 2,035 ops/sec [2,016..2,050] 🔴 -5.7%
fill(42) 4,457 ops/sec [4,425..4,477] → 4,813 ops/sec [4,752..4,860] 🟢 +8.0% 3,321 ops/sec [3,089..3,422] → 4,813 ops/sec [4,792..4,843] 🟢 +44.9%
slice() 34,568 ops/sec [34,474..34,708] → 37,823 ops/sec [37,710..37,969] 🟢 +9.4% 28,251 ops/sec [26,333..28,677] → 39,028 ops/sec [38,909..40,088] 🟢 +38.1%
map(x => x * 2) 2,036 ops/sec [2,021..2,070] → 2,347 ops/sec [2,321..2,385] 🟢 +15.3% 2,653 ops/sec [2,607..2,693] → 2,917 ops/sec [2,898..2,922] 🟢 +10.0%
filter(x => x > 50) 2,095 ops/sec [2,048..2,108] → 2,349 ops/sec [2,276..2,362] 🟢 +12.2% 2,834 ops/sec [2,805..2,851] → 3,097 ops/sec [3,055..3,142] 🟢 +9.3%
reduce (sum) 2,012 ops/sec [1,968..2,020] → 2,309 ops/sec [2,223..2,358] 🟢 +14.8% 2,537 ops/sec [2,511..2,567] → 4,394 ops/sec [4,376..4,410] 🟢 +73.2%
sort() 21,019 ops/sec [20,732..21,188] → 22,982 ops/sec [22,831..23,162] 🟢 +9.3% 16,496 ops/sec [15,409..16,637] → 35,027 ops/sec [34,803..35,120] 🟢 +112.3%
indexOf() 32,019 ops/sec [31,690..32,312] → 37,731 ops/sec [37,534..37,984] 🟢 +17.8% 31,675 ops/sec [30,933..31,726] → 58,134 ops/sec [57,513..58,308] 🟢 +83.5%
reverse() 38,717 ops/sec [38,640..38,784] → 42,118 ops/sec [41,783..42,401] 🟢 +8.8% 29,616 ops/sec [29,538..30,727] → 64,171 ops/sec [63,941..64,511] 🟢 +116.7%
create view over existing buffer 131,500 ops/sec [127,404..132,377] → 146,775 ops/sec [145,355..148,717] 🟢 +11.6% 164,472 ops/sec [152,536..165,901] → 261,076 ops/sec [258,263..263,783] 🟢 +58.7%
subarray() 142,031 ops/sec [139,927..142,279] → 158,691 ops/sec [157,091..162,032] 🟢 +11.7% 300,747 ops/sec [299,386..301,534] → 279,685 ops/sec [278,368..282,135] 🔴 -7.0%
set() from array 123,222 ops/sec [122,280..124,865] → 220,929 ops/sec [219,572..221,766] 🟢 +79.3% 238,568 ops/sec [235,527..238,991] → 240,233 ops/sec [238,852..241,133] ~ overlap (+0.7%)
for-of loop 3,067 ops/sec [3,039..3,085] → 3,351 ops/sec [3,336..3,357] 🟢 +9.3% 15,849 ops/sec [15,774..15,935] → 14,557 ops/sec [14,268..14,686] 🔴 -8.2%
spread into array 11,312 ops/sec [11,204..11,414] → 12,182 ops/sec [12,156..12,313] 🟢 +7.7% 47,830 ops/sec [47,616..48,171] → 44,784 ops/sec [44,391..45,203] 🔴 -6.4%
uint8array-encoding.js — Interp: 🟢 9, 🔴 7, 2 unch. · avg -7.4% · Bytecode: 🟢 9, 🔴 2, 7 unch. · avg +17.8%
Benchmark Interpreted Δ Bytecode Δ
short (5 bytes) 211,881 ops/sec [201,326..347,668] → 223,090 ops/sec [219,060..223,850] ~ overlap (+5.3%) 227,136 ops/sec [225,932..229,929] → 243,442 ops/sec [242,808..245,678] 🟢 +7.2%
medium (450 bytes) 190,993 ops/sec [189,291..194,345] → 140,118 ops/sec [136,659..141,318] 🔴 -26.6% 135,880 ops/sec [134,909..136,949] → 208,934 ops/sec [204,954..210,329] 🟢 +53.8%
large (4096 bytes) 41,507 ops/sec [41,389..42,173] → 33,884 ops/sec [33,571..34,087] 🔴 -18.4% 32,191 ops/sec [31,408..32,675] → 42,688 ops/sec [42,454..43,565] 🟢 +32.6%
base64url alphabet 138,761 ops/sec [137,971..139,159] → 105,229 ops/sec [104,242..106,035] 🔴 -24.2% 87,738 ops/sec [85,745..88,637] → 134,987 ops/sec [133,492..135,526] 🟢 +53.9%
omitPadding 202,827 ops/sec [200,452..205,107] → 141,096 ops/sec [139,896..142,493] 🔴 -30.4% 126,997 ops/sec [120,837..129,549] → 213,429 ops/sec [210,609..215,282] 🟢 +68.1%
short (8 chars) 223,171 ops/sec [221,455..225,097] → 152,743 ops/sec [149,630..155,214] 🔴 -31.6% 138,742 ops/sec [138,225..142,909] → 230,552 ops/sec [228,532..234,888] 🟢 +66.2%
medium (600 chars) 119,086 ops/sec [117,948..120,185] → 76,983 ops/sec [75,836..78,556] 🔴 -35.4% 69,993 ops/sec [68,406..73,710] → 75,862 ops/sec [75,382..122,280] 🟢 +8.4%
large (5464 chars) 25,398 ops/sec [24,304..25,847] → 18,103 ops/sec [15,220..25,712] ~ overlap (-28.7%) 14,301 ops/sec [14,154..14,491] → 15,103 ops/sec [14,989..15,216] 🟢 +5.6%
short (5 bytes) 339,766 ops/sec [328,360..343,330] → 372,843 ops/sec [369,288..382,886] 🟢 +9.7% 255,251 ops/sec [243,019..271,382] → 270,300 ops/sec [264,542..276,300] ~ overlap (+5.9%)
medium (450 bytes) 193,029 ops/sec [191,521..195,314] → 208,209 ops/sec [195,803..225,529] 🟢 +7.9% 126,849 ops/sec [126,042..127,279] → 132,037 ops/sec [131,733..138,498] 🟢 +4.1%
large (4096 bytes) 42,387 ops/sec [42,207..42,515] → 46,684 ops/sec [46,435..47,063] 🟢 +10.1% 27,292 ops/sec [27,026..27,505] → 27,013 ops/sec [26,459..27,192] ~ overlap (-1.0%)
short (10 chars) 238,186 ops/sec [237,868..240,577] → 264,151 ops/sec [261,647..265,748] 🟢 +10.9% 167,354 ops/sec [166,574..167,997] → 166,937 ops/sec [166,289..167,418] ~ overlap (-0.2%)
medium (900 chars) 169,046 ops/sec [163,243..171,146] → 176,670 ops/sec [175,646..178,709] 🟢 +4.5% 111,505 ops/sec [106,864..112,219] → 106,929 ops/sec [106,292..108,189] ~ overlap (-4.1%)
large (8192 chars) 50,767 ops/sec [50,372..50,996] → 48,731 ops/sec [48,132..48,918] 🔴 -4.0% 30,974 ops/sec [28,677..31,857] → 25,741 ops/sec [25,231..26,364] 🔴 -16.9%
setFromBase64 (450 bytes) 101,115 ops/sec [100,379..102,378] → 108,549 ops/sec [108,324..109,627] 🟢 +7.4% 65,763 ops/sec [63,219..68,863] → 68,755 ops/sec [68,422..69,499] ~ overlap (+4.5%)
setFromHex (450 bytes) 38,993 ops/sec [38,857..39,045] → 40,183 ops/sec [40,013..40,309] 🟢 +3.1% 18,870 ops/sec [18,698..35,099] → 25,805 ops/sec [25,521..25,846] ~ overlap (+36.8%)
toBase64 → fromBase64 (450 bytes) 82,450 ops/sec [79,382..83,165] → 85,161 ops/sec [84,910..85,172] 🟢 +3.3% 82,199 ops/sec [81,003..82,370] → 81,521 ops/sec [81,001..81,802] ~ overlap (-0.8%)
toHex → fromHex (450 bytes) 107,407 ops/sec [105,099..107,522] → 111,481 ops/sec [110,386..112,901] 🟢 +3.8% 109,244 ops/sec [108,886..109,524] → 104,846 ops/sec [104,298..105,409] 🔴 -4.0%
weak-collections.js — Interp: 🟢 15 · avg +29.2% · Bytecode: 🟢 2, 🔴 12, 1 unch. · avg -29.0%
Benchmark Interpreted Δ Bytecode Δ
constructor from 50 entries 10,588 ops/sec [10,479..10,751] → 11,927 ops/sec [11,602..12,843] 🟢 +12.6% 9,491 ops/sec [9,140..9,702] → 11,729 ops/sec [11,647..12,053] 🟢 +23.6%
set 50 object keys 3,756 ops/sec [3,754..3,783] → 6,555 ops/sec [4,083..6,747] 🟢 +74.5% 4,483 ops/sec [4,416..4,608] → 4,798 ops/sec [4,682..4,966] 🟢 +7.0%
get lookups (50 entries) 58,257 ops/sec [55,920..60,031] → 99,722 ops/sec [99,435..99,976] 🟢 +71.2% 143,961 ops/sec [82,639..158,697] → 92,056 ops/sec [90,947..92,666] ~ overlap (-36.1%)
has checks (50 entries) 74,354 ops/sec [73,450..77,962] → 82,225 ops/sec [80,184..84,413] 🟢 +10.6% 198,496 ops/sec [196,822..199,223] → 115,896 ops/sec [114,343..119,890] 🔴 -41.6%
delete entries 3,497 ops/sec [3,450..3,593] → 3,946 ops/sec [3,933..4,053] 🟢 +12.8% 7,692 ops/sec [7,581..7,713] → 4,663 ops/sec [4,619..4,711] 🔴 -39.4%
non-registered symbol keys 8,599 ops/sec [8,461..8,683] → 9,595 ops/sec [9,471..9,780] 🟢 +11.6% 18,669 ops/sec [18,495..18,823] → 11,087 ops/sec [11,044..11,250] 🔴 -40.6%
getOrInsert 3,524 ops/sec [3,472..3,580] → 3,933 ops/sec [3,917..3,969] 🟢 +11.6% 7,199 ops/sec [7,057..7,283] → 4,329 ops/sec [4,304..4,361] 🔴 -39.9%
getOrInsertComputed 1,882 ops/sec [1,810..1,900] → 2,017 ops/sec [1,998..2,055] 🟢 +7.2% 3,705 ops/sec [3,679..3,731] → 2,274 ops/sec [2,261..2,314] 🔴 -38.6%
forced gc live-key retention 3,781 ops/sec [3,697..3,897] → 4,041 ops/sec [3,977..4,123] 🟢 +6.9% 6,541 ops/sec [6,489..6,646] → 3,954 ops/sec [3,865..4,027] 🔴 -39.5%
constructor from 50 values 13,230 ops/sec [12,912..13,776] → 15,823 ops/sec [15,762..15,836] 🟢 +19.6% 23,298 ops/sec [23,229..23,459] → 15,084 ops/sec [14,908..15,756] 🔴 -35.3%
add 50 object values 4,037 ops/sec [3,994..4,058] → 4,473 ops/sec [4,434..4,523] 🟢 +10.8% 8,475 ops/sec [8,450..8,484] → 5,101 ops/sec [5,090..5,153] 🔴 -39.8%
has checks (50 values) 75,946 ops/sec [72,616..77,040] → 84,938 ops/sec [83,983..85,784] 🟢 +11.8% 197,645 ops/sec [196,859..198,190] → 120,854 ops/sec [120,532..121,584] 🔴 -38.9%
delete values 10,348 ops/sec [10,098..10,450] → 12,109 ops/sec [11,993..12,315] 🟢 +17.0% 20,690 ops/sec [20,497..20,876] → 13,730 ops/sec [13,411..14,084] 🔴 -33.6%
non-registered symbol values 8,868 ops/sec [8,665..8,878] → 16,290 ops/sec [9,789..16,846] 🟢 +83.7% 19,573 ops/sec [19,024..19,622] → 11,893 ops/sec [11,756..17,708] 🔴 -39.2%
forced gc pruning smoke 4,356 ops/sec [4,326..4,383] → 7,663 ops/sec [7,628..7,893] 🟢 +75.9% 8,105 ops/sec [8,071..8,115] → 7,846 ops/sec [7,768..7,860] 🔴 -3.2%

Deterministic profile diff

Deterministic profile diff: no significant changes.

Measured on ubuntu-latest x64. Benchmark ranges compare cached main-branch min/max ops/sec with the PR run; overlapping ranges are treated as unchanged noise. Percentage deltas are secondary context.

@frostney frostney marked this pull request as ready for review June 2, 2026 04:51
@coderabbitai coderabbitai Bot added documentation Improvements or additions to documentation internal Refactoring, CI, tooling, cleanup labels Jun 2, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

test262 Conformance

Category Run Passed Δ Pass Failed Pass-rate Δ Rate
built-ins 23,449 16,070 +1 7,374 68.5% ±0pp
harness 116 72 ±0 44 62.1% ±0pp
intl402 3,324 985 ±0 2,339 29.6% ±0pp
language 23,635 14,631 ±0 9,004 61.9% ±0pp
staging 1,484 574 ±0 908 38.7% ±0pp
total 52,008 32,332 +1 19,669 62.2% ±0pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
built-ins/WeakMap 99.3% ±0pp 140 / 141
language/asi 99.0% ±0pp 101 / 102
built-ins/WeakSet 98.8% ±0pp 84 / 85
Per-test deltas (+1 / -0)

Newly passing (1):

  • built-ins/Number/prototype/toExponential/undefined-fractiondigits.js

Steady-state failures are non-blocking; regressions vs the cached main baseline (lower total pass count, or any PASS → non-PASS transition) fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached main baseline.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/tc39-mcp-bump.yml:
- Around line 26-41: The workflow is interpolating the untrusted npm-derived
value steps.latest.outputs.version directly into run shells (seen in the "Update
pin in agent docs" and the id: changed run blocks), which can allow shell
injection; change those steps to pass the version through an environment
variable (e.g., add env: VERSION: ${{ steps.latest.outputs.version }} on the
steps and use "$VERSION" inside the run scripts) so the run blocks reference the
safe quoted env var instead of expanding the output inline; update the "Update
pin in agent docs" step and the id: changed step to use the env VAR and quoted
"$VERSION" in their run logic.
- Around line 22-45: The workflow currently references actions by floating tags
(actions/checkout@v5, oven-sh/setup-bun@v2, peter-evans/create-pull-request@v7)
and leaves checkout credentials persisted; replace those three uses: entries for
actions/checkout, oven-sh/setup-bun, and peter-evans/create-pull-request with
their corresponding full commit SHAs (pin to exact commits) and add
persist-credentials: false to the actions/checkout step to avoid leaving repo
credentials in the runner environment.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9ee9f4c6-5096-44bc-900e-c9dace49a6f1

📥 Commits

Reviewing files that changed from the base of the PR and between 05ab54c and 73425b7.

📒 Files selected for processing (5)
  • .agents/skills/gocciascript-issue-validation/SKILL.md
  • .github/workflows/tc39-mcp-bump.yml
  • .mcp.example.json
  • AGENTS.md
  • scripts/tc39-mcp-bump-pin.ts

Comment thread .github/workflows/tc39-mcp-bump.yml Outdated
Comment thread .github/workflows/tc39-mcp-bump.yml
frostney added 3 commits June 2, 2026 07:08
Pass the npm-derived version through a step environment variable before
using it in shell commands.
Pin the tc39-mcp bump workflow actions to commit SHAs and disable
checkout credential persistence.
Pin the test262, TOML, and YAML bump workflow actions to commit SHAs and
disable checkout credential persistence.
@frostney frostney merged commit 1ba639a into main Jun 2, 2026
14 checks passed
@frostney frostney deleted the t3code/7b30c15c branch June 2, 2026 05:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation internal Refactoring, CI, tooling, cleanup

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant