Speed benchmark of OpenAPI linters on public API descriptions.
Every linter runs at its latest release (Redocly CLI also at its latest snapshot) with its default ruleset; Spectral has none, so it gets .spectral.yaml, which extends spectral:oas.
Generated 2026-11-03 17:15 UTC by this workflow run on AMD EPYC 9V45 96-Core Processor, 4 cores, 15 GB RAM, Linux 7.0.0-1017-azure, Node v24.22.1.
Each command ran 5 times, one after another, after a 5 s pause; the time is wall-clock from process start to exit, as time reports it, and the table shows the median. A command that did not finish within 5 minutes was killed and not repeated. ☠️ marks a command that was killed or crashed. 🐎 marks the fastest tool for each API description, and 🐌 the slowest.
| Median lint time, s | Azure Compute 205 ops 2.3 MB |
Stripe 612 ops 6.3 MB |
DigitalOcean 884 ops 4.2 MB |
AWS EC2 1188 ops 5.6 MB |
GitHub 1254 ops 10.7 MB |
Cloudflare 3763 ops 20.4 MB |
|---|---|---|---|---|---|---|
| redocly v0.0.0-snapshot.1793725129 |
0.89 |
🐎 1.33 |
2.08 |
1.77 |
🐎 3.19 |
5.57 |
| redocly-latest v2.73.0 |
0.86 |
1.35 |
2.12 |
🐎 1.75 |
3.31 |
🐎 5.50 |
| vacuum v0.36.2 |
🐎 0.33 |
1.87 |
2.91 |
2.49 |
5.75 |
7.56 |
| speakeasy v1.806.0 |
0.41 |
2.99 |
🐎 1.62 |
🐌 7.85 |
5.85 |
10.15 |
| spectral v6.17.0 |
2.50 |
🐌 11.91 |
23.62 |
5.41 |
🐌 35.86 |
🐌 61.15 |
| scalar v2.13.2 |
🐌 13.03 |
☠️ 58.11 |
🐌 165.27 |
☠️ 300.06 |
☠️ 300.10 |
☠️ 300.16 |
The workflow downloads the latest version of each source and bundles it into one file in openapi/ with redocly bundle:
- Azure Compute (Swagger 2.0, MIT)
- Stripe (MIT)
- DigitalOcean (Apache-2.0)
- AWS EC2 (CC0-1.0, converted from the AWS SDK model by APIs.guru)
- GitHub (MIT)
- Cloudflare (BSD-3-Clause)