Jupyter Notebook Viewer
Drop a .ipynb file to read it the way Jupyter shows it, with its charts, tables and maths, without installing anything. Save it as a PDF, a web page, a Python script or Markdown. The notebook is read on this device and never uploaded.
Key facts
- A .ipynb file is plain JSON: a list of cells, and every code cell keeps the outputs it printed the last time it ran, so a notebook can be read without running it again.
Open a Jupyter notebook
Drop a .ipynb file here, choose one or paste it. No Jupyter, no install, no upload.
Bike rides and rain: a short walkthrough
A week of made-up numbers from a small town's bike-share scheme. It shows what a notebook can hold: Markdown, code, a table, a chart, maths, a warning and, at the end, an error.
import pandas as pd
import matplotlib.pyplot as pltrides = pd.DataFrame({
"day": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"trips": [412, 438, 395, 451, 288, 230],
"rain_mm": [0.0, 1.2, 4.5, 0.0, 9.8, 14.1],
}).set_index("day")
rides| trips | rain_mm | |
|---|---|---|
| day | ||
| Mon | 412 | 0.0 |
| Tue | 438 | 1.2 |
| Wed | 395 | 4.5 |
| Thu | 451 | 0.0 |
| Fri | 288 | 9.8 |
| Sat | 230 | 14.1 |
How busy was the week?
The mean number of trips per day is
where is the number of days and is the number of trips on day .
mean = rides["trips"].mean()
print(f"Mean trips per day: {mean:.1f}")
print(f"Busiest day: {rides['trips'].idxmax()}")Mean trips per day: 369.0 Busiest day: Thu
import warnings
if rides["rain_mm"].max() > 10:
warnings.warn("Saturday had over 10 mm of rain; the gauge reads high in storms.")/tmp/ipykernel_4120/2715331896.py:4: UserWarning: Saturday had over 10 mm of rain; the gauge reads high in storms.
warnings.warn("Saturday had over 10 mm of rain; the gauge reads high in storms.")
Rain and riding
Fewer people rode on wet days. Pearson’s correlation coefficient measures how closely two columns move together, from −1 to 1:
fig, ax = plt.subplots(figsize=(6.4, 3.6))
ax.bar(rides.index, rides["trips"], color="#4878d0")
ax.set_ylabel("Trips")
ax.set_title("Bike-share trips per day")
plt.show()round(rides["trips"].corr(rides["rain_mm"]), 3)-0.979
A day that isn’t there
There is no Sunday in the data, so asking for it raises a KeyError. This is what a traceback looks like:
rides.loc["Sun"]KeyError: 'Sun'
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In[7], line 1 ----> 1 rides.loc["Sun"] File ~/.venv/lib/python3.12/site-packages/pandas/core/indexes/base.py:3812, in Index.get_loc(self, key) 3810 return self._engine.get_loc(casted_key) 3811 except KeyError as err: -> 3812 raise KeyError(key) from err KeyError: 'Sun'
What next
- Load a week of rides
- Chart them
- Add the weekend’s weather from the town’s own gauge
Made-up data, made for this example. Any resemblance to a real town is a coincidence.
Your notebook is read on this device and never uploaded. Check it yourself
How this works: Method, 4 sources, Checked against 7 worked examples,
How this works
Method
The .ipynb file is read in the browser as the nbformat JSON it is: every cell, its last outputs and its attachments. Markdown is drawn with GitHub Flavored Markdown and maths with KaTeX, code is coloured by the notebook’s language, and each output shows its richest format, as JupyterLab chooses. All HTML from the notebook is sanitised first and nothing from other sites is loaded. PDF comes from the browser’s print engine; HTML, script and Markdown files are written in the page.
Sources
How it’s tested
7 worked examples for this page are checked by automated tests before every release: given the inputs, the tool must show the expected answer.
Privacy
On your device. Nothing you enter or open leaves this browser. About privacy labels
Changes
- First published: open a .ipynb file with its outputs, maths and colours, and save it as PDF, HTML, a script or Markdown.
Reading a notebook without Jupyter
A Jupyter notebook mixes writing, code and results in one file. Someone writes a few lines of explanation, runs a block of Python, and the table or chart it makes is saved under the code. When the notebook is sent to you, all of that travels inside the .ipynb file, so you don’t need Python, Jupyter or the data to see what it showed on the author’s screen.
The usual ways to look at one ask something of you first. nbviewer opens notebooks that already sit at a public address. GitHub shows them only from a repository. Colab wants a Google account and copies the file to Google Drive. Opening it in Jupyter means installing Python and a few hundred megabytes of packages. For a homework file from a classmate or a report from a colleague that is a lot of setup just to read it.
This viewer reads the file in your browser. It draws Markdown with tables, task lists and LaTeX maths, colours the code by its language (Python, R and Julia), and shows each output the way JupyterLab picks it: HTML tables, pictures, text, JSON, maths and tracebacks with their colours. Widgets and JavaScript charts need a running kernel, so they get a short note instead, or the still picture the notebook saved beside them.
Notebooks can be written by anyone, so everything HTML in one is cleaned before it reaches the page: scripts, event handlers, forms and frames are removed, and pictures from other sites are not loaded. You see a note with their address instead, because loading them would tell that site you opened the file.
Good to know
- A notebook’s cells are Markdown, code or raw, and each code cell stores its outputs: printed text, rich results with several formats of the same value, and errors with their traceback. Source: nbformat documentation: The Notebook file format
- Text in a notebook, such as a cell’s source, may be stored as one string or as a list of lines; readers join the list back together with nothing in between. Source: nbformat documentation: The Notebook file format
- nbconvert, Jupyter’s own converter, turns notebooks into HTML, LaTeX, PDF, Markdown, reStructuredText and scripts from the command line. Source: nbconvert documentation: Using as a command line tool
How to open a Jupyter notebook without Jupyter3 steps, all on your device
- Open the notebook. Drop a .ipynb file on the card, choose it from your device, or paste the notebook’s JSON. Notebooks from Jupyter, JupyterLab, VS Code, Google Colab and Kaggle all open.
- Read it. Every cell is shown with its last outputs. Jump around with the contents, fold the code or the outputs, or turn on Hide code to read it like an article.
- Save a copy. Export it as a PDF, a standalone HTML page, a script or Markdown. Each file is made in your browser and saved straight to your device.
Frequently Asked Questions
Is my notebook uploaded anywhere?
No. The file is read by code running in this tab and nothing is sent anywhere, not even pictures the notebook links to on other sites. You can check it in your browser’s network panel: open a notebook and watch that no request leaves. Nothing is saved either; close the tab and it is gone.
Do I need Python or Jupyter installed?
No. A notebook stores the results of its last run, so reading it needs no Python at all. The code is shown but not run; the tables, charts and printed text are the ones the author saw when they saved it.
Why are some outputs a grey note instead of a chart?
Interactive outputs, such as ipywidgets sliders and some Plotly or Bokeh charts, are small programs that need a running kernel. A notebook often saves only the program, not a picture, so there is nothing to show without running it in Jupyter. When the notebook did save a still picture beside it, that picture is shown.
Can I open a notebook from a link?
Not in this version. Fetching a link would mean contacting another site for you, and most sites don’t let a page in your browser read their files anyway. Download the .ipynb first, then drop it here. For a notebook on GitHub, use the Download raw file button.
Which notebooks open?
Any .ipynb in the current format (nbformat 4), from Jupyter, JupyterLab, VS Code, Colab, Kaggle or Databricks exports, and older nbformat 3 files too. Large notebooks open as well: the cells are drawn as you reach them, and very long outputs show their first lines with a button to show the rest.
“Jupyter” is a trademark of Project Jupyter, used here only to say which files this viewer opens. Binary Decimal is not affiliated with or endorsed by Project Jupyter.