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-08-27 07:40 UTC (commit ebc3297).
Provenance
- Each binding is measured on its own GitHub-hosted
ubuntu-latest runner.
- 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/33049564522/attempts/1.
- Scenario definitions and fixtures:
jans-cedarling/bindings/benchmarks/fixtures/scenarios.json.
Mean (µs) per scenario x binding
| Scenario |
c |
go |
java |
python |
rust |
wasm |
| multi_issuer_2_tokens |
148.8 |
241.6 |
186.4 |
207.8 |
140.5 |
471.9 |
| multi_issuer_3_tokens |
195.9 |
301.8 |
206.4 |
264.7 |
186.9 |
547.6 |
| multi_issuer_batch_10 |
926.9 |
1,343.4 |
1,101.1 |
1,373.8 |
907.2 |
2,909.8 |
| multi_issuer_batch_25 |
2,200.8 |
3,183.0 |
2,054.0 |
3,241.7 |
2,160.9 |
6,947.2 |
| multi_issuer_sig_status |
skipped |
skipped |
skipped |
skipped |
skipped |
skipped |
| unsigned_batch_10 |
227.0 |
393.6 |
440.3 |
381.1 |
216.9 |
1,245.7 |
| unsigned_batch_25 |
565.6 |
954.2 |
957.0 |
922.4 |
544.6 |
2,923.7 |
| unsigned_deep_json |
93.6 |
157.1 |
123.0 |
143.3 |
88.2 |
352.1 |
| unsigned_simple |
25.8 |
50.9 |
94.8 |
44.4 |
24.2 |
202.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 |
java |
python |
rust |
wasm |
| multi_issuer_2_tokens |
1.06x ███ |
1.72x █████ |
1.33x ████ |
1.48x ████ |
1.00x ███ |
3.36x ██████████ |
| multi_issuer_3_tokens |
1.05x ████ |
1.61x ██████ |
1.10x ████ |
1.42x █████ |
1.00x ███ |
2.93x ██████████ |
| multi_issuer_batch_10 |
1.02x ███ |
1.48x █████ |
1.21x ████ |
1.51x █████ |
1.00x ███ |
3.21x ██████████ |
| multi_issuer_batch_25 |
1.07x ███ |
1.55x █████ |
1.00x ███ |
1.58x █████ |
1.05x ███ |
3.38x ██████████ |
| multi_issuer_sig_status |
skipped |
skipped |
skipped |
skipped |
skipped |
skipped |
| unsigned_batch_10 |
1.05x ██ |
1.81x ███ |
2.03x ████ |
1.76x ███ |
1.00x ██ |
5.74x ██████████ |
| unsigned_batch_25 |
1.04x ██ |
1.75x ███ |
1.76x ███ |
1.69x ███ |
1.00x ██ |
5.37x ██████████ |
| unsigned_deep_json |
1.06x ███ |
1.78x ████ |
1.39x ███ |
1.62x ████ |
1.00x ███ |
3.99x ██████████ |
| unsigned_simple |
1.06x █ |
2.10x ███ |
3.91x █████ |
1.83x ██ |
1.00x █ |
8.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 |
148.8 |
144.8 |
166.5 |
178.9 |
140.4 |
222.0 |
— |
ok |
| multi_issuer_3_tokens |
195.9 |
191.5 |
212.4 |
225.2 |
186.3 |
292.3 |
— |
ok |
| multi_issuer_batch_10 |
926.9 |
924.2 |
948.7 |
1,002.6 |
895.2 |
1,114.3 |
— |
ok |
| multi_issuer_batch_25 |
2,200.8 |
2,194.9 |
2,244.2 |
2,313.0 |
2,159.2 |
2,511.0 |
— |
ok |
| multi_issuer_sig_status |
— |
— |
— |
— |
— |
— |
— |
skipped (mock_op_unavailable) |
| unsigned_batch_10 |
227.0 |
224.5 |
236.9 |
244.5 |
221.3 |
273.3 |
— |
ok |
| unsigned_batch_25 |
565.6 |
559.0 |
579.8 |
1,025.9 |
544.2 |
1,222.1 |
— |
ok |
| unsigned_deep_json |
93.6 |
91.1 |
108.9 |
119.0 |
88.3 |
164.1 |
— |
ok |
| unsigned_simple |
25.8 |
25.4 |
26.8 |
36.0 |
24.8 |
57.2 |
— |
ok |
go detail
| Scenario |
Mean (µs) |
p50 (µs) |
p95 (µs) |
p99 (µs) |
Min (µs) |
Max (µs) |
Allocs/op |
Status |
| multi_issuer_2_tokens |
241.6 |
237.7 |
273.9 |
303.4 |
216.1 |
596.1 |
29.113 |
ok |
| multi_issuer_3_tokens |
301.8 |
296.1 |
334.0 |
376.2 |
278.8 |
681.8 |
31.084 |
ok |
| multi_issuer_batch_10 |
1,343.4 |
1,326.0 |
1,412.9 |
1,677.7 |
1,273.4 |
3,485.7 |
356.218 |
ok |
| multi_issuer_batch_25 |
3,183.0 |
3,142.6 |
3,326.6 |
3,886.4 |
3,006.9 |
16,089.8 |
881.49 |
ok |
| multi_issuer_sig_status |
— |
— |
— |
— |
— |
— |
— |
skipped (mock_op_unavailable) |
| unsigned_batch_10 |
393.6 |
384.6 |
439.2 |
599.3 |
358.3 |
1,525.6 |
355.229 |
ok |
| unsigned_batch_25 |
954.2 |
929.4 |
1,030.5 |
1,474.4 |
890.7 |
3,925.6 |
865.562 |
ok |
| unsigned_deep_json |
157.1 |
151.7 |
177.9 |
207.7 |
143.5 |
533.2 |
68.063 |
ok |
| unsigned_simple |
50.9 |
47.4 |
68.2 |
88.0 |
44.8 |
247.9 |
37.03 |
ok |
java detail
| Scenario |
Mean (µs) |
p50 (µs) |
p95 (µs) |
p99 (µs) |
Min (µs) |
Max (µs) |
Allocs/op |
Status |
| multi_issuer_2_tokens |
186.4 |
173.8 |
218.2 |
545.7 |
158.9 |
575.2 |
— |
ok |
| multi_issuer_3_tokens |
206.4 |
201.4 |
230.7 |
248.9 |
187.3 |
363.9 |
— |
ok |
| multi_issuer_batch_10 |
1,101.1 |
1,063.6 |
1,356.3 |
1,478.8 |
894.4 |
1,591.5 |
— |
ok |
| multi_issuer_batch_25 |
2,054.0 |
2,045.3 |
2,104.6 |
2,190.0 |
1,985.0 |
4,977.3 |
— |
ok |
| multi_issuer_sig_status |
— |
— |
— |
— |
— |
— |
— |
skipped (mock_op_unavailable) |
| unsigned_batch_10 |
440.3 |
297.5 |
641.6 |
756.1 |
236.4 |
101,379.0 |
— |
ok |
| unsigned_batch_25 |
957.0 |
700.4 |
939.4 |
1,103.6 |
656.9 |
161,797.4 |
— |
ok |
| unsigned_deep_json |
123.0 |
113.2 |
141.3 |
427.2 |
107.0 |
460.5 |
— |
ok |
| unsigned_simple |
94.8 |
71.6 |
151.4 |
179.0 |
51.4 |
15,933.3 |
— |
ok |
python detail
| Scenario |
Mean (µs) |
p50 (µs) |
p95 (µs) |
p99 (µs) |
Min (µs) |
Max (µs) |
Allocs/op |
Status |
| multi_issuer_2_tokens |
207.8 |
200.8 |
232.7 |
257.5 |
196.3 |
290.5 |
— |
ok |
| multi_issuer_3_tokens |
264.7 |
258.0 |
285.7 |
314.1 |
251.4 |
355.0 |
— |
ok |
| multi_issuer_batch_10 |
1,373.8 |
1,368.2 |
1,433.2 |
1,491.4 |
1,331.7 |
1,848.4 |
— |
ok |
| multi_issuer_batch_25 |
3,241.7 |
3,228.7 |
3,332.0 |
3,451.9 |
3,174.3 |
3,747.9 |
— |
ok |
| multi_issuer_sig_status |
— |
— |
— |
— |
— |
— |
— |
skipped (mock_op_unavailable) |
| unsigned_batch_10 |
381.1 |
375.3 |
408.3 |
460.3 |
359.4 |
585.1 |
— |
ok |
| unsigned_batch_25 |
922.4 |
913.9 |
974.5 |
1,097.2 |
874.9 |
1,340.3 |
— |
ok |
| unsigned_deep_json |
143.3 |
138.3 |
166.7 |
187.5 |
134.9 |
214.5 |
— |
ok |
| unsigned_simple |
44.4 |
42.8 |
53.7 |
71.3 |
41.6 |
99.9 |
— |
ok |
rust detail
| Scenario |
Mean (µs) |
p50 (µs) |
p95 (µs) |
p99 (µs) |
Min (µs) |
Max (µs) |
Allocs/op |
Status |
| multi_issuer_2_tokens |
140.5 |
137.3 |
157.4 |
165.4 |
133.5 |
187.2 |
— |
ok |
| multi_issuer_3_tokens |
186.9 |
182.7 |
203.3 |
229.5 |
177.0 |
282.7 |
— |
ok |
| multi_issuer_batch_10 |
907.2 |
904.5 |
931.8 |
980.4 |
875.0 |
1,183.7 |
— |
ok |
| multi_issuer_batch_25 |
2,160.9 |
2,150.3 |
2,221.0 |
2,301.3 |
2,121.3 |
2,761.6 |
— |
ok |
| multi_issuer_sig_status |
— |
— |
— |
— |
— |
— |
— |
skipped (mock_op_unavailable) |
| unsigned_batch_10 |
216.9 |
214.4 |
226.7 |
247.1 |
210.9 |
275.3 |
— |
ok |
| unsigned_batch_25 |
544.6 |
543.0 |
563.5 |
624.2 |
526.5 |
726.9 |
— |
ok |
| unsigned_deep_json |
88.2 |
86.5 |
99.4 |
106.8 |
84.6 |
228.8 |
— |
ok |
| unsigned_simple |
24.2 |
23.8 |
25.5 |
35.0 |
23.3 |
60.1 |
— |
ok |
wasm detail
| Scenario |
Mean (µs) |
p50 (µs) |
p95 (µs) |
p99 (µs) |
Min (µs) |
Max (µs) |
Allocs/op |
Status |
| multi_issuer_2_tokens |
471.9 |
448.5 |
711.3 |
808.2 |
411.4 |
929.9 |
— |
ok |
| multi_issuer_3_tokens |
547.6 |
541.8 |
594.1 |
800.8 |
510.6 |
1,033.5 |
— |
ok |
| multi_issuer_batch_10 |
2,909.8 |
2,797.4 |
3,915.5 |
4,448.0 |
2,709.3 |
4,984.5 |
— |
ok |
| multi_issuer_batch_25 |
6,947.2 |
6,696.1 |
8,779.5 |
9,680.7 |
6,551.6 |
10,400.3 |
— |
ok |
| multi_issuer_sig_status |
— |
— |
— |
— |
— |
— |
— |
skipped (mock_op_unavailable) |
| unsigned_batch_10 |
1,245.7 |
1,190.8 |
1,615.7 |
2,130.1 |
1,149.5 |
3,228.4 |
— |
ok |
| unsigned_batch_25 |
2,923.7 |
2,812.7 |
3,963.5 |
4,340.0 |
2,731.9 |
8,542.7 |
— |
ok |
| unsigned_deep_json |
352.1 |
329.1 |
524.4 |
580.4 |
300.7 |
983.9 |
— |
ok |
| unsigned_simple |
202.9 |
172.2 |
306.0 |
435.6 |
153.9 |
804.7 |
— |
ok |