Share an Observable Framework build
Observable Framework is a static site generator for data apps: markdown pages,
data loaders that run at build time, and Plot / D3 visualizations that stay
interactive in the output. npm run build writes a dist/ that needs no
runtime — which is exactly the shape that should be easy to share, and mostly
is not, because the moment you need it behind a login you are standing up a
host.
Build
npm run build # → dist/
The data loaders execute during the build, so dist/ contains the results —
no database credentials travel with it, and no server is needed to serve it.
Publish dist/
Drag dist/ (or a zip of it) into the app:
index.htmlbecomes the report body.- The generated data files, JS bundles, styles and fonts upload as assets, and their references are rewritten to the uploaded copies.
- Scripts run inside a sandboxed iframe (
allow-scripts, noallow-same-origin), so charts render, inputs respond and cross-filtering works.
Private by default, and access is set per report — private, team, domain-gated, or a named reviewer list. See the sharing model.
Refresh on a schedule
A data app that shows last month's numbers is worse than no data app. Rebuild and PATCH the same report id:
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 dist/index.html \
--arg title "Metrics — week of $(date +%Y-%m-%d)" \
'{title: $title, html: $html}')"
Or let a routine do it: same report id, same URL, a revision per refresh, and nobody has to remember.
What review adds
- Anchored threads on the chart — the question about the anomaly attached to the anomaly. See commenting on HTML.
- Revisions, so week-over-week movement is visible in the report's own history rather than reconstructed from screenshots.
Limits
- Entry HTML: 5 MB. Assets: 25 MB per file, 250 MB and 500 files total. A build that bakes in a large dataset is the one to watch — pre-aggregate in the loader.
- 60 requests/minute per token.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.