Share a Biome report
Biome replaced ESLint and Prettier in a lot of repos for one reason: it finishes before you look away. That speed is local, though. The reviewer on the pull request, the person who owns the package you just touched, the contributor on a fork — none of them are watching your terminal.
JUnit reporter → HTML
npm i -D @biomejs/biome
pip install junit2html
npx biome ci . --reporter=junit > biome.xml || true
junit2html biome.xml biome.html
biome ci runs the formatter, the linter and the import sorter in a single
pass without writing files — the right command for a pipeline. || true keeps
the job alive long enough to publish; keep a separate, unmuted biome ci step
as the gate.
Publish it
Drag biome.html into the app, or from CI:
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 biome.html \
--arg title "Biome — $GITHUB_REF_NAME" '{title: $title, html: $html}')"
One report id per repo or package, PATCHed on every run.
Migrations are the case for a URL
The findings worth sharing are almost never the day-to-day ones — those get
fixed on save. They are the migration runs: biome migrate eslint, the first
pass over a package that was never linted, the rule set someone wants to
enable across a monorepo.
Those produce a list long enough that the only way through it is to split it:
- Anchored threads on a rule group — "we're keeping
noExplicitAnyoff in the generated clients" — next to the findings instead of buried inbiome.json. See commenting on HTML. - Revisions, so the count going down is visible at the same URL.
Limits
- Entry HTML: 5 MB. Assets: 25 MB per file, 250 MB and 500 files total. A first pass over a large monorepo is the one that approaches it — publish per-package reports instead.
- 60 requests/minute per token.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.