CI Bench

Measured · Result set v1 · Oct 7–11, 2026 · Updated October 28, 2026

GitHub Actions runners by language: Rust, Go, Java, Node and Python

Each language is one real project's own CI job. Where the lowest median time was, and how GitHub-hosted, Vitko Runners and Blacksmith compared.

Short answer

CI Bench v1 measured eleven open-source projects' own CI jobs plus a burst, covering Rust (fd, codex-lint), Go (GitHub CLI), Java (guava), TypeScript and Node (TypeScript, vite, vue, a vercel/ai monorepo build), Python (flask, pydantic) and a Docker image build. The configuration with the lowest median time differs by workload: Rust: Vitko Runners (warm starts + test splitting) / Vitko Runners; Go: Vitko Runners (warm starts + test splitting); Java: Vitko Runners (warm starts + test splitting); TypeScript and Node: Vitko Runners (warm starts + test splitting); Python: Self-hosted runners on Google Cloud / Vitko Runners (warm starts + test splitting); Docker image build: RunsOn. That is one project's job per language, so treat it as a guide to measure your own. Maintained by Vitko, Inc., which sells one of the products measured.

Workload by workload

Median job time by language workload
LanguageWorkloadLowest medianLowest median timeGitHub-hosted (ubuntu-latest)Vitko RunnersBlacksmith
RustfdVitko Runners (warm starts + test splitting)Vitko45 s92 s49 s65 s
Rustcodex-lintVitko RunnersVitko404 s884 s404 s448 s
GocliVitko Runners (warm starts + test splitting)Vitko140 s368 s272 s286 s
JavaguavaVitko Runners (warm starts + test splitting)Vitko651 s1167 s655 s735 s
TypeScript and NodetsVitko Runners (warm starts + test splitting)Vitko243 s784 s372 s401 s
TypeScript and NodeviteVitko Runners (warm starts + test splitting)Vitko199 s603 s350 s360 s
TypeScript and NodevueVitko Runners (warm starts + test splitting)Vitko32 s121 s63 s76 s
TypeScript and NodemonorepoVitko Runners (warm starts + test splitting)Vitko172 s384 s180 s177 s
PythonflaskSelf-hosted runners on Google Cloud11 s23 s16 s22 s
PythonpydanticVitko Runners (warm starts + test splitting)Vitko69 s179 s105 s103 s
Docker image buildcontainerRunsOn174 s239 s179 s386 s†

† Layer cache did not hit in this run; a re-run is planned. See method. Every workload page lists all nine configurations with p95, queue time and cost: all workloads. List price per minute is not cost per job; faster runners finish sooner.

More: all questions answered · 12 options compared · ranked by speed · ranked by cost per job · free minutes.

Method: how the runs were made; data: results.json; every raw record: the repository. Maintained by Vitko, Inc., which sells one of the products measured. Page dated October 28, 2026.