Benchmarks

Results come from the open benchmarks suite. Re-run locally anytime.

Search quality (BEIR)

17,490 docs · 2,029 queries

Ranking quality on official BEIR collections with trec_eval-compatible metrics. Higher is better. Primary metric is nDCG@10.

Note: Fuse.js runs with threshold 0 (exact substring match). Its fuzzy mode (threshold 0.3) costs ~39 s/query on ArguAna (~15 h for the dataset) and is unusable at this scale.

Quality vs speed

Macro-average BEIR nDCG@10 against Node.js throughput. Up and to the right is better; throughput uses a logarithmic scale.

0.00.10.20.30.40.5101001.0k10k100k1000kSearch quality · macro nDCG@10 →Throughput · ops/s →OramaOrama · 0.222 nDCG@10 · 29k ops/sZBSearch (BM25)ZBSearch (BM25) · 0.452 nDCG@10 · 69k ops/sZBSearch (QPS)ZBSearch (QPS) · 0.113 nDCG@10 · 46k ops/sZBSearch (PT15)ZBSearch (PT15) · 0.163 nDCG@10 · 73k ops/sFlexSearchFlexSearch · 0.168 nDCG@10 · 291k ops/sFuse.jsFuse.js · 0.066 nDCG@10 · 30 ops/sLunrLunr · 0.425 nDCG@10 · 8.3k ops/sMiniSearchMiniSearch · 0.305 nDCG@10 · 41k ops/s
Dashed line and rings mark the Pareto frontier: no other engine is both faster and better.Quality and throughput use different benchmark corpora; compare the tradeoff, not absolute latency.

Multilingual quality

Zero-config language: 'multilingual' vs per-language stemmers/stopwords vs the English default tokenizer.

Macro average results for the selected metric.Multilingual handles exact forms, diacritics, and non-Latin scripts without language configuration; tuned stemmers still lead on morphology.

Search throughput

Benny ops/s on Node.js across plain search, filters, and complex long-text workloads. Higher is better.

Measured 2026-07-29 with benny on Node.js. Bars and speed ratios are relative to the fastest engine in the selected workload. See methodology

Methodology and Orama head-to-head notes live in ZBSearch vs Orama. Cloudflare Worker load-test baselines are in the Edge benchmarks docs.