Skip to main content
Version: 0.3

Xisto vs Bun

13 Nov 2026, the xisto variants of main e5fb066 (before mandelbrot-8), on the Apple M4 and the two AWS VMs.

Setup​

  • Bun programs: the official Node programs of the Benchmarks Game, one per problem, kept in bench/benchmarksgame/node/ (BSD-3): spectral-norm #1, n-body #8, fannkuch-redux #8, binary-trees #7, mandelbrot #1, fasta #1, k-nucleotide #8, reverse-complement #2, regex-redux #4, pidigits #2 and #3. They run on one thread.
  • Runtime: Bun 1.4.4 on all three machines (the official release zips on the VMs, checked against SHASUMS256.txt). Bun runs a .cjs copy of each program, because some originals assign undeclared names (f = 0), which an ES module refuses.
  • xisto: the same variants as the Rust round, built with XISTO_CPU=native. The xisto variants and what each does are listed on Xisto vs Rust.
  • Command: python3 bench/benchmarksgame/langs.py 3 node=js:NODE bun=js:BUN runs both runtimes in one round, scored with python3 bench/placar.py RESULTS bun (see How every run is measured).
  • Steal during the round: +596 on the Xeon, +2,566 on the Graviton2 (the same round as Node).

Most xisto variants run on every core (10 on the M4, 2 on the VMs), while the Bun programs run on one. The time ratio therefore mixes a faster program with more cores; the CPU columns compare the work done. The ratio in the result column is Bun's time divided by xisto's.

Apple M4 (10 cores)​

Source: bench/results/node-bun-mac-m4-2026-11-13-e5fb066.txt.

problemxistoBunxisto timeBun timexisto CPUBun CPUxisto memBun memresult
spectral-normspectralnorm-6spectralnorm-10.069 s1.312 s0.53 s1.32 s2.7 MB20 MBwin, 19.0×
n-bodynbodynbody-81.124 s2.487 s1.12 s2.49 s1.2 MB19 MBwin, 2.2×
fannkuch-reduxfannkuchredux-5fannkuchredux-81.627 s25.868 s15.53 s25.86 s3.6 MB19 MBwin, 15.9×
binary-treesbinarytrees-2 †binarytrees-70.246 s3.450 s1.87 s4.27 s120 MB1,194 MBwin, 14.0×
mandelbrotmandelbrot-6mandelbrot-10.258 s22.357 s2.42 s22.20 s9.4 MB25 MBwin, 86.7×
fastafastafasta-10.232 s5.518 s0.16 s5.50 s2.3 MB85 MBwin, 23.8×
k-nucleotideknucleotide-7knucleotide-80.224 s26.613 s1.62 s26.67 s127 MB1,957 MBwin, 118.8×
reverse-complementrevcomp-9revcomp-20.124 s1.708 s0.10 s1.74 s12 MB282 MBwin, 13.8×
regex-reduxregexredux-2regexredux-40.259 s0.344 s0.37 s0.34 s242 MB364 MBwin, 1.3×
pidigitspidigitspidigits-30.252 s0.727 s0.25 s0.88 s1.9 MB99 MBwin, 2.9×

Xeon E5-2686 v4 (2 vCPUs)​

Source: bench/results/vm-2026-11-13/node-bun-ubuntu-xeon-2026-11-13-e5fb066.txt.

problemxistoBunxisto timeBun timexisto CPUBun CPUxisto memBun memresult
spectral-normspectralnorm-6spectralnorm-10.459 s4.164 s0.89 s4.19 s2.3 MB34 MBwin, 9.1×
n-bodynbodynbody-82.456 s8.155 s2.45 s8.16 s2.0 MB36 MBwin, 3.3×
fannkuch-reduxfannkuchredux-5fannkuchredux-86.596 s55.129 s13.11 s55.13 s2.3 MB34 MBwin, 8.4×
binary-treesbinarytrees †binarytrees-71.624 s13.236 s3.05 s16.76 s70 MB1,067 MBwin, 8.2×
mandelbrotmandelbrot-6mandelbrot-11.327 s72.575 s2.53 s72.33 s7.3 MB42 MBwin, 54.7×
fastafastafasta-11.074 s15.463 s0.29 s15.34 s2.4 MB101 MBwin, 14.4×
k-nucleotideknucleotide-7 †knucleotide-81.384 s96.810 s2.68 s97.45 s69 MB1,690 MBwin, 69.9×
reverse-complementno row: Bun's output differed
regex-reduxregexredux-2regexredux-40.690 s1.146 s0.97 s1.16 s149 MB327 MBwin, 1.7×
pidigitspidigitspidigits-30.625 s2.340 s0.62 s2.37 s2.6 MB109 MBwin, 3.7×

Graviton2 (2 vCPUs)​

Source: bench/results/vm-2026-11-13/node-bun-arm-graviton2-2026-11-13-e5fb066.txt.

problemxistoBunxisto timeBun timexisto CPUBun CPUxisto memBun memresult
spectral-normspectralnorm-7spectralnorm-11.217 s4.777 s2.43 s4.81 s1.8 MB22 MBwin, 3.9×
n-bodynbodynbody-84.610 s14.418 s4.60 s14.43 s1.6 MB22 MBwin, 3.1×
fannkuch-reduxfannkuchredux-5fannkuchredux-88.575 s64.664 s17.13 s64.63 s1.8 MB23 MBwin, 7.5×
binary-treesbinarytrees-3binarytrees-71.832 s13.141 s3.60 s16.97 s114 MB1,127 MBwin, 7.2×
mandelbrotmandelbrot-7mandelbrot-12.744 s59.308 s5.45 s58.59 s6.8 MB32 MBwin, 21.6×
fastafastafasta-10.544 s16.264 s0.38 s16.23 s1.9 MB92 MBwin, 29.9×
k-nucleotideknucleotide-7knucleotide-83.011 s149.910 s5.90 s150.17 s64 MB1,329 MBwin, 49.8×
reverse-complementrevcomp-6 †revcomp-20.282 s3.810 s0.24 s3.90 s188 MB293 MBwin, 13.5×
regex-reduxregexredux-2regexredux-40.799 s1.411 s1.25 s1.42 s149 MB311 MBwin, 1.8×
pidigitspidigitspidigits-22.039 s3.207 s2.04 s3.27 s2.1 MB88 MBwin, 1.6×

Notes​

  • Not scored: reverse-complement on the Xeon, where Bun's output differed; on the M4 and the Graviton2 it matched.
  • Closest row: regex-redux, where Bun's regular expressions are fast: 1.3× on the M4, 1.7× on the Xeon, 1.8× on the Graviton2. On the M4 Bun uses less CPU there (0.34 s against xisto's 0.37 s), the only row of the three pages where the other side uses less CPU.
  • pidigits: Bun's BigInt is much faster than Node's (0.73 s against 5.57 s on the M4); xisto stays ahead by 1.6× to 3.7×.
  • Memory: Bun starts lower than Node (~20–35 MB) but reaches 1.1–2 GB on binary-trees and k-nucleotide.