GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com โ€” GitHub - bencherdev/bencher: ๐Ÿฐ Bencher - Continuous Benchmarking

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace
BranchesTags
Open more actions menu

Latest commit

 

History

6,523 Commits
6,523 Commits

Folders and files

NameName
Last commit message
Last commit date
.agents/plugins
.agents/plugins
 
 
.cargo
.cargo
 
 
.claude-plugin
.claude-plugin
 
 
.claude
.claude
 
 
.config
.config
 
 
.github
.github
 
 
.vscode
.vscode
 
 
docker
docker
 
 
docs
docs
 
 
examples
examples
 
 
lib
lib
 
 
license
license
 
 
packages/ui
packages/ui
 
 
plugins/bencher
plugins/bencher
 
 
plus
plus
 
 
scripts
scripts
 
 
services
services
 
 
tasks
tasks
 
 
xtask
xtask
 
 
.envrc
.envrc
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
AGENTS.md
AGENTS.md
 
 
CLAUDE.md
CLAUDE.md
 
 
Cargo.lock
Cargo.lock
 
 
Cargo.toml
Cargo.toml
 
 
DEVELOPMENT.md
DEVELOPMENT.md
 
 
LICENSE.md
LICENSE.md
 
 
README.md
README.md
 
 
SECURITY.md
SECURITY.md
 
 
action.yml
action.yml
 
 
changelog.md
changelog.md
 
 
clippy.toml
clippy.toml
 
 
deny.toml
deny.toml
 
 
docker-compose.yml
docker-compose.yml
 
 
flake.lock
flake.lock
 
 
flake.nix
flake.nix
 
 
rust-toolchain.toml
rust-toolchain.toml
 
 
rustfmt.toml
rustfmt.toml
 
 

Repository files navigation

Bencher

Bencher is a continuous benchmarking platform that helps software engineers and agents catch performance regressions before they merge. Bencher Bare Metal runs your benchmarks on the exact same bare metal, whether launched from your local terminal, an agent sandbox, or in CI.

Animated chart showing benchmark results with a performance regression spike that triggers an alert, followed by a fix back to baseline

Built for teams where performance matters:

  • Databases
  • Compilers
  • Browsers
  • Runtimes
  • Networking stacks
  • Cryptographic libraries
  • Operating Systems

Most teams start on GitHub Actions runners with a benchmark comparison script. That approach breaks down when noisy shared CI runners hide real performance regressions.

  • Typical CI runners: >30% variance
  • Bencher Bare Metal runners: <2% variance

When a number moves, it means something.

Benchmark for free โ†’   Bare Metal Quickstart

Used by the teams behind Microsoft snmalloc, Google Sedpack, GitLab Git, pnpm, conda, Firezone, and Servo.

๐Ÿฐ Use the GitHub Action with your project

The Problem

Shipping a performance regression is expensive:

  • A database regression on a hot path pages someone at 2am
  • A compiler regression silently makes every downstream build slower
  • A browser engine ships a 10% paint regression and users notice
  • A crypto library that adds a microsecond to a handshake breaks an SLA

Without trustworthy benchmarks in the PR workflow, you find out when users do.

Local benchmarks aren't reproducible. Every check means stopping work to pull the baseline branch and wait on a comparison. Most engineers skip it.

CI runners are shared and noisy. Noisy benchmarks train engineers to ignore alerts. Performance regressions silently ship.

If you can't tell a real regression from noise, the results are worthless. So teams stop looking.

How Bencher Works

  1. Run: Run your benchmarks locally or in CI using the exact same bare metal runners and your favorite benchmarking tools. The bencher CLI orchestrates running your benchmarks on bare metal and stores the results.
  2. Track: Track the results of your benchmarks over time. Monitor, query, and graph the results using the Bencher web console based on the source branch, testbed, benchmark, and measure.
  3. Catch: Catch performance regressions locally or in CI using the exact same bare metal hardware. Bencher uses state of the art, customizable analytics to detect performance regressions before they merge.

For the same reasons that unit tests are run to prevent feature regressions, benchmarks should be run with Bencher to prevent performance regressions. Performance bugs are bugs!

Example PR Comment

๐Ÿฐ Bencher Report

