plotly.write_html() gives you a self-contained file: the figure, the data behind it, and the plotting library, all in one HTML document that hovers and zooms without a server. The awkward part is the handoff. Email it and it lands as an attachment the recipient opens from their downloads folder, where some corporate mail clients strip the scripts and the chart arrives dead. Put it in a repo and you’re asking a stakeholder to understand a repo. Drop the file here and it becomes a link that opens in any browser with the interactivity intact — the tooltips, the legend toggles, the box zoom — and no Python anywhere on their side.
Try it now
Drop a file — get a private link in seconds. No sign-up.
Drop an HTML file or ZIP bundle, or click to choose.
Single file or ZIP. Max 3 MB.
Up to 3 MB, link self-destructs after 7 days. Sign up free to keep links forever, password-protect them, and store more.
Export the figure with fig.write_html("chart.html") — the default bundles Plotly.js into the file, which is what makes it self-contained and what makes it work here. Drop that file in and you get a link in seconds. If you generated a small set of linked pages, or a figure that pulls in its own assets, zip the folder and upload that instead: the entry page is detected automatically and the relative paths keep resolving.
The recipient clicks and gets the real figure, not an image of it. They can hover a point to read its values, drag a box to zoom into the interesting quarter, click a legend entry to isolate one series, and reset with a double-click. That difference matters most with the stakeholder who asks the second question — the one a static PNG in a slide can never answer, because the answer is in a region of the plot you didn’t crop to.
Analysis is often shared before it’s final, so the defaults are cautious. Links are unguessable and no-index, which keeps unreleased numbers out of search; add a password when the figure carries revenue or headcount, and set an expiry when it’s a point-in-time read that shouldn’t be quoted next quarter. Re-exporting over the same page updates it in place, so the link in someone’s bookmark keeps pace with the data.
Export it with fig.write_html() and upload the file — you get a link that opens in any browser. Everything the figure needs travels inside that one HTML document, including the plotting library, so the person opening it needs no Python, no notebook, no environment and no install. They click and the chart is there, still interactive.
It stays interactive. Hover tooltips, legend toggling, box and lasso zoom, pan and the reset control all behave as they do locally, because the page is served as a real web page with its JavaScript intact. That’s the reason to send a chart rather than a screenshot in the first place — the reader can interrogate the part they care about instead of asking you to re-crop it.
Mail clients and gateways are cautious with HTML attachments, and some strip or neutralise embedded scripts on the way through — reasonable behaviour for an inbox, unhelpful for a chart whose interactivity is script. Serving it as a page sidesteps that path entirely: the recipient loads a URL rather than opening a local file, so the document arrives as written.
Export the notebook to HTML and upload that the same way — narrative, code output and figures included. If the export produces a folder of assets alongside the HTML, zip the folder and upload the bundle so the relative links keep working. The result reads as a report rather than a file someone has to run.
That’s the default. Every page carries a no-index tag and a 32-character random URL ending, so it isn’t indexed and isn’t discoverable by guessing. Add a password for figures with revenue, salary or patient-level shapes in them, and set an expiry so a preliminary read stops opening once the final one exists.
No. Re-export the figure and replace the file, and the same URL serves the new version — useful for a weekly chart that a few people have bookmarked. When you need the old cut to stay quotable, publish that one as its own page so both remain reachable at separate, stable addresses.
No card to try, no sign-up to get a link. Sign up free to keep links forever, password-protect them, and store more.