nbclassic
Jupyter Notebook as a Jupyter Server extension.
What it is and what it does
nbclassic bridges the gap between the classic Jupyter Notebook and the modern Jupyter ecosystem. It runs the traditional notebook interface as a Jupyter Server extension, preserving the familiar UI and URL namespace (`/nbclassic/`) so you can keep using classic extensions and customizations that may not yet work with newer frontends. The package depends on ipykernel, ipython-genutils, nest-asyncio, and notebook-shim to provide kernel communication and async handling.
You install it alongside Jupyter Server and can launch it with `jupyter nbclassic` or access it through the main Jupyter Server. This lets you upgrade to the latest Jupyter infrastructure without immediately breaking your existing notebook workflows, custom extensions, or theme customizations—you can run the classic interface, JupyterLab, and Notebook 7 all in the same installation.
Use it for:
- Migrate to modern Jupyter Server infrastructure while keeping classic notebook extensions working.
- Run the familiar classic notebook UI for users who prefer it over JupyterLab or Notebook 7.
- Preserve custom CSS, JavaScript, and notebook extensions that haven't been ported to new frontends.
- Maintain backwards compatibility during a gradual transition from classic Notebook to newer interfaces.
- Coexist with JupyterLab in a single Jupyter installation for teams with mixed preferences.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Provides the classic Jupyter Notebook interface as a Jupyter Server extension, allowing you to run the traditional notebook UI alongside modern frontends like JupyterLab.
Yes, if you rely on classic Jupyter Notebook extensions or customizations and need to upgrade to modern Jupyter Server. The package is actively maintained, has low install friction, and is widely used (top 5000 on PyPI). Install it when you want to defer rewriting extensions or when your team needs the classic interface alongside newer frontends.
Install
nbclassic on PyPI
pip
pip install nbclassicuv
uv add nbclassicpoetry
poetry add nbclassicInstalling nbclassic
Before you install
Low install friction with a pure Python wheel distribution. Actively maintained as of June 2026 with recent commits, and supported on current Python versions (3.9–3.13).
License in practice
BSD 3-Clause License permits commercial and private use with minimal restrictions; you must retain copyright notice and disclaimer in source distributions.
Quickstart
pip install nbclassic
jupyter nbclassic
Requires Jupyter Server to be installed; nbclassic runs as an extension on top of it.
Verify before relying
- Whether existing classic notebook extensions are fully compatible without modification.
- Performance characteristics compared to Notebook 7 or JupyterLab on the same system.
- Scope of customizations that will continue to work unchanged from classic Notebook.
Package facts
| License | BSD 3-Clause License Copyright (c) 2020 Project Jupyter Contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that… (full text in the JSON record) (permissive) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 4 — ipykernel, ipython-genutils, nest-asyncio, notebook-shim |
| Maintenance | actively maintained — 332 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 6,497,028/month — #1,899 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: nbclassic-1.3.3-py3-none-any.whl
Keywords: interactive, interpreter, ipython, jupyter, shell, web
Tags
More Dynamic Content packages
MarkupSafe provides a text object that escapes…
permissive · top 100 on PyPI
Jinja2Jinja2 is a templating engine that renders…
permissive · top 100 on PyPI
soupsieveSoupsieve is a CSS selector library designed to…
permissive · top 100 on PyPI
WerkzeugWerkzeug is a WSGI utility library providing…
permissive · top 1,000 on PyPI
FlaskFlask is a lightweight WSGI web application…
permissive · top 1,000 on PyPI
MakoMako compiles Python-embedded templates into…
permissive · top 1,000 on PyPI
jupyter-collaboration-uiAdds real-time collaboration UI elements to…
permissive · top 15,000 on PyPI
notebook-shimProvides a compatibility layer that allows…
permissive · top 1,000 on PyPI
notebookJupyter Notebook is a web-based interactive…
permissive · top 1,000 on PyPI
jupyter-server-documentsA JupyterLab extension that moves document…
permissive · top 15,000 on PyPI
jupyterlab-widgetsEnables Jupyter/IPython widgets to render and…
permissive · top 1,000 on PyPI
jupyterlabJupyterLab is an extensible web-based…
permissive · top 1,000 on PyPI
widgetsnbextensionProvides the JavaScript frontend and…
permissive · top 1,000 on PyPI
jupyter-collaborationAdds real-time collaborative editing to…
permissive · top 15,000 on PyPI
jupyterlab_notebook_awarenessA JupyterLab extension that tracks which…
permissive · top 15,000 on PyPI
pyviz-commsProvides bidirectional communication between…
permissive · top 5,000 on PyPI