Marketing pages talk about speed. Engineers ask for a command, a date, and a host. On 28 August 2026 we ran npm test in the AffixIO demo integration repo and a separate 100-proof offline benchmark on this server. The results are below.
Offline throughput
Using @affix-io/sdk-light on Node 20, circuit simple_yesno, mode offline:
| Metric | Value |
|---|---|
| Proofs in run | 100 |
| Total time | 991 ms |
| Per proof | 9.9 ms |
| Throughput | ~101 proofs/sec |
That is HMAC prove on local Node crypto. No network, no ML-DSA attestation on the path. It is the number you care about when the gate sits on a LAN host or kiosk.
Online round trip
A single mode: "online" prove to api.affix-io.com on the same host measured 78 ms end to end, including server-side attestation. Your latency budget will differ by region and payload size. Treat 78 ms as a same-datacentre reference, not a SLA.
Integration suite (28 August 2026)
npm test in the demo repo executed 19 tests in about 94 seconds:
- 18 passed
- 1 failed: online
proveFromCheckAndVerifyreturnedrate_limited
The failure is honest. The public demo key is capped at 4 requests per second. Earlier tests in the same run had already consumed quota. Offline prove, Merkle batch, data-check across 16 store adapters, and the huge regression batch all passed.
Huge batch regression
The slowest test, huge batch: all databases × codes × pass/fail controls, ran for 93.8 seconds with seed 42:
| Count | Value |
|---|---|
| Total scenarios | 267 |
| Expected pass | 161 |
| Expected fail | 97 |
| Errors | 1 (injected API failure) |
| False positives | 0 |
| Store adapters exercised | 16 |
Zero false positives matters more than the headline throughput figure. A wrong yes is worse than a slow yes.
How to reproduce
Clone the AffixIO demo repo, install dependencies, set AFFIX_API_KEY if you have a non-demo key, then:
npm test
node -e "
import { AffixLightSDK } from '@affix-io/sdk-light';
const sdk = new AffixLightSDK({ apiKey: process.env.AFFIX_API_KEY, autoFlush: false });
const t0 = performance.now();
for (let i = 0; i < 100; i++) {
await sdk.prove({ mode: 'offline', circuitId: 'simple_yesno',
credential: { claim_value: 'approved' },
context: { secret: '0xbench', context_id: '0x'+i, required_claim_hash: 'approved' } });
}
console.log({ ms: Math.round(performance.now()-t0), perSec: (100/((performance.now()-t0)/1000)).toFixed(1) });
sdk.dispose();
"
Full tables and live API counts sit on the platform metrics page.
On your host
The prove step
Where AffixIO fits in your benchmark path
Throughput numbers only matter on your hardware, your circuit, and your network path. Hub gives you 100 proofs to run the same tests against your stack.
It sits at the moment your system says eligible or not eligible. Offline prove runs on Node crypto. Online prove adds ML-DSA attestation on api.affix-io.com. Measure both before you freeze architecture.