# Share an Evidence.dev Build — BI Without the Deploy Step

Canonical: https://commareports.com/share-evidence-dev-site
Published: 2026-09-14

> Evidence builds a static BI site from SQL and markdown. Publish the build folder to Comma for one link per report — no hosting, private by default, with comments on the numbers.

# Share an Evidence.dev build

Evidence's model is unusually clean: SQL in markdown, version controlled,
building to a static site. Everything about it is better than a BI tool right
up to the last step, which is a deployment — and a deployment is the wrong unit
for most of what analysts are asked for.

The actual request is "can you look at churn by cohort for the board meeting".
That is one report, for five people, once a quarter. Standing up a hosted site
with auth for it is out of proportion, and the usual fallback is exporting to
PDF, which throws away every interactive element Evidence just built.

## Build it

```bash
npm run build          # → build/
```

```
build/
├── index.html
├── churn/  revenue/       # a page per markdown file
├── _app/                  # the compiled app + baked data
└── data/
```

The data is baked in at build time, which is what makes the output shareable at
all: no warehouse connection, no credentials, no running process.

## Drop the folder in

Drag `build/` (or a zip of it) into [Comma](https://commareports.com/):

- `index.html` becomes the **report body** — the page carrying the comment
  layer.
- Every page, the compiled app and the baked data upload alongside it, with
  relative references rewritten to the uploaded copies.
- Scripts run inside a sandboxed iframe (`allow-scripts`, no
  `allow-same-origin`), so charts render, dropdown inputs filter, and tables
  sort.

One URL. Access set per report — private, your team, anyone signed in at your
domain, or anyone with the link. That last option is what makes a client-facing
report workable without provisioning them an account. See
[sharing & access control](/docs/sharing).

## From a scheduled job

```bash
npm run sources && npm run build

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 build/index.html \
        --arg t "Weekly metrics — $(date -u +%F)" '{title: $t, html: $html}')"
```

Supporting files go up through `POST /api/v1/reports/$REPORT_ID/assets` as
base64 — see the [API reference](/docs/api) and
[publishing from CI](/docs/ci). Or let a [routine](/features/routines) run the
publish on a schedule.

PATCHing one id keeps the link stable while each run appends a revision, so
"what did this look like at the end of Q2?" is answered by scrubbing the
history — which no BI dashboard does, because a dashboard only has a present
tense.

## The questions land on the chart

The reason analysts dread distributing reports is not the building. It is the
follow-up: four separate email threads asking variations of "does this include
trials?", each one losing the context of which chart was being asked about.

Anchored comments put the question on the chart and the answer next to it,
where the next reader finds it. See [commenting on HTML](/comment-on-html).

## Limits

- **Entry HTML: 5 MB.** Assets: 25 MB per file, **250 MB and 500 files total**.
  A build with large baked datasets can exceed the total — aggregate in the SQL
  rather than shipping raw rows the chart immediately groups.
- **Scripts run, sandboxed** — no same-origin access.
- **60 requests/minute per token.**

## Try it

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

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

### Related

- [Share a Metabase dashboard](/share-metabase-dashboard) · [Share a Lightdash dashboard](/share-lightdash-dashboard)
- [Share dbt docs](/share-dbt-docs) · [Share a Quarto report](/share-quarto-report)
- [Share an Observable notebook](/share-observable-notebook) · [Share a Superset dashboard](/share-superset-dashboard)
