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++.