Solutions

Publish interactive data dashboards behind company SSO

One command. Your Plotly, D3, or Observable HTML dashboard becomes a permanent authenticated URL — interactive for every stakeholder with a company email.

Free tier available$49/month flat for TeamsGoogle + Microsoft SSOUnlimited viewers
terminal
$ display publish ./report.html
 
Uploading    47kb
Auth       Google Workspace ✓
 
✓ Published
 
→ https://view.display.dev/p/f474hfd/8f3kx9
 
Viewers    anyone at acme.com
Expires    never
Version    1
 
$ 

The command

dsp publish ./dashboard.html --name "sales-dashboard-q1"

Your VP Sales clicks, authenticates with their company email, and interacts with the live dashboard — filters, tooltips, drill-downs and all.


Your dashboards are interactive. The sharing methods aren't.

Data teams build dashboards in Plotly, D3, Observable, Bokeh, or Altair that export to self-contained HTML. The output is visually excellent and fully interactive.

Then sharing happens:

  • Email — HTML attachments blocked by corporate mail security. Even when delivered, the file opens locally and relative paths break.
  • Slack — downloads as a file. Recipients open in TextEdit.
  • Google Drive — stores the file. Doesn't render it.
  • Notion/Confluence — strips JavaScript. The interactive chart becomes a broken placeholder.
  • Hosted BI tools (Looker, Tableau) — require their own licenses and seats. Your custom D3 dashboard isn't a Looker chart.
  • Screenshot — static image of a dynamic artifact. All filtering, zoom, and interaction gone.

The analysis that took weeks to build gets shared as a screenshot of one chart. The VP asks a follow-up question that the dashboard would have answered in two clicks.


Display vs. alternatives for dashboard sharing

DisplayBI Tool (Looker/Tableau)Google DriveConfluence/Notion
Self-contained HTML dashboards❌ (their format)❌ (downloads)❌ (strips JS)
Interactive charts
Company SSO✅ ($49/mo)✅ (expensive)✅ (Google)✅ (per seat)
Persistent URL
No per-seat fees
Format-agnostic (any HTML)
Setup time15 secDays/weeksInstantInstant (broken)

Workflows by framework

Plotly:

import plotly.express as px
import plotly.io as pio
 
fig = px.scatter(df, x='revenue', y='churn', color='segment', 
                 title='Customer Segments Q1')
 
pio.write_html(fig, 'dashboard.html', include_plotlyjs='cdn')
dsp publish ./dashboard.html --name "segments-q1"

Observable (notebook export):

npx @observablehq/runtime dist/
dsp publish ./dist/ --name "revenue-analysis"

D3 single-file dashboard:

dsp publish ./d3-dashboard.html --name "pipeline-view"

Altair:

import altair as alt
 
chart = alt.Chart(df).mark_bar().encode(x='category', y='count')
chart.save('chart.html')
dsp publish ./chart.html --name "category-breakdown"

Multi-file dashboards:

dsp publish ./dashboard-build/ --name "revenue-dashboard"

What stakeholders see

The VP of Sales receives the dashboard URL in a Slack message. They click it.

They sign in with their company Google or Microsoft account — once, five seconds. They see the full interactive dashboard: hover tooltips, click filters, date range selectors, drill-down functionality.

Everything the dashboard was built to show. No Looker license. No SQL access. No data analyst in the loop for every follow-up question.


Pricing

Free — one-time password auth, 50MB, unlimited viewers
Teams ($49/month) — Google + Microsoft SSO, 25GB, custom domain, unlimited viewers

See all pricing →


Publish your first dashboard free →


Common questions.

Does Display support Plotly Dash?+

Plotly Dash is a Python server — it requires a live process to run. Display hosts static HTML. For sharing Dash dashboards, export them as static HTML (dash-snapshot or similar), then publish with Display. Alternatively, use Display for static Plotly charts and keep Dash for interactive server-based dashboards.

What about data privacy — does Display access my data?+

Display stores and serves the HTML file you publish. If your HTML dashboard contains embedded data (e.g., Plotly with df.to_json() inline), that data is stored in Display's Cloudflare R2 storage. For sensitive financial or customer data, review your company's data handling policies. Display data is never processed by AI models and is isolated per workspace.

Can I update a dashboard with fresh data?+

Yes. Re-publish with the same name: dsp publish ./updated-dashboard.html --name sales-dashboard-q1. The URL stays the same. Every viewer who bookmarked or shared the link sees the updated data.

Does the 50MB free tier limit cover most dashboards?+

Typical Plotly/Altair/D3 dashboards are 1–10MB. Dashboards with embedded datasets or many chart traces can reach 20–50MB. The free tier (50MB total workspace storage) handles most individual dashboards; Teams tier (25GB) handles hundreds.

Can I publish dashboards from a CI/CD pipeline (automated updates)?+

Yes. Run dsp publish as a step in your pipeline — for example, after a scheduled dbt run or a data refresh. Add DISPLAY_TOKEN as a CI secret and update dashboards automatically.

Publish your first artifact in 15 seconds.

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