Share Jupyter Notebook HTML With Stakeholders (No Email Attachments)

Jupyter notebooks contain analysis your stakeholders need to see: Plotly visualizations, Pandas tables, model outputs, trend charts. Exporting to HTML preserves all the interactivity. Sharing the HTML preserves none of i

TL;DR
`jupyter nbconvert --to html analysis.ipynb && dsp publish ./analysis.html` — your VP sees interactive Plotly charts in a browser, not an email attachment they can't open.

The problem

Jupyter notebooks contain analysis your stakeholders need to see: Plotly visualizations, Pandas tables, model outputs, trend charts. Exporting to HTML preserves all the interactivity. Sharing the HTML preserves none of it.

Email: HTML attachments are blocked by most corporate email security policies.
Google Drive: downloads the file. Viewers see raw HTML markup.
Slack: downloads the file. Same result.

The VP of Sales needs to see the quarterly trend analysis. They receive a file they can't open.


Two commands

jupyter nbconvert --to html analysis.ipynb
 
dsp publish ./analysis.html --name "q1-trend-analysis"

Share the URL in Slack or email. Stakeholders click it, authenticate with their company Google or Microsoft account once, and see the full rendered notebook — interactive charts, output cells, code (if you want it visible), everything.


Hide the code if you don't want it visible

jupyter nbconvert --to html --no-input analysis.ipynb

--no-input strips the code cells. Stakeholders see only the outputs: charts, tables, markdown commentary. Clean, readable report.


Auto-publish on schedule

name: Weekly Analysis
 
on:
  schedule:
    - cron: '0 9 * * MON'  # Every Monday at 9am
 
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: pip install jupyter nbconvert -r requirements.txt
      - name: Run and convert notebook
        run: jupyter nbconvert --to html --execute analysis.ipynb
      - name: Publish
        run: |
          npm install -g @display-dev/cli
          dsp publish ./analysis.html --name "weekly-analysis"
        env:
          DISPLAYDEV_API_KEY: ${{ secrets.DISPLAYDEV_API_KEY }}

The URL (/weekly-analysis) stays the same every week. Stakeholders bookmark it once. It updates automatically every Monday.


FAQ

Does this work with Plotly, Bokeh, and Altair charts?+

Yes. nbconvert embeds the JavaScript for these libraries in the HTML output. When Display serves the file, all interactive charts render correctly in the viewer's browser.

Does it work with ipywidgets?+

Partially. Widget state embedded with --embed-caveats renders static outputs. Full ipywidgets interactivity requires a live Jupyter kernel, which Display doesn't provide. For interactive widgets, consider Voilà for server-based deployment or embed charts directly using Plotly/Bokeh instead of widgets.

How large are Jupyter HTML exports?+

Typically 1–10MB for analysis notebooks with embedded charts. Large image-heavy notebooks can reach 50MB+. Display's Teams plan has 25GB storage; free tier has 50MB.

Publish your first artifact in 15 seconds.

Free tier. No credit card. One-time password auth for viewers on free, Google + Microsoft SSO on Teams ($49/month flat).

Get started free →See pricing