ProjectBencher
Branch254/merge
Testbedubuntu-latest
๐Ÿšจ 1 ALERT: Threshold Boundary Limit exceeded!
BenchmarkMeasure
Units
ViewBenchmark Result
(Result ฮ”%)
Upper Boundary
(Limit %)
Adapter::JsonLatency
microseconds (ยตs)
๐Ÿ“ˆ plot
๐Ÿšจ alert
๐Ÿšท threshold
3.45
(+1.52%)
3.36
(102.48%)
Click to view all benchmark results
BenchmarkLatencyBenchmark Results
microseconds (ยตs)
(Result ฮ”%)
Upper Boundary
microseconds (ยตs)
(Limit %)
Adapter::Json๐Ÿ“ˆ view plot
๐Ÿšจ view alert
๐Ÿšท view threshold
3.45
(+1.52%)
3.36
(102.48%)
Adapter::Magic (JSON)๐Ÿ“ˆ view plot
๐Ÿšท view threshold
3.43
(+0.69%)
3.60
(95.40%)
Adapter::Magic (Rust)๐Ÿ“ˆ view plot
๐Ÿšท view threshold
22.10
(-0.83%)
24.73
(89.33%)
Adapter::Rust๐Ÿ“ˆ view plot
๐Ÿšท view threshold
2.31
(-2.76%)
2.50
(92.21%)
Adapter::RustBench๐Ÿ“ˆ view plot
๐Ÿšท view threshold
2.30
(-3.11%)
2.50
(91.87%)
๐Ÿฐ View full continuous benchmarking report in Bencher

The Bencher Suite

Bencher is a suite of bare metal continuous benchmarking tools:

  • bencher CLI: run benchmarks and publish results
  • Bencher API Server: store, query, and alert on results
  • Bencher Console: web UI for tracking and graphing
  • Bencher Bare Metal runner: bare metal benchmark execution

The best place to start is the Bare Metal Quickstart.

For on-prem deployments, check out the Bencher Self-Hosted Quickstart.

Documentation

  • Tutorial
    • Quickstart
    • Bare Metal Quickstart
    • Self-Hosted Quickstart
  • How To
    • Install CLI
    • Claim Benchmark Results
    • Track Benchmarks in CI
    • GitHub Actions
    • GitLab CI/CD
    • Track Custom Benchmarks
    • Track Build Time
    • Track File Size
    • Self-Hosted GitHub App
    • Self-Hosted Google OAuth
  • Explanation
    • Benchmarking Overview
    • Bare Metal Overview
    • bencher run
    • Bare Metal Images
    • Branches & Start Points
    • Testbeds & Specs
    • Thresholds & Alerts
    • Benchmark Adapters
    • Continuous Benchmarking
    • Bencher Self-Hosted
    • Bencher Talks
  • Reference
    • REST API
    • Bencher Metric Format
    • Bencher Compose
    • bencher noise
    • Console Server Config
    • API Server Config
    • Changelog
    • Roadmap
    • Prior Art
    • Architecture
    • Database Schema

๐ŸŒ Also available in:

  • ็ฎ€ไฝ“ไธญๆ–‡
  • Espaรฑol
  • Portuguรชs do Brasil
  • ะ ัƒััะบะธะน
  • ๆ—ฅๆœฌ่ชž
  • Franรงais
  • Deutsch
  • ํ•œ๊ตญ์–ด

Supported Benchmark Harnesses

  • {...} JSON
    • Custom benchmark harness support
    • Build Time (Compile Time)
    • File Size (Binary Size)
  • #๏ธโƒฃ C#
    • BenchmarkDotNet
  • โž• C++
    • Catch2
    • Google Benchmark
  • ๐ŸŽฏ Dart
    • benchmark_harness
  • ๐Ÿ•ณ Go
    • go test -bench
  • โ˜•๏ธ Java
    • Java Microbenchmark Harness (JMH)
  • ๐Ÿ•ธ JavaScript
    • Benchmark.js
    • console.time/console.timeEnd
    • Vitest
  • ๐Ÿ Python
    • airspeed velocity
    • pytest-benchmark
  • โ™ฆ๏ธ Ruby
    • Benchmark
  • ๐Ÿฆ€ Rust
    • libtest bench
    • Criterion
    • Iai
    • Gungraun (formerly Iai-Callgrind)
  • โฏ_ Shell
    • Hyperfine

