Skip to content

Cedarling Benchmarks#

Cross-platform authorization benchmarks for the Cedarling bindings, regenerated on pushes to main that change jans-cedarling/**, or on a manual workflow_dispatch run against main.

Last updated: 2026-09-07 06:27 UTC (commit da0b952).

Provenance#

  • Each binding is measured on its own GitHub-hosted ubuntu-latest runner. Runners are provisioned fresh per binding, so cross-binding comparisons are unpaired and subject to per-runner variance; read cross-binding ratios as directional rather than exact, especially for closely-matched bindings.
  • Warm-up iterations per scenario: 100; measured (sample count) per scenario: 1000.
  • Exact host, OS, and compiler/runtime versions for this run are recorded in the immutable workflow logs: https://github.com/JanssenProject/jans/actions/runs/34089392083/attempts/1.
  • Scenario definitions and fixtures: jans-cedarling/bindings/benchmarks/fixtures/scenarios.json.

Cross-Platform Binding Benchmarks#

Mean (µs) per scenario x binding#

Scenario c go python rust wasm
multi_issuer_2_tokens 120.1 261.3 188.2 208.7 461.1
multi_issuer_3_tokens 181.7 318.7 246.9 268.0 544.5
multi_issuer_batch_10 808.1 1,551.3 1,196.0 1,395.0 2,793.3
multi_issuer_batch_25 1,888.7 3,670.6 2,841.8 3,368.1 6,574.7
multi_issuer_sig_status skipped skipped skipped skipped skipped
unsigned_batch_10 217.9 494.1 290.1 387.3 1,127.5
unsigned_batch_25 553.7 1,192.5 717.5 957.8 2,659.4
unsigned_deep_json 79.1 190.0 118.2 140.5 331.9
unsigned_simple 22.3 75.8 32.4 44.6 208.9

Note: unsigned_batch_* and multi_issuer_batch_* measure the full batch call, not per-item latency.

Relative speed per scenario (x, lower = faster)#

Ratios are computed from full-precision mean_ns, so they may not match dividing the rounded µs values shown above.

Scenario c go python rust wasm
multi_issuer_2_tokens 1.00x ███ 2.18x ██████ 1.57x ████ 1.74x █████ 3.84x ██████████
multi_issuer_3_tokens 1.00x ███ 1.75x ██████ 1.36x █████ 1.48x █████ 3.00x ██████████
multi_issuer_batch_10 1.00x ███ 1.92x ██████ 1.48x ████ 1.73x █████ 3.46x ██████████
multi_issuer_batch_25 1.00x ███ 1.94x ██████ 1.50x ████ 1.78x █████ 3.48x ██████████
multi_issuer_sig_status skipped skipped skipped skipped skipped
unsigned_batch_10 1.00x ██ 2.27x ████ 1.33x ███ 1.78x ███ 5.17x ██████████
unsigned_batch_25 1.00x ██ 2.15x ████ 1.30x ███ 1.73x ████ 4.80x ██████████
unsigned_deep_json 1.00x ██ 2.40x ██████ 1.49x ████ 1.78x ████ 4.20x ██████████
unsigned_simple 1.00x █ 3.41x ████ 1.46x ██ 2.00x ██ 9.39x ██████████

Latency columns (Mean, p50, p95, p99, Min, Max) in the detail tables below are microseconds (µs).

c detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 120.1 117.8 137.3 145.8 107.4 199.1 ok
multi_issuer_3_tokens 181.7 174.0 221.2 267.4 161.9 304.5 ok
multi_issuer_batch_10 808.1 806.3 849.2 880.2 749.7 1,050.4 ok
multi_issuer_batch_25 1,888.7 1,879.7 1,979.2 2,011.6 1,800.9 2,176.7 ok
multi_issuer_sig_status skipped (mock_op_unavailable)
unsigned_batch_10 217.9 215.1 235.2 276.3 202.3 364.1 ok
unsigned_batch_25 553.7 544.6 603.2 856.3 476.3 1,421.8 ok
unsigned_deep_json 79.1 77.0 92.8 97.6 73.5 128.5 ok
unsigned_simple 22.3 21.7 23.3 37.3 20.9 47.0 ok

go detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 261.3 252.7 307.0 357.8 235.2 924.6 29.078 ok
multi_issuer_3_tokens 318.7 308.9 357.0 411.0 289.8 1,068.3 31.088 ok
multi_issuer_batch_10 1,551.3 1,529.3 1,628.1 1,882.9 1,464.8 9,390.6 356.156 ok
multi_issuer_batch_25 3,670.6 3,611.8 3,904.9 4,448.6 3,500.5 14,256.1 881.561 ok
multi_issuer_sig_status skipped (mock_op_unavailable)
unsigned_batch_10 494.1 487.4 553.1 753.4 449.6 1,106.8 355.241 ok
unsigned_batch_25 1,192.5 1,164.9 1,282.0 1,855.7 1,114.0 5,001.4 865.488 ok
unsigned_deep_json 190.0 182.7 215.7 260.7 174.4 641.8 68.054 ok
unsigned_simple 75.8 70.7 100.7 137.1 67.9 244.4 37.031 ok

python detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 188.2 182.6 211.1 230.3 176.9 291.3 ok
multi_issuer_3_tokens 246.9 241.2 268.1 287.3 233.1 392.0 ok
multi_issuer_batch_10 1,196.0 1,189.8 1,236.4 1,309.1 1,164.2 1,420.4 ok
multi_issuer_batch_25 2,841.8 2,808.0 2,928.6 3,886.7 2,751.5 5,153.8 ok
multi_issuer_sig_status skipped (mock_op_unavailable)
unsigned_batch_10 290.1 284.6 305.2 347.5 279.1 421.2 ok
unsigned_batch_25 717.5 717.5 730.1 785.6 692.1 930.3 ok
unsigned_deep_json 118.2 114.3 137.5 164.3 111.2 250.2 ok
unsigned_simple 32.4 31.6 35.7 47.5 30.8 64.9 ok

rust detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 208.7 202.2 232.7 255.9 196.1 315.4 ok
multi_issuer_3_tokens 268.0 261.7 292.4 313.9 253.2 352.1 ok
multi_issuer_batch_10 1,395.0 1,389.5 1,453.5 1,508.9 1,352.2 1,661.3 ok
multi_issuer_batch_25 3,368.1 3,356.5 3,467.0 3,581.6 3,270.7 4,209.9 ok
multi_issuer_sig_status skipped (mock_op_unavailable)
unsigned_batch_10 387.3 372.9 427.1 648.9 358.2 765.7 ok
unsigned_batch_25 957.8 940.6 1,031.2 1,362.2 902.1 1,752.5 ok
unsigned_deep_json 140.5 135.7 162.5 183.3 132.1 263.6 ok
unsigned_simple 44.6 42.7 61.3 70.5 41.4 99.7 ok

wasm detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 461.1 449.0 561.4 731.7 410.3 901.3 ok
multi_issuer_3_tokens 544.5 536.3 595.8 770.2 507.2 1,015.7 ok
multi_issuer_batch_10 2,793.3 2,701.5 3,446.7 4,317.6 2,597.4 4,512.3 ok
multi_issuer_batch_25 6,574.7 6,382.2 8,234.4 8,747.2 6,245.4 9,555.5 ok
multi_issuer_sig_status skipped (mock_op_unavailable)
unsigned_batch_10 1,127.5 1,075.8 1,455.4 1,686.3 1,029.1 2,265.7 ok
unsigned_batch_25 2,659.4 2,512.2 3,616.3 4,208.6 2,428.0 8,365.1 ok
unsigned_deep_json 331.9 319.2 443.6 521.7 289.7 748.2 ok
unsigned_simple 208.9 200.5 279.1 435.4 141.1 899.1 ok