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-25 19:38 UTC (commit 371c3f0).

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/36178869455/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 209.5 196.4 189.5 203.6 481.8
multi_issuer_3_tokens 275.3 281.4 247.4 264.3 560.9
multi_issuer_batch_10 1,366.7 1,344.7 1,180.8 1,380.4 2,973.9
multi_issuer_batch_25 3,263.8 3,208.4 2,778.3 3,301.2 7,059.5
multi_issuer_sig_status skipped skipped skipped skipped skipped
unsigned_batch_10 367.1 396.1 284.8 366.6 1,220.5
unsigned_batch_25 901.6 980.4 695.1 902.4 2,975.1
unsigned_deep_json 143.6 144.1 116.1 138.8 351.9
unsigned_simple 45.4 44.7 31.5 42.3 189.3

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 1.03x ████ 0.96x ████ 0.93x ████ 1.00x ████ 2.37x ██████████
multi_issuer_3_tokens 1.04x █████ 1.06x █████ 0.94x ████ 1.00x █████ 2.12x ██████████
multi_issuer_batch_10 0.99x █████ 0.97x █████ 0.86x ████ 1.00x █████ 2.15x ██████████
multi_issuer_batch_25 0.99x █████ 0.97x █████ 0.84x ████ 1.00x █████ 2.14x ██████████
multi_issuer_sig_status skipped skipped skipped skipped skipped
unsigned_batch_10 1.00x ███ 1.08x ███ 0.78x ██ 1.00x ███ 3.33x ██████████
unsigned_batch_25 1.00x ███ 1.09x ███ 0.77x ██ 1.00x ███ 3.30x ██████████
unsigned_deep_json 1.04x ████ 1.04x ████ 0.84x ███ 1.00x ████ 2.54x ██████████
unsigned_simple 1.07x ██ 1.06x ██ 0.74x ██ 1.00x ██ 4.48x ██████████

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 209.5 203.6 231.3 248.3 198.3 320.4 — ok
multi_issuer_3_tokens 275.3 267.5 301.3 345.7 259.1 445.9 — ok
multi_issuer_batch_10 1,366.7 1,358.9 1,418.2 1,497.9 1,334.7 1,745.9 — ok
multi_issuer_batch_25 3,263.8 3,254.5 3,333.6 3,407.7 3,208.2 3,777.0 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 367.1 357.2 391.1 420.7 350.0 701.4 — ok
unsigned_batch_25 901.6 900.0 918.5 977.2 865.6 1,095.5 — ok
unsigned_deep_json 143.6 137.3 164.7 244.8 134.0 274.2 — ok
unsigned_simple 45.4 43.7 62.0 71.2 42.8 94.2 — ok

go detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 196.4 191.3 233.5 280.0 162.9 660.2 29.044 ok
multi_issuer_3_tokens 281.4 270.2 348.1 501.2 230.9 854.6 31.103 ok
multi_issuer_batch_10 1,344.7 1,330.6 1,450.1 1,867.5 1,201.5 2,137.4 356.256 ok
multi_issuer_batch_25 3,208.4 3,174.5 3,444.1 4,082.9 2,919.4 4,903.0 881.59 ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 396.1 385.8 447.9 715.9 338.2 1,183.0 355.274 ok
unsigned_batch_25 980.4 945.1 1,170.3 1,564.9 864.4 1,954.5 865.52 ok
unsigned_deep_json 144.1 139.8 171.9 210.9 121.3 604.0 68.061 ok
unsigned_simple 44.7 40.6 59.3 85.2 35.4 391.0 37.01 ok

python detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 189.5 183.0 215.4 255.6 177.7 341.7 — ok
multi_issuer_3_tokens 247.4 242.0 265.7 289.4 234.3 353.1 — ok
multi_issuer_batch_10 1,180.8 1,175.4 1,210.2 1,296.0 1,156.1 1,369.0 — ok
multi_issuer_batch_25 2,778.3 2,760.8 2,847.1 3,088.4 2,701.3 4,384.9 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 284.8 278.0 312.3 388.6 272.7 435.3 — ok
unsigned_batch_25 695.1 694.7 708.6 769.0 677.6 806.9 — ok
unsigned_deep_json 116.1 112.7 133.3 156.1 109.8 192.3 — ok
unsigned_simple 31.5 30.8 33.8 47.3 30.1 68.7 — ok

rust detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 203.6 198.1 225.3 234.8 193.9 308.8 — ok
multi_issuer_3_tokens 264.3 256.8 285.7 337.7 249.6 359.5 — ok
multi_issuer_batch_10 1,380.4 1,376.5 1,416.5 1,470.5 1,347.4 1,675.5 — ok
multi_issuer_batch_25 3,301.2 3,265.8 3,399.3 4,413.4 3,207.2 7,016.2 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 366.6 356.2 390.2 452.6 348.7 650.4 — ok
unsigned_batch_25 902.4 900.9 921.2 986.8 865.0 1,115.9 — ok
unsigned_deep_json 138.8 131.9 176.6 200.9 128.4 243.4 — ok
unsigned_simple 42.3 41.1 48.9 66.5 39.7 70.3 — ok

wasm detail#

Scenario Mean (µs) p50 (µs) p95 (µs) p99 (µs) Min (µs) Max (µs) Allocs/op Status
multi_issuer_2_tokens 481.8 459.7 675.0 786.3 416.6 990.5 — ok
multi_issuer_3_tokens 560.9 552.8 619.5 816.9 518.6 987.7 — ok
multi_issuer_batch_10 2,973.9 2,861.1 3,936.9 4,617.7 2,761.1 5,388.4 — ok
multi_issuer_batch_25 7,059.5 6,848.7 8,850.0 9,852.1 6,647.9 10,870.6 — ok
multi_issuer_sig_status — — — — — — — skipped (mock_op_unavailable)
unsigned_batch_10 1,220.5 1,191.0 1,380.0 1,946.3 1,150.5 2,368.1 — ok
unsigned_batch_25 2,975.1 2,845.5 3,980.3 4,670.4 2,748.6 10,107.3 — ok
unsigned_deep_json 351.9 335.7 486.8 576.3 304.9 729.0 — ok
unsigned_simple 189.3 167.5 300.4 383.5 151.5 720.8 — ok