notebook lens
JetBrains Marketplaceplugin 33811free viewer, Pro subscription
Install from the JetBrains Marketplacefree to read; the Pro trial runs 30 days
The kernel is dead; the outputs are not. They read as they were saved, with no code run, and a 175 MB notebook of 9,000 cells opens in about a second.
Notebook Lens reads a Jupyter notebook as a document in IntelliJ IDEA and the other JetBrains IDEs, with no kernel behind it, and it needs nothing else installed before it works. It indexes where each cell begins rather than loading the file whole, so a 175 MB notebook with 9,000 cells, images and long outputs is open in about a second, and Go to cell lands on cell 9,000 directly. Outputs appear as they were saved, and no code runs while you read. With Pro you can compare two notebooks with the outputs left out, search every cell in one pass, and export the source to .py or Markdown, or the whole notebook to one HTML page.
- opens
- .ipynb notebooks; a legacy nbformat 3 file is named, with the exact convert command
- runs on
- IntelliJ IDEA, GoLand, Android Studio, PyCharm, WebStorm, Rider and every JetBrains IDE from 2024.2 on
- store
- JetBrains Marketplace, plugin 33811
- newest version
- 1.3.1, published 2026-10-27
- pro
- a subscription with its own 30-day trial; the price is quoted below as the store shows it

free
- Rendered cells: markdown with headings, lists, quotes and links, colored code, and outputs the way a notebook shows them: result text, stream logs, tracebacks in their ANSI colors, inline images
- Any size: one streaming pass indexes where every cell sits; pages are read on demand and memory stays flat
- Read-only by default: Edit is off on every open; while cells are staged the strip reads "Edit mode ยท 2 cells edited", and nothing is written until you click Save (Pro)
- Navigation that scales: an outline rail, next and previous code or markdown cell, a go-to-cell that lands exactly
- Find in the current cell, with the match line reported
- Copy a cell: right-click to copy its source, its output or both, the whole cell and not just the visible lines
- Honest errors: a truncated file names the byte where it breaks; a legacy nbformat 3 notebook gets the exact convert command, in the panel, never a dialog
- Beside the IDE's own support: where the IDE's Jupyter support is installed it keeps the file, and the Notebook Lens tab sits beside it; the plain text editor stays open as a second tab
- Themes: eight looks for the chrome around each cell; trying one is free for the open window
pro
- Saving cell edits: Review shows each edited cell's source before and after. Save (Pro) rewrites those sources in the notebook's own layout and leaves the outputs, the ids and the metadata as they were; tick "Keep a copy of the file before saving" and a copy named like analysis.ipynb.bak-20261027-154210 goes beside it first. The balloon reads "Saved: 2 cells changed", and Undo last save (Pro) puts the cells back until the file is closed or reloaded
- Notebook diff without the noise: cell type and source only, outputs and execution counts ignored by design; exact added, removed and changed counts with drill-in, and id-aware matching so a moved cell is not a change
- Export source: to .py in the percent format, or to Markdown with fenced code, outputs stripped and counts exact
- Export to HTML: the notebook with its outputs and images in one page that opens offline
- Search every cell: one streaming scan over sources and outputs, with a hit list that jumps to the match
- Kept themes: a chosen look stays set from notebook to notebook
A notebook file is JSON underneath, and the parser that reads it is our own, with no third-party reader behind it.
price, as the store shows it
The viewer is free and stays free. Pro is a subscription for this plugin: USD 2.90 a month or USD 29 a year for individual use. For organizations it is, per user, USD 5.80 a month or USD 58 a year.
where it stops
- No execution and no kernels; a cell's source can be changed, and its outputs stay as the last run printed them, under the mark "outputs from the previous run"
- Markdown tables and LaTeX appear as source rather than rendered wrongly
- nbformat 3 files are named, not half-read

what's new
- 1.3.1published 2026-10-27
The 1.3.0 cut, uploaded a second time; nothing in the plugin changed.
- 1.2.9published 2026-10-25
A markdown paragraph with two underscores in it, such as inline math ($L_{train}$ and $L_{val}$) or two snake_case names (user_id and order_id), lost both underscores and showed the text between them in italics, in the viewer and in the exported HTML page. Both now show as written. Math between dollar signs, \( \) or \[ \] keeps its source, and a line starting \begin{ shows as LaTeX source the way a $$ block does. Any other backslash before a punctuation mark shows the mark, and text in __double underscores__ is bold, as Jupyter shows them.
- 1.2.8published 2026-10-22
An execution count past what a 64-bit number holds reads "Number too long" in the viewer, where 1.2.7 raised an IDE error. A notebook that shrinks or changes on disk while it is open no longer raises an error: a search over it ends with "Search stopped - nothing was listed." and the reason, and an export of it fails with that reason and leaves no file, where the export wrote the cells it could still read. An empty file reads "Not a notebook: the file is empty (0 bytes)." A notebook saved as UTF-16 says so and asks to save it as UTF-8. A JSON Lines file opened as a notebook is named as one. Overlong UTF-8 shows as the replacement character. An nbformat number past the int range reads as unknown instead of as its low bits.
more
Pricing, invoices and licensing questions go to sales@twilightventures.dev; anything else about the product to support@twilightventures.dev.