# nbviewer Alternatives for Sharing Notebooks (2026)

Canonical: https://commareports.com/alternatives/nbviewer-alternatives
Published: 2026-08-24

> nbviewer renders a public notebook from a public URL. Alternatives compared for the common case it doesn't cover: a private notebook, shared with named people, that someone can comment on.

# 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](/docs/mcp), 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](/share-jupyter-notebook-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](/alternatives/hex-alternatives) and
[the Hex comparison](/vs/hex) 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](/alternatives/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](/share-jupyter-notebook-html).
- **Reader needs to run the code?** A hosted notebook platform, not a viewer.
