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":

  1. Private rendering. Same experience, but the notebook is not public.
  2. A review surface. nbviewer is read-only by design; there is nowhere to ask "is this cohort excluding trials?"
  3. 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.