Nothing uploaded
The notebook is parsed, laid out and rasterised in the tab. There is no conversion endpoint to send it to.
About
This site converts a Jupyter notebook into a PDF without uploading it and without asking you to install anything. Here is what that means in practice, and how the conversion is put together.
The notebook is parsed, laid out and rasterised in the tab. There is no conversion endpoint to send it to.
No sign-up, no quota, no limits to lift. Open the page and convert as many notebooks as you like.
The PDF carries the notebook name and page numbers — never a logo, a badge or a nag over your work.
No analytics script, no advertising pixel, no session recorder. Nothing observes how the tool is used.
Turning a notebook into a PDF normally means installing something. jupyter nbconvert --to pdf expects pandoc plus a full TeX distribution — TeX Live, MacTeX or MiKTeX — and stops with "xelatex not found" when they are missing. The hosted alternatives accept a file, upload it to a server and hand back a download, which is fine until the notebook is client work under an NDA or a dataset you are not allowed to move.
This site was built to remove both requirements at once: nothing to install, and nothing to upload.
A static website. It has no application server, no conversion endpoint and no database. The converter is a JavaScript bundle the browser downloads once with the page; every conversion after that happens in the tab you are already reading this in.
That is also why there is no sign-up, no queue and no file-size paywall. There is no infrastructure per conversion to pay for, so there is nothing to meter.
The notebook is read from disk with the browser File API and parsed as JSON — nbformat 4, plus the older nbformat 3 files that keep their cells under worksheets. Markdown is rendered with marked and sanitised with DOMPurify, syntax colouring comes from highlight.js, LaTeX is typeset with KaTeX, and images stored as notebook attachments are decoded from base64.
Each rendered block is measured in a hidden copy of the document, then rasterised with html2canvas-pro and assembled onto pages with jsPDF. Print to PDF takes the other route: the same laid-out document is handed to the browser print pipeline, which keeps the text selectable and searchable.
No upload endpoint, no account system, no server-side renderer, no analytics, no advertising and no watermark on the output. Every one of those would have been straightforward to add, and every one of them would have brought a reason to store something about you or your notebook.
Students handing in problem sets, analysts sharing a result with people who do not run Jupyter, engineers attaching a report to a ticket, teachers handing out worked examples as pages rather than as a link to a live kernel.
The only assumption the tool makes is that you want the notebook to read like a document: code, plots and tables on pages that break where the content says they should.
Jupyter, JupyterLab, Google Colab, Kaggle, Deepnote and Visual Studio Code are trademarks of their respective owners. This site is independent and is not affiliated with, endorsed by or sponsored by Project Jupyter or by any notebook vendor named on it.
The site is free to use and carries no advertising. It costs one static hosting bill, which the people who run it cover, and there is no premium tier waiting to be unlocked and no paid feature held back from the free one.
Questions, bug reports and corrections are all welcome. The contact page explains which details make a report actionable — and why you never need to send the notebook itself.
Choose a notebook and the PDF is usually ready before you finish reading the progress line.