๐Ÿ‘‰ For more details see the explanation of benchmark harness adapters.

Don't see your harness? Open an issue โ†’

Showcase

Microsoft

Microsoft snmalloc

Google

Google Sedpack

GitLab

GitLab Git

conda

conda

Firezone

Firezone

pnpm

pnpm

Servo

Servo

Rustls TLS Library

Rustls

clap

clap

๐Ÿ‘‰ Checkout all public projects.

What Engineers Say

Bencher is like CodeCov for performance metrics.


Jonathan Woollett-Light
Jonathan Woollett-Light
@JonathanWoollett-Light

I think I'm in heaven. Now that I'm starting to see graphs of performance over time automatically from tests I'm running in CI. It's like this whole branch of errors can be caught and noticed sooner.


Price Clark
Price Clark
@gpwclark

95% of the time I don't want to think about my benchmarks. But when I need to, Bencher ensures that I have the detailed historical record waiting there for me. It's fire-and-forget.


Joe Neeman
Joe Neeman
@jneem

I've been looking for a public service like Bencher for about 10 years.


Jamie Wilkinson
Jamie Wilkinson
@jaqx0r

Hosting

  • Bencher Cloud: Zero infrastructure to manage. On-demand bare metal runners, billed by the minute. Pay for your benchmark runs, not idle servers. Benchmark for free โ†’
  • Bencher Self-Hosted: Deploy Bencher on your own infrastructure. Bare metal, Docker, or Kubernetes. Full control, no data leaving your environment. Deploy in 60 seconds โ†’

GitHub Actions

Install the Bencher CLI using the GitHub Action, and use it for continuous benchmarking in your project.

name: Continuous Benchmarking with Bencher
on:
  push:
    branches: main
jobs:
  benchmark_with_bencher:
    name: Benchmark with Bencher
    runs-on: ubuntu-latest
    env:
      BENCHER_PROJECT: my-project-slug
      BENCHER_API_TOKEN: ${{ secrets.BENCHER_API_TOKEN }}
    steps:
      - uses: actions/checkout@v6
      - uses: bencherdev/bencher@main
      - run: bencher run "bencher mock"

Supported Operating Systems:

  • Linux (x86_64 & ARM64)
  • macOS (x86_64 & ARM64)
  • Windows (x86_64 & ARM64)

๐Ÿ‘‰ For more details see the explanation of how to use GitHub Actions.

Repository Secrets

Add BENCHER_API_TOKEN to you Repository secrets (ex: Repo -> Settings -> Secrets and variables -> Actions -> New repository secret). You can find your API tokens by running bencher token list my-user-slug or view them in the Bencher Console.

Error on Alert

You can set the bencher run CLI subcommand to error if an Alert is generated with the --error-on-alert flag.

bencher run --error-on-alert "bencher mock"

๐Ÿ‘‰ For more details see the explanation of bencher run.

Comment on PRs

You can set the bencher run CLI subcommand to comment on a PR with the --github-actions argument.

bencher run --github-actions "${{ secrets.GITHUB_TOKEN }}" "bencher mock"

๐Ÿ‘‰ For more details see the explanation of bencher run.

๐Ÿ‘‰ See the example PR comment above.

Specify CLI Version

There is also an optional version argument to specify an exact version of the Bencher CLI to use. Otherwise, it will default to using the latest CLI version.

- uses: bencherdev/bencher@main
  with:
    version: 0.6.16

Specify an exact version if using Bencher Self-Hosted. Do not specify an exact version if using Bencher Cloud as there are still occasional breaking changes.

Contributing

To set up a development environment, see the Development Getting Started guide.

๐Ÿฐ All pull requests should target the devel branch


Bencher GitHub Codespaces

License

All content that resides under any directory or feature named "plus" is licensed under the Bencher Plus License.

All other content is licensed under the Apache License, Version 2.0 or MIT License at your discretion.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Bencher by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

About

๐Ÿฐ Bencher - Continuous Benchmarking

bencher.dev

Topics

benchmarkbenchmarkingcdcici-cdcode-qualitycontinuous-benchmarkingperformance

Resources

Readme
License

Security policy

Security policy
Activity
Custom properties

Stars

929 stars

Watchers

6 watching

Forks

42 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 โ€” GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800ร—600. No cookies required.