Fast enough for serious work.

Wax performance should be unremarkable. A Wax port of HarfBuzz takes about 1.35x as long as the original C++ across 13 workloads, and there is still plenty of work left in the optimizer and code generators.

The numbers

The Wax port runs the same OpenType shaping work as HarfBuzz rather than wrapping the native library. Both versions produce identical glyph output.

These are warm shaping times, with the font and shape plan already prepared, against HarfBuzz 14.3.1 on an Apple M3 Max. Apple Clang 17 compiled both versions at -O2. Each result is the median of 15 samples.

Workload Wax core HarfBuzz core Wax / HarfBuzz
Latin UI text 1.17 µs 1.04 µs 1.13x
Latin paragraph 4.44 µs 4.99 µs 0.89x
Variable Latin, wght 700 5.50 µs 5.11 µs 1.08x
CJK mixed paragraph 1.38 µs 0.97 µs 1.42x
Vertical CJK with fallback metrics 1.47 µs 0.78 µs 1.88x
Color emoji ZWJ ligature 0.37 µs 0.33 µs 1.11x
Arabic joining and marks 13.06 µs 7.83 µs 1.67x
Devanagari paragraph 19.27 µs 13.60 µs 1.41x
Thai paragraph 6.76 µs 5.04 µs 1.34x
Khmer paragraph 17.91 µs 11.82 µs 1.52x
Myanmar paragraph 35.36 µs 24.31 µs 1.46x
Hebrew with marks 9.10 µs 6.06 µs 1.50x
Bengali text 12.87 µs 8.96 µs 1.44x
Geometric mean 1.35x

Below 1x, Wax is faster. HarfBuzz wins overall, with the Wax port taking about 35% more time. This measures one substantial subsystem on one machine, not every kind of application work.

This is a baseline, not a ceiling. The optimizer still misses profitable transformations, and the code generators still produce code that can be tightened.

Run it yourself

The standalone archive contains the generated C, HarfBuzz source, fonts, workloads, harness, and verifier. It runs on macOS, Linux, and Windows.

curl -LO https://waxlang.dev/evidence/typography/wax-typography-benchmark.zip
unzip wax-typography-benchmark.zip
cd wax-typography-benchmark
node run.mjs --output TypographyBenchmark.json
node Tools/TypographyParity/PublicBenchmark/verify.mjs TypographyBenchmark.json

On Windows, use curl.exe -LO for the download and tar -xf wax-typography-benchmark.zip to unpack it.

The runner needs Wax with waxc on PATH, Node.js 25 or newer, CMake, Ninja, and Clang C++.

Download the raw results →

Download the runnable benchmark →