NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #576 most downloaded on PyPI
JupyterLab computational environment
Last release 13 days ago
21 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
607 releases · first in 2016
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
See the JupyterLab 2.1 milestone on GitHub for the full list of pull requests and issues closed.
See the JupyterLab 2.1 milestone on GitHub for the full list of pull requests and issues closed.
blacklist and whitelist support <extension_listings> for the
extension manager
(#7989)<img alt="The main JupyterLab toolbar with focus on the Restart Kernel and Run All Cells button." src="https://raw.githubusercontent.com/jupyterlab/jupyterlab/3.1.x/docs/source/getting_started/changelog_restartrunallbutton.png" class="jp-screenshot">
Added a context menu item for opening a Markdown editor from the Markdown preview (#7942)
Added a command to replace the selection in an editor with text (inserting if there is no selection). This can be assigned a keyboard shortcut, as shown below. We also added a command to go through a series of commands and run the first enabled command. (#7908) Here is a keyboard shortcut to insert text in a currently-active notebook editor:
{
command: "notebook:replace-selection",
selector: ".jp-Notebook",
keys: ["Ctrl L"],
args: {text: "lambda x: x"}
}
Here is a keyboard shortcut to insert text into an editor of the currently active console, file editor, or notebook:
{
command: "apputils:run-first-enabled",
selector: "body",
keys: ["Ctrl L"],
args: {
commands: [
"console:replace-selection",
"fileeditor:replace-selection",
"notebook:replace-selection",
],
args: {text: "lambda x: x"}
}
}
NotebookWidgetFactory is now a plugin so it can be overridden
(#8066,
#7996)LabIcon: work with all SVG loaders, improve
performance, fix issue with menus from extensions
(#8125)data-jp-suppress-context-menu attribute
(#7877,
#7670).yarnrc configuration with
the Python package
(#8045)Nothing published for this version
Nothing published for this version
Nothing published for this version
See the JupyterLab 2.0.2 milestone on GitHub for the full list of pull requests and issues closed.
See the JupyterLab 2.0.2 milestone on GitHub for the full list of pull requests and issues closed.
Nothing published for this version
Nothing published for this version
JupyterHub users should use the c.Spawner.default_url = '/lab' setting instead of the deprecated and now removed labhubapp
Here are some highlights for this release. See the JupyterLab 2.0 milestone on GitHub for the full list of pull requests and issues closed.
<img alt="Notebook cell tags in the left sidebar next to an open notebook." src="https://raw.githubusercontent.com/jupyterlab/jupyterlab/3.1.x/docs/source/getting_started/changelog_celltags.png" class="jp-screenshot">
<img alt="The file browser with a tooltip describing a notebook's info like the name, size, and kernel." src="https://raw.githubusercontent.com/jupyterlab/jupyterlab/3.1.x/docs/source/getting_started/changelog_fileinfo.png" class="jp-screenshot">
<img alt="A notebook with multiple cells and the cell output searching in the upper right." src="https://raw.githubusercontent.com/jupyterlab/jupyterlab/3.1.x/docs/source/getting_started/changelog_searchoutput.png" class="jp-screenshot">
Ctrl Shift . and Ctrl Shift , shortcuts move focus to the next
and previous tab bar in the main area, respectively
(#7673)
Shift Home and Shift End shortcuts in a notebook select all
cells from the current cell to the top or bottom of a notebook,
respectively
(#7177)
Explicit "No Kernel" button in the kernel selection dialog for new notebooks (#7647)
Notebook recordTiming advanced setting to control whether
execution timing information is stored in notebook files
(#7578)
"Select current running or last run cell" command added (requires
notebook recordTiming advanced setting to be set to true)
(#7551)
Codemirror lineWiseCopyCut advanced setting to control the
behavior of the copy/cut keyboard shortcuts when there is no
selection
(#7842)
Refreshed the command palette and property inspector sidebar icons and user interfaces (#7577, #7038, #7733, #7732, #7718, #7686)
"New File" and "New Markdown File" items in file browser context menu (#7483, #4280)
"Download" item in File menu (#7480)
"Restart Kernel and Run up to Selected Cell" item in notebook Kernel menu (#7789, #6746)
In extension manager, the "enable" button is now only shown for installed extensions (#7482)
Dialogs can now be closed by clicking outside of them (#7885, #3784)
documentsearch:startWithReplace command to open the document find
overlay with replace. There is not currently a default keyboard
shortcut for this, but one can be assigned as a custom keyboard
shortcut in Advanced Settings.
(#7725)
The JSON viewer now only displays structure hints for arrays and empty objects for a more streamlined feel (#7227)
Optional platform-aware keyboard shortcut fields linuxKeys,
macKeys, and winKeys in keyboard shortcut definitions
(#7589)
{
command: "application:toggle-mode",
selector: "body",
linuxKeys: ["Ctrl Shift M"], // only linux
macKeys: ["Cmd Shift Z"], // only mac
winKeys: ["Ctrl Shift B"], // only windows
keys: ["Accel Shift U"] // default shortcut
}
Added options for jupyter lab clean to clean specific parts of the
build, such as --extensions, --settings, --static, and --all
(#7583,
#6734)
Removed the vega 4 and vega-lite 2 renderers (vega 5 and vega-lite 4 is included in JupyterLab by default). These legacy renderers may be available via custom extensions (#7650, #7523, #7658)
JupyterHub users should use the c.Spawner.default_url = '/lab'
setting instead of the deprecated and now removed labhubapp
(#7724)
See extension_migration for help in
migrating extensions to JupyterLab 2.0.
@phosphor to @lumino dependencies.
(#7582,
#7534,
#7763,
#7762,
#7595)settingsregistry and statedb packages from
coreutils
(#7681,
#7615)ClientSession is renamed to SessionContext and
the IKernelConnection.connectToComm method is replaced with
IKernelConnection.createComm and IKernelConnection.hasComm
methods.
(#7252,
#7674,
#7820,
#7694,
#7690,
#7682)polling from coreutils in favor for @lumino/polling
(#7617)Running sidebar extension
(#6895,
#6876)codemirror, xterm.js,
markdown, fontawesome, etc.)
(#7590,
#7194,
#7326,
#6479,
#7769)ui-components
(#7588,
#6799)UseSignal example to the docs
(#7519)env prop to kernel options
(#7499)IPython.display
(#7215,
#6827)Shift Tab dedent shortcut works correctly in the file
editor
(#7865)app_dir when app_dir is ''
(#7268,
#7264)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Here are some highlights for this release. See the JupyterLab 1.2.0 milestone on GitHub for the full list of pull requests and issues closed.
Here are some highlights for this release. See the JupyterLab 1.2.0 milestone on GitHub for the full list of pull requests and issues closed.
Shift Home, to the bottom of the notebook with Shift End
(#7336,
#6783)max-old-space option to be specified outside of
JupyterLab
(#7317)registry configuration parameter to override the default
yarn repository when building
(#7363,
#7109,
#7249,
#7248)marked) to 0.7.0
(#7328)fileeditor-extension for modularization
(#6904)file-browser-path query parameter
(#7313)IPython.display
(#7231)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Here are some highlights of what is in this release. See the JupyterLab 1.1.0 milestone on GitHub for the full list of pull requests and issues closed
Here are some highlights of what is in this release. See the JupyterLab 1.1.0 milestone on GitHub for the full list of pull requests and issues closed.
jupyter lab build now has a --minimize=False option to build
without minimization to conserve memory and time
(#6907)noarch
package. If you are using JupyterLab with notebook
version 5.2 or earlier, you may need to manually enable the
JupyterLab server extension. See the issue for more details
(#7042)comm_info_request content to conform to the Jupyter message
specification in a backwards-compatible way
(#6949,
#6947)Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →