Kwker
Kwker Core

The engine for ordering data

Sorting, top-k, percentiles, ranks, search, grouping, merges and set operations on arrays of numbers, strings and records. Every other Kwker product runs on it, and you can call it directly from 20 languages.

Against the fastest sorting libraries

Compared with the fastest of Intel's x86-simd-sort, Google's VQSort, djbsort and Rust's standard sort in each case, single thread.

2.84×

geometric mean, 672 small-array cases (2 to 900 keys per call), AVX-512

3.01×

the same cases on AVX2 processors

2.2×

720 cases of 1K to 1M keys, against x86-simd-sort and VQSort, AVX2

3.2×

faster than Java 25's built-in Arrays.sort, geometric mean of 4 key types at 1M keys (JavaScript: 11×)

Production builds on Intel Xeon, October 2026. Three of the 1,344 small-array cases (both engines) are slower than the best competitor; they are listed on the benchmarks page with the raw results. · Measure it on your machine

What it does

Sort and argsort

8- to 128-bit integers, half to double floats with a defined NaN order, strings with collations, records and key-value pairs, stable or not, on one or all cores.

Sorting

Top-k and percentiles

The k largest or smallest, any percentile, partial sorts, per-group and masked top-k, without sorting everything.

Top-k and selection

Search and rank

searchsorted, bucketize and bucket counts compatible with NumPy, and ranks with every tie rule.

Searching

Group, merge, compare

Totals and counts per key, group codes over several columns, k-way merges and set operations on sorted data.

Groups and sets

Large data

Files larger than memory, every core with the same result as one thread, a hard cap on extra memory, cancellation and progress.

Large data

Arrow and tables

Arrow arrays, chunked and nested columns, and lexicographic ordering over several columns.

DataFrames and Arrow

One call, the right engine

  • Picked at start-up: AVX-512, AVX2, SSE4.2, ARM NEON, SVE and SVE2, WebAssembly SIMD, or a portable engine, chosen for the processor your program runs on.
  • Same result everywhere: one documented order for every key type, tested bit for bit across every engine.
  • Nothing to set up: no flags, no tuning, no license keys, no network calls.
Every language, with examples
import numpy as np
import kwker

prices = np.array([19.99, 4.50, 12.00, 99.00, 7.25, 45.00])
kwker.sort(prices)                                   # in place
print(prices)
values, idx = kwker.top_k(prices, 2, descending=True)
print(values, idx)
print(kwker.searchsorted(prices, [10.0, 50.0]))
[ 4.5   7.25 12.   19.99 45.   99.  ]
[99. 45.] [5 4]
[2 5]

Free to start

Free for companies under 100 people and about $1.3M revenue (PolyForm Small Business). Every product line is in every tier.