Share a benchmark report
Every benchmarking tool worth using produces more than a number. Criterion gives you the sample distribution, the outlier count and a confidence interval. pytest-benchmark gives you a histogram. JMH gives you per-fork variance. All of it exists so you can tell a regression apart from a noisy CI runner.
And all of it gets thrown away at the moment of sharing, when someone pastes "12% slower" into a channel and the team argues about whether that is real.
Publish the report
cargo bench # → target/criterion/report/index.html
Drag target/criterion/ (or a zip of it) into
the app: report/index.html becomes the report
body, the per-benchmark pages and the SVG plots upload as assets, and the
relative references are rewritten so the drill-down from the summary into a
single benchmark still works.
Same shape for the others:
- pytest-benchmark —
pytest --benchmark-histogram=benchwrites SVGs; wrap them in a page or publish the generated output directly. - JMH — export from the JMH Visualizer and publish the HTML.
- hyperfine —
--export-markdownis one table; render it and publish the page with the sentence explaining what changed.
From CI, one URL per suite
curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
-H "Authorization: Bearer $COMMA_API_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile html target/criterion/report/index.html \
--arg title "Benchmarks — $GIT_SHA" '{title: $title, html: $html}')"
Every run appends a revision at the same URL. That is the part that changes the conversation: performance work is inherently a comparison over time, and a stable URL with history is the smallest possible version of a performance dashboard — no service to run, no metrics pipeline to own. See publishing from CI.
What the review layer adds
- "This regressed with the allocator change, and we accepted it — see the memory numbers." Anchored to the benchmark it concerns, still there six months later. See commenting on HTML.
- "The runner was shared for this build; rerun before you believe it." Recorded next to the result, not lost in a thread.
- Access per report — private, team, domain-gated, or public if the numbers are a selling point. See the sharing model.
Limits
- Entry HTML: 5 MB. Assets: 25 MB per file, 250 MB and 500 files total. A large Criterion suite generates a lot of SVGs — publish per benchmark group if you approach the file count.
- Scripts run, sandboxed:
allow-scripts, noallow-same-origin. - 60 requests/minute per token.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.