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-11-01 10:04 UTC (commit 74e3197).

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/41292855734/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 85.8 156.4 177.7 151.6 190.5
multi_issuer_3_tokens 120.5 202.0 235.1 203.1 218.9
multi_issuer_batch_10 577.8 898.2 1,174.1 1,039.5 1,086.6
multi_issuer_batch_25 1,455.6 2,112.8 2,783.0 2,490.2 2,516.6
multi_issuer_sig_status skipped skipped skipped skipped skipped
unsigned_batch_10 105.0 215.6 218.0 171.0 266.0
unsigned_batch_25 260.0 514.7 525.4 423.7 657.1
unsigned_deep_json 60.1 112.2 123.6 107.3 130.9
unsigned_simple 12.3 29.1 27.3 21.2 50.2

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

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

Ratios use each binding's full-precision mean_ns over Rust's, so they may not match dividing the rounded µs values shown above. Rows where Rust is unavailable use the fastest binding as the baseline.

Scenario c go python rust wasm
multi_issuer_2_tokens 0.57x █████ 1.03x ████████ 1.17x █████████ 1.00x ████████ 1.26x ██████████
multi_issuer_3_tokens 0.59x █████ 0.99x █████████ 1.16x ██████████ 1.00x █████████ 1.08x █████████
multi_issuer_batch_10 0.56x █████ 0.86x ████████ 1.13x ██████████ 1.00x █████████ 1.05x █████████
multi_issuer_batch_25 0.58x █████ 0.85x ████████ 1.12x ██████████ 1.00x █████████ 1.01x █████████
multi_issuer_sig_status skipped skipped skipped skipped skipped
unsigned_batch_10 0.61x ████ 1.26x ████████ 1.27x ████████ 1.00x ██████ 1.56x ██████████
unsigned_batch_25 0.61x ████ 1.21x ████████ 1.24x ████████ 1.00x ██████ 1.55x ██████████
unsigned_deep_json 0.56x █████ 1.05x █████████ 1.15x █████████ 1.00x ████████ 1.22x ██████████
unsigned_simple 0.58x ██ 1.37x ██████ 1.29x █████ 1.00x ████ 2.37x ██████████

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 85.8 83.8 94.2 106.8 81.2 417.1 — ok
multi_issuer_3_tokens 120.5 119.0 129.3 144.0 115.0 167.6 — ok
multi_issuer_batch_10 577.8 576.4 594.6 611.7 562.8 729.9 — ok
multi_issuer_batch_25 1,455.6 1,424.1 1,527.3 2,506.1 1,375.9 2,990.4 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 105.0 100.7 147.1 163.5 99.7 222.2 — ok
unsigned_batch_25 260.0 259.2 270.5 282.8 249.9 388.9 — ok
unsigned_deep_json 60.1 59.5 66.7 72.6 56.4 228.3 — ok
unsigned_simple 12.3 12.0 12.2 22.0 11.8 60.6 — ok

go detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 156.4 151.1 179.4 207.6 140.5 1,007.0 29.062 ok
multi_issuer_3_tokens 202.0 195.6 228.8 254.7 185.2 903.4 31.072 ok
multi_issuer_batch_10 898.2 888.8 951.1 1,199.3 838.2 1,736.8 356.251 ok
multi_issuer_batch_25 2,112.8 2,094.4 2,234.4 2,568.8 2,028.2 2,926.6 881.657 ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 215.6 209.0 243.6 351.8 193.0 907.6 355.236 ok
unsigned_batch_25 514.7 500.1 563.7 783.2 474.4 2,564.3 865.671 ok
unsigned_deep_json 112.2 106.7 143.8 188.3 96.6 346.1 68.044 ok
unsigned_simple 29.1 25.9 40.2 53.5 24.1 158.3 37.051 ok

python detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 177.7 170.7 203.8 229.5 166.8 289.6 — ok
multi_issuer_3_tokens 235.1 227.4 262.8 282.0 220.3 356.7 — ok
multi_issuer_batch_10 1,174.1 1,162.8 1,233.0 1,320.9 1,136.3 1,643.2 — ok
multi_issuer_batch_25 2,783.0 2,762.0 2,895.6 3,017.4 2,676.4 3,914.4 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 218.0 209.1 246.8 280.4 204.2 369.7 — ok
unsigned_batch_25 525.4 528.3 563.1 604.3 496.9 711.2 — ok
unsigned_deep_json 123.6 118.2 148.6 175.3 115.3 230.2 — ok
unsigned_simple 27.3 26.2 33.0 49.9 25.5 62.5 — ok

rust detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 151.6 148.7 164.9 187.5 144.6 263.5 — ok
multi_issuer_3_tokens 203.1 200.3 216.1 237.4 195.2 263.3 — ok
multi_issuer_batch_10 1,039.5 1,034.0 1,068.1 1,125.8 1,020.3 1,472.1 — ok
multi_issuer_batch_25 2,490.2 2,484.6 2,554.7 2,606.0 2,450.5 2,810.2 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 171.0 168.9 180.8 197.5 166.8 264.5 — ok
unsigned_batch_25 423.7 421.7 435.9 462.7 411.8 569.3 — ok
unsigned_deep_json 107.3 105.6 115.8 132.1 103.9 189.9 — ok
unsigned_simple 21.2 20.7 21.9 33.3 20.3 47.1 — ok

wasm detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 190.5 168.0 303.1 351.5 152.3 595.4 — ok
multi_issuer_3_tokens 218.9 210.3 259.9 337.4 199.7 578.9 — ok
multi_issuer_batch_10 1,086.6 1,023.7 1,496.8 2,036.8 970.8 2,382.1 — ok
multi_issuer_batch_25 2,516.6 2,389.7 3,493.9 3,796.7 2,239.4 5,109.0 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 266.0 247.3 381.4 478.1 228.4 1,353.3 — ok
unsigned_batch_25 657.1 594.5 915.4 1,750.3 555.2 2,594.8 — ok
unsigned_deep_json 130.9 115.3 207.0 237.3 104.2 434.1 — ok
unsigned_simple 50.2 40.0 79.1 140.9 31.2 1,032.6 — ok