nbviewer alternatives
nbviewer is one of the most quietly useful things in the Jupyter ecosystem, and it has one hard constraint that no amount of configuration removes: it fetches your notebook over the public internet. A gist, a public repo, a public URL. That is the deal.
Which means the moment your notebook contains customer numbers, an internal
metric, or an unreleased result, nbviewer stops being an option — and the
usual fallback is worse. The notebook gets emailed as a .ipynb, opened by
nobody, and the conclusions get retyped into a doc where the chart is a
screenshot.
What people are actually replacing
Three different needs get called "an nbviewer alternative":
- Private rendering. Same experience, but the notebook is not public.
- A review surface. nbviewer is read-only by design; there is nowhere to ask "is this cohort excluding trials?"
- Freshness. The rendered page is whatever was committed. A rerun means a new commit, a new URL in the message, and a colleague reading last week's numbers.
The shortlist
1. Comma — convert once, publish with access control and comments
Run jupyter nbconvert --to html --embed-images analysis.ipynb, then drag the
file in or POST it from the notebook's last cell. What you get that nbviewer
cannot give you:
- Visibility levels — private, team, email-domain-gated, named reviewers, or public. Not a shared password: identity.
- Anchored comment threads on the rendered output, so the question lands on the cohort table rather than in a channel.
- A stable URL with revisions — rerun, PATCH the same report id, and the link you sent in January still works and shows what changed.
- Publishing from an agent or CI — one
POST, or one MCP call, which matters now that a lot of notebooks are produced by something that is not a person.
Not for: running the notebook. There is no kernel; this is the document, after execution. Walkthrough: share a Jupyter notebook as HTML.
Pricing: Free — unlimited reports, commenters, and revision history. Viewers are free and unlimited.
2. GitHub / GitLab's built-in renderer — fine, until it isn't
Both render .ipynb in-repo, including private repos, which genuinely covers
the private case for people who already live in the repo. The limits show up
fast: large notebooks fall back to raw JSON, interactive output is stripped,
review comments land on JSON diff lines instead of on the chart, and every
rerun is a commit.
3. Deepnote, Hex, Colab — keep it a live notebook
If what you want is for the reader to run things, a hosted notebook platform is the honest answer, with real collaboration and real access control. You are buying a workspace, not a share link, and pricing follows. See Hex alternatives and the Hex comparison for where that line sits.
4. Self-hosted nbconvert + static hosting
nbconvert in CI, output to S3, Cloudflare Pages or GitHub Pages behind
whatever gate you operate. Maximum control, and you own the auth, the
invalidation and the review problem — which stays unsolved, because static
hosting has no comment layer. See
GitHub Pages alternatives.
At a glance
| Tool | Private notebooks | Review / comments | Freshness on one URL | Interactive output |
|---|---|---|---|---|
| Comma | Yes, identity-based | Anchored threads | Revisions on one id | Yes, sandboxed |
| nbviewer | No — public URL only | No | Re-render per commit | Yes |
| GitHub renderer | Yes, via repo access | On diff lines | Per commit | Mostly stripped |
| Deepnote / Hex | Yes | Yes, in-product | Live | Yes, live |
| Static hosting | You build it | No | Per deploy | Yes |
Checked August 2026. Verify current plans before committing.
How to choose
- Public, open-source notebook? nbviewer is still excellent. Keep it.
- Private analysis that needs a second opinion? Convert to HTML and publish it somewhere with identity-based access and a comment layer — that is the job Comma does.
- Reader needs to run the code? A hosted notebook platform, not a viewer.