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