Continuous performance testing directly in your workflow

CONTINUOUS BENCHMARKING

Automatically run benchmarks in your CI, detect regressions, and get actionable insights directly in every pull request.

How it works

Ship fast. We’ll catch what slows you down.

Step 1

Connect your repository

Install CodSpeed in your CI and plug into your existing benchmark setup.

Already have benchmarks?

Just point CodSpeed to your existing benchmark suite, whether you’re using pytest-benchmark, Criterion, Vitest Bench, or something else. We’ll instrument it in place, so there’s nothing to rewrite.

Catch regressions early

Before they reach production

0 manual benchmarking

Fully automated profiling

Reliable metrics

Low-noise, reproducible results

Actionable insights

Pinpoint exactly what got slower

CORE FEATURES

Built for accurateperformance testing in CI

Flamegraphs show the full call stack. Width represents time. Colors highlight what changed.

Latest Run
CodSpeed Latest Run screen
WHERE TIME GOES

See exactly what's slowing you down

Turn raw benchmark data into actionable performance insights.

A codspeedbot comment on a pull request: CodSpeed detected 3 benchmark changes, listed with their before, after and change — bench_get_active_users 22.5% faster, bench_query_users_by_role 28.6% slower, bench_serialize_response unchanged.
QUICK SETUP

Get started in minutes

Define benchmarks that monitor performance across your entire codebase.

benches/my_bench.rs
use fibonacci::fibonacci;

#[divan::bench]
fn bench_fibo_20(){
  fibonacci(20);
}

fn main() {
  divan::main();
}
my_bench.cpp
#include "fibonacci.h"

static void BM_Fibo_20(benchmark::State &state) {
  for (auto _ : state) {
    fibonacci(20);
  }
}
BENCHMARK(BM_Fibo_20);
BENCHMARK_MAIN();
fibo.go
import "testing"
import "fibonacci"

func BenchmarkFibonacci20(b *testing.B) {
  for b.Loop() {
    fib(20)
  }
}
tests/test_my_fibo.py
import pytest
from my_fibo import fibonacci

@pytest.mark.benchmark
def test_fibo():
    return fibonacci(20)
fibo.bench.js
import { bench, describe } from "vitest";
import { fibonacci } from "./myFibo";

describe("fibo", () => {
    bench("fibo 20", () => {
        fibonacci(20);
    });
});
src/jmh/java/FibBenchmark.java
import org.openjdk.jmh.annotations.Benchmark;
import static my.fibo.Fibonacci.fibonacci;

public class FibBenchmark {

  @Benchmark
  public long benchFibo20() {
    return fibonacci(20);
  }
}

We handle performance, so you can focus on shipping.

Talk to our team about deployment, security, and scale; or start building today.