Releases: bencherdev/bencher
Releases · bencherdev/bencher
Release list
v0.6.10
- Add a Y-Axis scale toggle to perf plots with three modes (Auto, Linear, and Log); the Auto default preserves the existing adaptive scaling, Log falls back to Auto when the data includes zero or negative values, and the selection is saved in the plot URL, restored for pinned plots, and can be set with
bencher plot create --y-axisor changed withbencher plot update --y-axis - Selecting a pinned plot from the Plots tab in the Perf explorer now applies the plot's saved X-Axis and Y-Axis instead of the defaults
- Thin the Branch Version Number x-axis tick labels to fit the plot width; previously every version rendered a label, which overlapped into an unreadable smear on plots with many versions
- Add Bencher MCP, a hosted Model Context Protocol server at
https://mcp.bencher.dev/mcp(/mcpon Self-Hosted); AI agents and assistants can query benchmark data and submit runs with the same permissions as a project API key (bencher_run_*), without needing thebencherCLI installed
v0.6.9
- Add Vitest adapter (
js_vitest) - Add a
database.cache_sizeserver config option for the writer connection page cache in KiB (default 64 MiB) - Update a pinned plot in place with
PATCH /v0/projects/{project}/plots/{plot}, the Perf explorer "Update Pin" button, orbencher plot update - Reject plot dimension UUIDs from other projects with a
404 Not Foundand empty dimension lists with a400 Bad Request - Add the project name and link as the first row of the PR comment report table (Thank you @OmarTawfik)
- Create the GitHub Check with an
in_progressstatus before benchmarks run and complete it with the results once they finish, so reruns no longer show a stale conclusion; ifbencher runexits with an error before the results are posted, the check is marked as failed (Thank you @OmarTawfik) - Add runner update channels via
runner up --update-channel <stable|canary>(default:stable); thecanarychannel tracks a rolling prerelease that is rebuilt whenever the runner changes on a Bencher Cloud deploy, so runner changes are field-tested on Bencher Cloud before a versioned release;canaryrunners report their binary checksum and converge on the published build by content rather than by version - Runner self-update checksum fetch failures no longer drop the WebSocket channel into a reconnect loop; the server now logs the failure, skips the update offer, and retries at the runner's next
readypoll - BREAKING CHANGE The reports list endpoint (
GET /v0/projects/{project}/reports) now omits theresultsandalertsfor each report by default, drastically reducing response sizes for projects with large reports; set the newexpandquery param totrue(bencher report list --expand) to restore the previous behavior. A newcountsfield summarizes each report with the number of benchmarks and distinct measures per iteration and the total and active alerts. Note that older CLI versions cannot parse the new default list response, so update the CLI before usingbencher report list;bencher runis unaffected
Runner Canary
v0.6.8
- BREAKING CHANGE Change the default self-hosted API server port from
61016to the newly IANA-registered6610. Deployments relying on the default now serve the API on6610. Update clients, reverse proxies, and--host/BENCHER_HOSTreferences (Docker Compose, devcontainer, and docs are updated to match). To stay on61016, setserver.bind_addressto0.0.0.0:61016(or runbencher up --api-port 61016). - Mark the remaining user API token REST endpoints (list, view, update, and revoke) as deprecated in the OpenAPI spec and API docs; they continue to work for existing tokens
v0.6.7
- Fix the OCI registry token endpoint for the Docker 29+ containerd image store, which sends multiple
scopequery parameters and anOAuth2POST token exchange (Thank you @travishathaway) - Add user-scoped API keys (
bencher_user_...) that authenticate as the owning user across every endpoint a JWT can reach, includingdocker login; the one exception is key management: a user API key cannot create more keys and can only see, update, or revoke itself, so a leaked key cannot mint credentials that outlive its own revocation, tamper with the user's other keys, or enumerate them - Add
bencher user key {create,list,view,update,revoke}CLI subcommands and an "API Keys" page in the Console for managing user API keys --key/BENCHER_API_KEYnow accepts either a project-scoped key (bencher_run_*) or a user-scoped key (bencher_user_*); the--projectrequirement applies only to project-scoped keys- DEPRECATED User API tokens are deprecated in favor of user API keys:
POST /v0/users/{user}/tokens(bencher token create) now always fails with a403 Forbiddenerror; existing API tokens continue to work and can still be listed, viewed, renamed, and revoked - Replace the
Tokensentry in the Console account dropdown withKeys, and hide the "API Tokens" page entirely for accounts created after 15 June 2026 bencher run --github-actionsnow always creates aBencher ReportGitHub Check (failing on an active Alert), so it can be used as a required status check in branch protection; the check is created on a best effort basis, so check creation failures are now warnings instead of errors (Thank you @OmarTawfik)- Create the GitHub Check on the pull request head commit (
pull_request.head.shaorworkflow_run.head_sha) instead ofGITHUB_SHA, so the check appears on the pull request - Append the
--ci-idID to the GitHub Check name (ieBencher Report (<ID>)) so multiplebencher runinvocations on the same commit get distinct, stable check names
v0.6.6
- Show context-aware auth hints in API 404 errors: routes that accept project API keys now mention both API tokens and project keys, while token-only routes mention only API tokens
- BREAKING CHANGE Rename
usagetometricsin the organization usage API response and addrunner_minutesfield for bare metal runner minutes usage - Add
--max-retry-afterCLI option to cap exponential backoff between retries (default 30s) and increase default--attemptsfrom 10 to 35 for ~15 minutes of retry coverage
v0.6.5
- Add project scoped API keys
- Add build time and file size tracking support for bare metal runs
- Fix
bencher runhanging on stdin when no command is provided, including for--imageremote bare metal runs (Thank you @sophie-h)
v0.6.4
- Allow a minimum sample size of
1for the Percentage (percentage) Threshold Test (Thank you @teofr) - BREAKING CHANGE Switch runner key format from hex to alphanumeric encoding, reducing key length from 79 to 45 characters; existing runner keys must be rotated
v0.6.3
- Fix sample standard deviation for Z-score, t-test, and Log Normal Thresholds to use Bessel's correction (divide by
n − 1) (Thank you @ggirol-rc) - Fix t-test Threshold to use the prediction interval (scale the standard deviation by
√(1 + 1/n)) so the boundary tests whether a new Metric is consistent with the historical distribution rather than whether it contains the historical mean (Thank you @ggirol-rc) - Existing Thresholds will produce slightly wider (statistically correct) boundaries; no configuration changes required
- Fix Alert JSON to return the Spec for the Report in which the Alert was generated instead of the Testbed's current Spec
- BREAKING CHANGE Rename
runner tokentorunner keyacross the API, CLI, and environment variables - Fix race condition where concurrent branch creation could cause a "branch head is null" 500 error (Thank you @vmelamed)
- Self-heal legacy Branches whose
head_idis stillNULLfrom the race condition above so subsequentbencher runsubmissions succeed instead of 500ing (Thank you @vmelamed) - Add API token revocation with
bencher token revokeand Revoke button in the Console
v0.6.2
- Allow unauthenticated
docker pushto unclaimed projects - Fix URL fragment placed before query string per RFC 3986 (Thank you @ricardoboss)
- Fix
--start-point-hashfailure on non-existent hash by falling back to the start point branch's latest version (Thank you @teofr)