# Benchmarks
Made with [mitata](https://github.com/evanwashere/mitata) library
## Signing
HS256
## HS256
```
clk: ~3.18 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------------- -------------------------------
HS256 - jose (sync) 2.99 µs/iter 2.79 µs █
(2.50 µs … 756.75 µs) 6.46 µs █
(176.00 b … 975.45 kb) 2.93 kb ▁█▄▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
HS256 - jsonwebtoken (sync) 2.95 µs/iter 2.83 µs █
(2.58 µs … 534.75 µs) 6.00 µs █
(352.00 b … 791.84 kb) 3.72 kb ▆█▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
HS256 - jsonwebtoken (async) 3.60 µs/iter 3.65 µs ▃█▃ ▃
(3.52 µs … 3.70 µs) 3.69 µs ▂▂▂ ███▇ ▂ ▂█▇
(864.48 b … 3.09 kb) 2.85 kb ███▆▆████▆█▆▁▆▆▆███▆▆
HS256 - fast-jwt (sync) 2.09 µs/iter 2.18 µs █▃
(1.97 µs … 2.26 µs) 2.24 µs ▂█ ██ ▂ ▂▂
( 1.48 kb … 1.50 kb) 1.49 kb ███▆██▅▃▁▁▁▁▁▅█▆▅████
HS256 - fast-jwt (async) 3.55 µs/iter 3.56 µs █
(3.29 µs … 3.86 µs) 3.79 µs ▆█
( 3.44 kb … 3.55 kb) 3.52 kb ▂▁▁▁▁▁▁▁██▇█▄▁▅▁▁▁▁▄▂
HS256 - @node-rs/jsonwebtoken (sync) 2.65 µs/iter 2.66 µs ▆█
(2.62 µs … 2.79 µs) 2.73 µs ▅██▂██▅▂
( 1.27 kb … 1.27 kb) 1.27 kb ▃▆████████▆▃▁▁▃▁▁▃▁▁▃
HS256 - @node-rs/jsonwebtoken (async) 9.63 µs/iter 9.79 µs █
(7.67 µs … 217.17 µs) 15.25 µs ▂█▄▃
( 1.79 kb … 193.80 kb) 2.21 kb ▁▁▂████▂▁▁▁▁▁▁▁▁▁▁▁▁▁
summary
HS256 - fast-jwt (sync)
1.27x faster than HS256 - @node-rs/jsonwebtoken (sync)
1.41x faster than HS256 - jsonwebtoken (sync)
1.43x faster than HS256 - jose (sync)
1.7x faster than HS256 - fast-jwt (async)
1.72x faster than HS256 - jsonwebtoken (async)
4.61x faster than HS256 - @node-rs/jsonwebtoken (async)
```
HS512
## HS512
```
clk: ~3.28 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------------- -------------------------------
HS512 - jose (sync) 2.93 µs/iter 2.96 µs █
(2.81 µs … 3.21 µs) 3.20 µs ▇ ▇█ ▄
(801.16 b … 2.74 kb) 2.53 kb █▃▃▁▆████▅▁▃▅▃▃▁▃▁▁▁▃
HS512 - jsonwebtoken (sync) 3.00 µs/iter 3.01 µs ██▃
(2.91 µs … 3.15 µs) 3.14 µs ▇ ███▅
( 3.56 kb … 3.56 kb) 3.56 kb ▃▆█▆▃▃█████▁▁▁▃▁▁▃▁▁▆
HS512 - jsonwebtoken (async) 3.89 µs/iter 3.90 µs ▂ ▂█
(3.82 µs … 4.07 µs) 4.03 µs █▇██
( 3.02 kb … 3.13 kb) 3.09 kb ▇▁▇▇████▄▇▇▁▁▁▄▁▁▄▁▁▄
HS512 - fast-jwt (sync) 2.49 µs/iter 2.56 µs ▅█ ▅ ▂
(2.38 µs … 2.63 µs) 2.62 µs ██▅ ▇█ █▇▅ ▂▇
( 1.60 kb … 1.60 kb) 1.60 kb ███▇▇██▄▁▁▁▄▁███▄▇██▄
HS512 - fast-jwt (async) 3.95 µs/iter 3.99 µs ▂█▅ ▂
(3.69 µs … 4.17 µs) 4.06 µs ███▂█▅
( 3.50 kb … 3.60 kb) 3.57 kb ▄▁▁▄▁▁▁▁▁▁▁▁██████▄▄▄
HS512 - @node-rs/jsonwebtoken (sync) 3.34 µs/iter 3.35 µs █▂
(3.31 µs … 3.42 µs) 3.40 µs ▅▅▇▂▂ ██▂▂
( 1.30 kb … 1.31 kb) 1.31 kb █████▄████▇▄▁▄▄▄▁▁▁▁▄
HS512 - @node-rs/jsonwebtoken (async) 12.64 µs/iter 13.00 µs █▆▂
(8.67 µs … 115.13 µs) 17.42 µs ████
( 1.83 kb … 193.84 kb) 2.25 kb ▁▁▁▁▁▄▆█████▃▃▂▁▁▁▁▁▁
summary
HS512 - fast-jwt (sync)
1.18x faster than HS512 - jose (sync)
1.21x faster than HS512 - jsonwebtoken (sync)
1.34x faster than HS512 - @node-rs/jsonwebtoken (sync)
1.57x faster than HS512 - jsonwebtoken (async)
1.59x faster than HS512 - fast-jwt (async)
5.08x faster than HS512 - @node-rs/jsonwebtoken (async)
```
ES512
## ES512
```
clk: ~3.29 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------------- -------------------------------
ES512 - jose (sync) 1.37 ms/iter 1.38 ms █
(1.33 ms … 1.53 ms) 1.45 ms █ █▅
( 3.66 kb … 1.44 mb) 9.53 kb ▅█▇▄▄▄▃██▇▇▅▃▃▃▂▂▂▁▁▁
ES512 - jsonwebtoken (sync) 1.38 ms/iter 1.39 ms ▂ ▄█
(1.34 ms … 1.56 ms) 1.45 ms █▄ ███▃
( 6.02 kb … 24.08 kb) 7.12 kb ▅████▅▆█████▄▅▃▂▂▂▁▂▂
ES512 - jsonwebtoken (async) 1.37 ms/iter 1.36 ms █
(1.34 ms … 2.51 ms) 1.54 ms ██▆
( 9.45 kb … 763.13 kb) 14.00 kb ███▆▃▂▂▂▂▂▃▁▁▂▁▁▁▁▁▁▁
ES512 - fast-jwt (sync) 1.38 ms/iter 1.39 ms █
(1.33 ms … 2.12 ms) 1.58 ms ▄█▄
( 2.57 kb … 99.04 kb) 3.57 kb ███▆▃▂▃▃▂▄▄▂▂▂▂▁▂▁▁▁▁
ES512 - fast-jwt (async) 1.64 ms/iter 1.64 ms ▂█
(1.57 ms … 1.96 ms) 1.94 ms ██▄
( 5.05 kb … 1.48 mb) 10.42 kb ███▄▃▂▂▃▃▃▂▂▁▂▁▂▂▂▃▂▂
ES512 - @node-rs/jsonwebtoken (sync) 2.96 µs/iter 2.97 µs █ ▅▅▅▅
(2.90 µs … 3.03 µs) 3.01 µs ███████
( 1.27 kb … 1.27 kb) 1.27 kb ▄▄▄█▁▁▄████████▄█▁▁▁▄
ES512 - @node-rs/jsonwebtoken (async) 11.10 µs/iter 12.71 µs █
(8.29 µs … 168.33 µs) 17.29 µs ▄█▃
( 1.80 kb … 193.80 kb) 2.24 kb ▁▂▂███▂▁▁▁▄▇▄▂▂▁▁▁▁▁▁
summary
ES512 - @node-rs/jsonwebtoken (sync)
3.75x faster than ES512 - @node-rs/jsonwebtoken (async)
462.07x faster than ES512 - jsonwebtoken (async)
463.55x faster than ES512 - jose (sync)
464.51x faster than ES512 - jsonwebtoken (sync)
466.29x faster than ES512 - fast-jwt (sync)
552.88x faster than ES512 - fast-jwt (async)
```
RS512
## RS512
```
clk: ~3.29 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------------- -------------------------------
RS512 - jose (sync) 3.31 ms/iter 3.31 ms ▅█
(3.26 ms … 4.06 ms) 4.02 ms ██
( 4.87 kb … 5.09 kb) 4.88 kb ██▇▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂
RS512 - jsonwebtoken (sync) 3.31 ms/iter 3.31 ms ▇█
(3.26 ms … 4.06 ms) 4.01 ms ██
( 7.91 kb … 9.31 kb) 8.29 kb ██▅▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂
RS512 - jsonwebtoken (async) 3.33 ms/iter 3.32 ms ▆█
(3.26 ms … 4.13 ms) 4.03 ms ██▃
( 11.70 kb … 21.41 kb) 12.06 kb ███▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂
RS512 - fast-jwt (sync) 3.30 ms/iter 3.30 ms █▃
(3.26 ms … 4.04 ms) 4.01 ms ██
( 4.41 kb … 7.91 kb) 4.48 kb ██▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
RS512 - fast-jwt (async) 4.34 ms/iter 4.34 ms ▂▅█
(4.27 ms … 4.74 ms) 4.66 ms ███
( 9.95 kb … 13.37 kb) 10.01 kb ▄████▇▂▄▂▁▁▃▂▂▂▁▁▁▂▁▃
RS512 - @node-rs/jsonwebtoken (sync) 3.16 ms/iter 3.18 ms █▇█ ▅▃
(3.13 ms … 3.31 ms) 3.25 ms ██████▆▆
( 2.02 kb … 2.27 kb) 2.02 kb █████████▇▆▇▅▄▃▄▁▂▃▁▂
RS512 - @node-rs/jsonwebtoken (async) 3.18 ms/iter 3.20 ms █
(3.15 ms … 3.31 ms) 3.26 ms ▄██▆███▃▄▃▂
( 2.63 kb … 2.87 kb) 2.63 kb ███████████▄▇▃▇▂▂▃▃▃▂
summary
RS512 - @node-rs/jsonwebtoken (sync)
1.01x faster than RS512 - @node-rs/jsonwebtoken (async)
1.04x faster than RS512 - fast-jwt (sync)
1.05x faster than RS512 - jsonwebtoken (sync)
1.05x faster than RS512 - jose (sync)
1.05x faster than RS512 - jsonwebtoken (async)
1.37x faster than RS512 - fast-jwt (async)
```
PS512
## PS512
```
clk: ~3.28 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------------- -------------------------------
PS512 - jose (sync) 3.39 ms/iter 3.40 ms █
(3.27 ms … 4.65 ms) 4.17 ms █▆
( 4.91 kb … 5.52 kb) 4.95 kb ███▇▆▄▂▂▂▂▁▁▁▁▁▁▁▁▁▁▂
PS512 - jsonwebtoken (sync) 3.41 ms/iter 3.40 ms █
(3.26 ms … 5.73 ms) 4.63 ms █
( 6.97 kb … 9.31 kb) 8.16 kb ██▇▆▂▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁
PS512 - jsonwebtoken (async) 3.35 ms/iter 3.34 ms █
(3.26 ms … 4.15 ms) 4.04 ms ▇█
( 10.45 kb … 59.93 kb) 12.68 kb ███▅▃▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁▂
PS512 - fast-jwt (sync) 3.33 ms/iter 3.33 ms █
(3.26 ms … 4.07 ms) 4.02 ms ▄█▃
( 3.89 kb … 53.63 kb) 4.72 kb ███▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
PS512 - fast-jwt (async) 4.32 ms/iter 4.34 ms ▄█
(4.26 ms … 4.72 ms) 4.60 ms ███▄▂
( 9.15 kb … 41.28 kb) 10.15 kb ▅█████▇█▃▂▂▂▂▁▁▂▁▁▁▁▂
PS512 - @node-rs/jsonwebtoken (sync) 3.17 ms/iter 3.18 ms █ ▄
(3.14 ms … 3.32 ms) 3.31 ms ███▆▂
( 2.02 kb … 2.09 kb) 2.02 kb ▆██████▇▃▁▁▂▁▁▂▁▁▁▁▁▂
PS512 - @node-rs/jsonwebtoken (async) 3.19 ms/iter 3.20 ms █▂ ▄
(3.16 ms … 3.33 ms) 3.26 ms ██▇█▆ ▆▆
( 2.63 kb … 2.87 kb) 2.63 kb ███████████▇▇▃▆▃▅▁▁▁▃
summary
PS512 - @node-rs/jsonwebtoken (sync)
1.01x faster than PS512 - @node-rs/jsonwebtoken (async)
1.05x faster than PS512 - fast-jwt (sync)
1.05x faster than PS512 - jsonwebtoken (async)
1.07x faster than PS512 - jose (sync)
1.07x faster than PS512 - jsonwebtoken (sync)
1.36x faster than PS512 - fast-jwt (async)
```
EdDSA
## EdDSA
```
clk: ~3.29 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------------- -------------------------------
EdDSA - jose (sync) 30.39 µs/iter 29.89 µs █
(29.35 µs … 37.81 µs) 30.10 µs ▅ ▅ ▅ █ ▅ ▅ ▅▅ ▅ ▅
( 3.23 kb … 3.23 kb) 3.23 kb █▁█▁▁█▁█▁▁█▁█▁██▁▁█▁█
EdDSA - fast-jwt (sync) 29.24 µs/iter 29.21 µs █
(28.88 µs … 30.95 µs) 29.32 µs █ ▅ ▅▅▅▅▅ ▅▅ ▅
( 1.89 kb … 1.90 kb) 1.89 kb █▁▁█▁▁▁▁█████▁▁██▁▁▁█
EdDSA - fast-jwt (async) 267.19 µs/iter 269.42 µs █ ▂
(259.33 µs … 781.96 µs) 308.71 µs ███
( 4.05 kb … 661.27 kb) 6.61 kb ████▇▇▅▃▃▂▂▂▁▁▁▁▁▁▁▁▁
EdDSA - @node-rs/jsonwebtoken (sync) 3.00 µs/iter 3.02 µs ██
(2.93 µs … 3.06 µs) 3.05 µs ▅▂ ▂ ▂██▅▇ ▂
( 1.27 kb … 1.27 kb) 1.27 kb ▄██▄▇▄▄█▄▄▁▄█████▇▁█▄
EdDSA - @node-rs/jsonwebtoken (async) 10.88 µs/iter 10.58 µs ▇█
(8.33 µs … 130.92 µs) 17.63 µs ██
( 1.80 kb … 129.80 kb) 2.20 kb ▁▁▅██▇▂▂▁▁▃▄▄▃▂▂▁▁▁▁▁
summary
EdDSA - @node-rs/jsonwebtoken (sync)
3.63x faster than EdDSA - @node-rs/jsonwebtoken (async)
9.76x faster than EdDSA - fast-jwt (sync)
10.14x faster than EdDSA - jose (sync)
89.14x faster than EdDSA - fast-jwt (async)
```
## Decoding
RS512
## RS512
```
clk: ~3.26 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
---------------------------------------------- -------------------------------
RS512 - fast-jwt 1.10 µs/iter 1.11 µs █▃
(1.06 µs … 1.17 µs) 1.15 µs ▂██▅
(336.29 b … 458.22 b) 457.16 b ▃████▃▄████▆▄▃▃▃▂▃▃▂▃
RS512 - fast-jwt (complete) 1.09 µs/iter 1.10 µs ▄█
(1.06 µs … 1.18 µs) 1.16 µs ▇██▇▂
(461.23 b … 578.24 b) 577.20 b ▇██████▆▇▆▅▅▇▄▅▃▂▂▁▁▂
RS512 - jsonwebtoken 1.86 µs/iter 1.86 µs ▄█
(1.81 µs … 1.89 µs) 1.89 µs ▂███▄
(857.28 b … 867.14 b) 866.93 b ▂▂▁▁▁▄▂▄▆█████▅▅▅▅█▄▂
RS512 - jsonwebtoken (complete) 1.86 µs/iter 1.87 µs ███ █
(1.81 µs … 1.90 µs) 1.90 µs ▅██████▅ ▅
(858.54 b … 891.17 b) 871.30 b ▆▃▁▆▃▁█▃▆████████▃██▆
RS512 - jose 849.59 ns/iter 856.30 ns ▄█▅
(820.44 ns … 891.41 ns) 889.56 ns ▇███▅
(276.84 b … 426.25 b) 425.28 b ▂▃▂▃██████▅▅▇▇█▅▂▄▂▂▂
RS512 - jose (complete) 880.87 ns/iter 887.38 ns ▄█▅
(835.35 ns … 930.96 ns) 919.86 ns ▂▆███
(414.49 b … 446.12 b) 438.27 b ▂▂▁▃▅▄▂▇█████▇▇▄▄▅▂▃▃
summary
RS512 - jose
1.04x faster than RS512 - jose (complete)
1.28x faster than RS512 - fast-jwt (complete)
1.29x faster than RS512 - fast-jwt
2.18x faster than RS512 - jsonwebtoken
2.19x faster than RS512 - jsonwebtoken (complete)
```
Note that for decoding the algorithm is irrelevant, so only one was measured.
## Verifying
HS256
## HS256
```
clk: ~3.28 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------- -------------------------------
HS256 - fast-jwt (sync) 2.58 µs/iter 2.70 µs ▃█▆
(2.48 µs … 2.86 µs) 2.81 µs ███ ▆
( 1.28 kb … 1.28 kb) 1.28 kb ███▃▁▁▁▁▁▃▃▁▁███▄▁▃▁▃
HS256 - fast-jwt (async) 4.76 µs/iter 4.76 µs █▅ ▅
(4.40 µs … 5.40 µs) 5.35 µs ██▃█
( 3.48 kb … 3.59 kb) 3.55 kb ▄▁▁▁████▄▁▄█▁▄▁▁▄▄▁▁▄
HS256 - fast-jwt (sync with cache) 1.04 µs/iter 1.19 µs █
(886.48 ns … 1.55 µs) 1.44 µs █
(272.52 b … 1.87 kb) 1.00 kb ▇██▁▁▂▁▁▁▁▁▁▁▁▁▁▁▂█▅▂
HS256 - fast-jwt (async with cache) 1.15 µs/iter 1.29 µs █ ▅
(987.19 ns … 1.51 µs) 1.43 µs █▄ ▃█
( 1.67 kb … 2.15 kb) 1.79 kb ▇██▃▂▂▂▁▁▁▁▁▆██▂▂▂▁▁▂
HS256 - jose (sync) 3.50 µs/iter 3.33 µs █
(3.00 µs … 914.79 µs) 7.21 µs █
(656.00 b … 467.17 kb) 2.34 kb ▁█▆▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
HS256 - jsonwebtoken (sync) 3.82 µs/iter 3.81 µs █
(3.72 µs … 4.02 µs) 4.00 µs ▅▂█▂
( 3.50 kb … 3.50 kb) 3.50 kb ▃▅▁▁████▃▁▅▃▃▁▁▁▁▁▃▁▃
HS256 - jsonwebtoken (async) 3.87 µs/iter 3.92 µs ▅ █
(3.76 µs … 4.08 µs) 4.00 µs ▆ ▆█ █ █
( 97.51 b … 216.72 b) 185.62 b ▄▄▄▄█▁█████▄▁██▄▁▁▁▁█
summary
HS256 - fast-jwt (sync with cache)
1.1x faster than HS256 - fast-jwt (async with cache)
2.48x faster than HS256 - fast-jwt (sync)
3.36x faster than HS256 - jose (sync)
3.67x faster than HS256 - jsonwebtoken (sync)
3.72x faster than HS256 - jsonwebtoken (async)
4.57x faster than HS256 - fast-jwt (async)
```
HS512
## HS512
```
clk: ~3.29 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------- -------------------------------
HS512 - fast-jwt (sync) 2.84 µs/iter 2.94 µs ▄▄ ▄ ▄ █
(2.70 µs … 3.05 µs) 3.02 µs ████▅██ ▅█▅█
( 1.54 kb … 1.54 kb) 1.54 kb ███████▅▁▁▅▅▁██████▅▅
HS512 - fast-jwt (async) 4.98 µs/iter 5.02 µs █
(4.75 µs … 5.07 µs) 5.05 µs ▃█▆▃ ▆
( 3.36 kb … 3.47 kb) 3.43 kb ▄▁▄▁▁▁▁▁▁▁▁█▄█▁██████
HS512 - fast-jwt (sync with cache) 1.21 µs/iter 1.15 µs ▂█
(1.02 µs … 2.65 µs) 1.87 µs ██
(666.24 b … 1.25 kb) 915.04 b ██▃▁▁▁▁▁▁▁▁▁▁▁▄█▃▁▁▁▁
HS512 - fast-jwt (async with cache) 1.30 µs/iter 1.47 µs █
(1.14 µs … 1.54 µs) 1.53 µs ▃██ ▄▇
( 1.58 kb … 1.69 kb) 1.67 kb ████▁▃▁▁▁▁▁▁▁▁▁▃██▇▆▄
HS512 - jose (sync) 3.34 µs/iter 3.41 µs █
(3.16 µs … 3.50 µs) 3.49 µs ▇▂ ▂█▅
( 2.14 kb … 2.14 kb) 2.14 kb ▃▁▃▆▁███▆▆▃▃▃▃███▃▃▁▃
HS512 - jsonwebtoken (sync) 4.04 µs/iter 4.05 µs █
(3.95 µs … 4.07 µs) 4.06 µs ▅▂▇█▅▅
( 3.69 kb … 3.69 kb) 3.69 kb ▄▁▄▁▁▁▁▄▁▁▁▄▇▇██████▇
HS512 - jsonwebtoken (async) 4.15 µs/iter 4.19 µs █
(4.05 µs … 4.27 µs) 4.21 µs ██ ▇
(302.09 b … 410.58 b) 377.66 b ▃▃▃▁▁▁▁▃▁▆██▃▁▁▁▃▆▆█▆
summary
HS512 - fast-jwt (sync with cache)
1.08x faster than HS512 - fast-jwt (async with cache)
2.35x faster than HS512 - fast-jwt (sync)
2.77x faster than HS512 - jose (sync)
3.35x faster than HS512 - jsonwebtoken (sync)
3.44x faster than HS512 - jsonwebtoken (async)
4.13x faster than HS512 - fast-jwt (async)
```
ES512
## ES512
```
clk: ~3.29 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------- -------------------------------
ES512 - fast-jwt (sync) 1.03 ms/iter 1.05 ms ▃█▄
(998.71 µs … 1.19 ms) 1.17 ms ███▇▄▂
( 2.16 kb … 451.07 kb) 3.08 kb ██████▇▇▇▄▅▃▃▁▂▃▂▂▁▁▁
ES512 - fast-jwt (async) 1.11 ms/iter 1.13 ms █▄▃█
(1.07 ms … 1.25 ms) 1.22 ms ▃████▄▆▂
( 4.30 kb … 920.47 kb) 9.34 kb █████████▇▇▅▄▄▃▄▄▂▃▂▂
ES512 - fast-jwt (sync with cache) 1.56 µs/iter 1.29 µs █
(1.04 µs … 2.47 ms) 5.50 µs ▃█
(952.00 b … 129.09 kb) 0.99 kb ██▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
ES512 - fast-jwt (async with cache) 1.60 µs/iter 1.42 µs █
(1.17 µs … 1.65 ms) 4.79 µs ▄█
( 1.66 kb … 97.68 kb) 2.01 kb ██▆▄▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
ES512 - jose (sync) 1.12 ms/iter 1.06 ms █
(1.00 ms … 5.01 ms) 3.78 ms █
( 2.46 kb … 835.04 kb) 4.66 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
ES512 - jsonwebtoken (sync) 1.04 ms/iter 1.05 ms █▃▄
(1.00 ms … 1.18 ms) 1.15 ms ▅████▃▃
( 3.81 kb … 966.41 kb) 7.36 kb █████████▆▅▅▃▃▂▂▃▃▁▂▁
ES512 - jsonwebtoken (async) 1.04 ms/iter 1.05 ms █▄
(999.92 µs … 1.18 ms) 1.15 ms ▇████▅
( 4.34 kb … 524.85 kb) 5.13 kb █████████▅▅▅▃▂▃▃▃▃▂▂▂
summary
ES512 - fast-jwt (sync with cache)
1.02x faster than ES512 - fast-jwt (async with cache)
661.22x faster than ES512 - fast-jwt (sync)
662.49x faster than ES512 - jsonwebtoken (async)
663.03x faster than ES512 - jsonwebtoken (sync)
708.82x faster than ES512 - fast-jwt (async)
714.05x faster than ES512 - jose (sync)
```
RS512
## RS512
```
clk: ~3.23 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------- -------------------------------
RS512 - fast-jwt (sync) 55.40 µs/iter 55.42 µs █
(54.99 µs … 56.66 µs) 55.62 µs ▅▅ ▅▅ ▅▅ ▅▅▅ █
( 1.72 kb … 1.72 kb) 1.72 kb ██▁██▁▁▁▁██▁███▁▁▁▁▁█
RS512 - fast-jwt (async) 142.64 µs/iter 143.83 µs ▃█
(134.67 µs … 1.01 ms) 186.33 µs ▇██▇
( 4.32 kb … 581.60 kb) 5.69 kb █████▆▅▃▂▂▁▁▁▁▁▁▁▁▁▁▁
RS512 - fast-jwt (sync with cache) 1.83 µs/iter 1.76 µs ▂ █
(1.50 µs … 2.49 µs) 2.49 µs ███▅
(912.44 b … 1.00 kb) 923.07 b ▂▅████▃▁▁▁▁▁▁▁▁▂▂▃▆▆▆
RS512 - fast-jwt (async with cache) 1.93 µs/iter 2.13 µs █ ▃▃ ▃
(1.65 µs … 2.28 µs) 2.25 µs ▇█ ▂▂██▇ ██▅█
( 1.59 kb … 1.69 kb) 1.68 kb ██▃█████▃▁▁▁▆▆▆████▃▆
RS512 - jose (sync) 56.10 µs/iter 56.79 µs █▅
(53.04 µs … 860.38 µs) 75.58 µs ██ ▅
( 2.30 kb … 323.83 kb) 3.41 kb ██▅██▃▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁
RS512 - jsonwebtoken (sync) 56.90 µs/iter 57.69 µs █
(55.61 µs … 58.92 µs) 57.73 µs █ █
( 1.47 kb … 1.47 kb) 1.47 kb ████▁▁▁█▁▁▁▁▁▁▁▁█▁▁██
RS512 - jsonwebtoken (async) 56.19 µs/iter 56.18 µs ██ █
(55.66 µs … 57.92 µs) 56.76 µs ▅ ██ █ ▅▅ ▅ ▅
(431.80 b … 439.38 b) 432.70 b █▁▁██▁█▁██▁█▁▁▁▁▁▁▁▁█
summary
RS512 - fast-jwt (sync with cache)
1.05x faster than RS512 - fast-jwt (async with cache)
30.22x faster than RS512 - fast-jwt (sync)
30.6x faster than RS512 - jose (sync)
30.64x faster than RS512 - jsonwebtoken (async)
31.03x faster than RS512 - jsonwebtoken (sync)
77.79x faster than RS512 - fast-jwt (async)
```
PS512
## PS512
```
clk: ~3.29 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------- -------------------------------
PS512 - fast-jwt (sync) 55.21 µs/iter 55.37 µs █
(54.69 µs … 56.85 µs) 55.52 µs ▅▅█ ▅ ▅ ▅ ▅ ▅ ▅ ▅
( 1.68 kb … 1.68 kb) 1.68 kb ███▁█▁▁█▁▁▁▁█▁█▁█▁█▁█
PS512 - fast-jwt (async) 86.37 µs/iter 86.79 µs █
(83.13 µs … 1.75 ms) 106.92 µs ▅█▃
( 4.05 kb … 529.27 kb) 5.52 kb ███▇▅▄▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁
PS512 - fast-jwt (sync with cache) 1.55 µs/iter 1.59 µs █
(1.38 µs … 2.16 µs) 2.08 µs ██
(904.31 b … 0.98 kb) 914.85 b ██▃▁▂▁▂▂▁▁▂▁▁▁▁▁▁▃█▃▂
PS512 - fast-jwt (async with cache) 1.66 µs/iter 1.82 µs █ ▂
(1.50 µs … 1.96 µs) 1.91 µs ██ █▃
( 1.58 kb … 1.69 kb) 1.67 kb ██▅▅▁▂▁▁▁▁▁▂▁▁▂██▅▁▄▂
PS512 - jose (sync) 56.25 µs/iter 55.88 µs ▅█
(54.79 µs … 697.29 µs) 67.08 µs ██
( 2.19 kb … 355.05 kb) 3.45 kb ██▇▂▂▂▃▂▂▂▁▁▁▁▁▁▁▁▁▁▁
PS512 - jsonwebtoken (sync) 57.72 µs/iter 57.80 µs █
(57.09 µs … 59.64 µs) 58.92 µs █ █ █
( 1.38 kb … 1.38 kb) 1.38 kb █▁████▁▁█▁▁▁▁▁▁▁▁▁▁▁█
PS512 - jsonwebtoken (async) 58.79 µs/iter 57.85 µs █ █
(57.22 µs … 71.55 µs) 58.67 µs █ ▅█▅ ▅▅ ▅▅ ▅
(338.54 b … 339.49 b) 338.86 b █▁███▁██▁██▁▁▁▁▁▁▁▁▁█
summary
PS512 - fast-jwt (sync with cache)
1.07x faster than PS512 - fast-jwt (async with cache)
35.55x faster than PS512 - fast-jwt (sync)
36.22x faster than PS512 - jose (sync)
37.17x faster than PS512 - jsonwebtoken (sync)
37.86x faster than PS512 - jsonwebtoken (async)
55.62x faster than PS512 - fast-jwt (async)
```
EdDSA
## EdDSA
```
clk: ~3.30 GHz
cpu: Apple M2 Pro
runtime: node 22.11.0 (arm64-darwin)
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------- -------------------------------
EdDSA - fast-jwt (sync) 79.50 µs/iter 79.42 µs █
(77.42 µs … 178.92 µs) 92.92 µs ██
( 1.63 kb … 400.78 kb) 2.45 kb ██▅▂▂▅▃▂▁▂▂▁▂▁▁▁▁▁▁▁▁
EdDSA - fast-jwt (async) 122.41 µs/iter 123.63 µs █
(119.04 µs … 193.75 µs) 138.83 µs ▂█
( 3.53 kb … 580.81 kb) 4.51 kb ██▆▃▆▅▃▃▂▂▂▂▁▁▂▁▁▁▁▁▁
EdDSA - fast-jwt (sync with cache) 1.27 µs/iter 1.56 µs █
(1.08 µs … 1.83 µs) 1.80 µs ▂█
(733.41 b … 1.52 kb) 1.07 kb ███▁▂▂▁▂▁▁▁▁▁▂▅▇▄▂▁▁▁
EdDSA - fast-jwt (async with cache) 1.55 µs/iter 1.61 µs █ ▄
(1.21 µs … 3.33 µs) 3.17 µs █▅ █▂▂
( 1.75 kb … 1.86 kb) 1.84 kb ██▅███▅▃▂▁▁▃▁▁▂▁▂▂▁▁▂
EdDSA - jose (sync) 81.76 µs/iter 82.25 µs █
(77.92 µs … 594.29 µs) 108.92 µs █
( 2.15 kb … 482.91 kb) 3.17 kb █▇▇▇▃▃▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁
summary
EdDSA - fast-jwt (sync with cache)
1.22x faster than EdDSA - fast-jwt (async with cache)
62.78x faster than EdDSA - fast-jwt (sync)
64.57x faster than EdDSA - jose (sync)
96.68x faster than EdDSA - fast-jwt (async)
```