# Share an ESLint HTML Report — Something Better Than 4,000 Console Lines

Canonical: https://commareports.com/share-eslint-report
Published: 2026-08-25

> eslint -f html writes a single self-contained file that nobody ever looks at. Publish it to Comma: one link, a thread per rule you're arguing about, and a revision per run showing the count coming down.

# Share an ESLint HTML report

ESLint ships an HTML formatter that almost nobody uses, because the
report has nowhere to go:

```bash
npx eslint . -f html -o eslint-report.html
```

One self-contained file: grouped by file, rule id on every row, severity
colour-coded. No assets folder, no local server needed — which makes it
the easiest artifact in this whole category to publish.

## Publish it

```bash
curl -X POST https://commareports.com/api/v1/reports \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html eslint-report.html \
        '{title: "Lint — main", html: $html, visibility: "registered"}')"
```

Or drag the file into [the app](https://commareports.com/). Either way
you get a URL that opens for anyone you share it with.

## Why this is worth doing at all

A lint report on an established codebase is not a to-do list, it's an
argument. Four thousand findings, and the useful conversation is about
which rules earn their keep:

- Which directories carry the debt.
- Which rules produce most of the volume, and whether that's signal.
- Which findings are the ones to fix before the next release.

That conversation happens on the report if the report is a link, and
happens nowhere if it's a CI log. [Anchored
comments](/comment-on-html) put "let's downgrade this to a warning" on
the rows it's about.

## From CI

```bash
npx eslint . -f html -o eslint-report.html || true   # don't lose the report on a red run

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 eslint-report.html \
        --arg title "Lint — $GITHUB_SHA" '{title: $title, html: $html}')"
```

PATCHing one report id keeps one URL and appends a revision per run, so
a lint-cleanup sprint has a curve. See [publishing from
CI](/docs/ci).

## Limits

- **Entry HTML: 5 MB.** A very large report can pass that — scope the
  run (`eslint src/`) or publish per package in a monorepo, which is
  the more useful report anyway.
- **60 requests/minute per token.**

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited
revision history.

**[Publish a lint report →](https://commareports.com/)**

### Related

- [Share an npm audit report](/share-npm-audit-report) · [Share a bundle analyzer report](/share-bundle-analyzer-report)
- [Share a Bandit report](/share-bandit-report) · [Share a coverage report](/share-coverage-report)
- [Publish from CI](/docs/ci)
