# Share a HoloViews Plot — Keep the Interactivity, Lose the Screenshot

Canonical: https://commareports.com/share-holoviews-plot
Published: 2026-09-01

> hv.save() writes a standalone HTML file with the Bokeh interactions intact. Publish it to Comma for a link where panning, hovering and linked selections still work — and people can comment on it.

# Share a HoloViews plot

The value of a HoloViews plot is in the interactions — hover to read the
exact value, box-select on one panel and watch the linked one filter,
zoom into the week that looks wrong.

The way that plot usually reaches a colleague is as a PNG, which has none
of that. Someone screenshots the browser, crops it, and pastes it into a
channel, and the recipient's first question is one the interactive
version would have answered.

## Publish it

```python
import holoviews as hv
hv.extension("bokeh")

hv.save(layout, "plot.html")
```

```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 plot.html \
        '{title: "Latency by region — week 36", html: $html}')"
```

Or drag `plot.html` into [the app](https://commareports.com/).

Pan, zoom, hover and linked selection all keep working — scripts run
inside a sandboxed iframe (`allow-scripts`, no `allow-same-origin`).

Compose before you save. `a + b` for a layout, `a * b` for an overlay:
saving the composed object keeps linked axes and shared selections, which
stitching separate HTML files together does not.

## Datashader plots

A Datashader-backed plot saved to static HTML holds the rasterizations
that were embedded, not the ability to re-rasterize on zoom — that needs
live Python. Save at the zoom levels that matter, or publish a small set
of fixed views.

## What the URL changes

- **The question lands on the chart.** "What happened in week 32?" as an
  anchored thread. See [commenting on HTML](/comment-on-html).
- **A refresh keeps the URL.** PATCH the same report id when the data
  updates — a chart embedded in a wiki page never goes stale. See
  [revisions and diffs](/share-html-report).
- **On a schedule.** A [routine](/docs/routines) re-runs the script and
  refreshes the plot without you.

## Limits

- **HTML body: 5 MB.** HoloViews embeds the data in the file; a plot with
  hundreds of thousands of points exceeds it. Aggregate or rasterize
  before saving.
- **Scripts run, sandboxed**: `allow-scripts`, no `allow-same-origin`.
- **60 requests/minute per token.**

## Try it

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

**[Create your first report →](https://commareports.com/)**

### Related

- [Panel dashboards](/share-panel-app) — the layer above
- [Bokeh plots](/share-bokeh-plot) · [Altair charts](/share-altair-chart) · [Plotly](/share-plotly-html)
- [Jupyter](/with/jupyter) · [Weekly digests](/features/routines/weekly-analytics-digest)
