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
See the JupyterLab 0.33.0 milestone on GitHub for the full list of pull requests and issues closed.
See the JupyterLab 0.33.0 milestone on GitHub for the full list of pull requests and issues closed.
In JupyterLab 0.33, we removed the "Beta" label to better signal that JupyterLab is ready for users to use on a daily basis. The extension developer API is still being stabilized. See the release blog post for details. (#4898, #4920)
We added new workspace support, which enables you to have multiple saved
layouts, including in different browser windows. See the
workspace documentation for more details.
(#4502,
#4708,
#4088,
#4041
#3673,
#4780)
Ctrl/Cmd Shift ') to toggle between the previously active tabs in
the main area.
(#4296)collapsed, scrolled, jupyter.source_hidden and
jupyter.outputs_hidden notebook cell metadata when opening.
collapsed and jupyter.outputs_hidden are redundant and the
initial collapsed state is the union of both of them. When the state
is persisted, if an output is collapsed, both will be written with
the value true, and if it is not, both will not be written.
(#3981)Ctrl/Cmd Shift S.
(#4560)Ctrl/Cmd Shift Enter.
(#4558)Enter or
Shift Enter as a Console setting.
(#4054)"Notebook" added to the command palette to open a new notebook. (#4812)
"Run Selected Text or Current Line in Console" added to the command
palette to run the selected text or current line from a notebook in
a console. A default keyboard shortcut for this command is not yet
provided, but can be added by users with the
notebook:run-in-console command. To add a keyboard shortcut
Ctrl G for this command, use the "Settings" | "Advanced Settings
Editor" menu item to open the "Keyboard Shortcuts" advanced
settings, and add the following JSON in the shortcut JSON object in
the User Overrides pane (adjust the actual keyboard shortcut if you
wish).
(#3453,
#4206,
#4330)
{
"command": "notebook:run-in-console",
"keys": ["Ctrl G"],
"selector": ".jp-Notebook.jp-mod-editMode"
}
The command palette now renders labels, toggled state, and keyboard shortcuts in a more consistent and correct way. (#4533, #4510)
kbd, sup, and sub.
(#4618).tsv file extension as tab-separated
files.
(#4684)anyMessage signal for observing any message a kernel sends
or receives.
(#4437)addGroup now
returns an IDisposable which can be used to remove the group.
removeGroup has been removed.
(#4890)Launcher now uses commands from the application
CommandRegistry to launch new activities. Extension authors that
add items to the launcher will need to update them to use commands.
(#4757)addToBottomArea function in the
application, allowing extension authors to add bottom panel items
like status bars.
(#4752)jupyterlab_server and make
them available in @jupyterlab/services.
(#4841)IInstanceTracker which tracks them. Include the token
IMimeDocumentTracker in your plugin to access this. The
IInstanceTracker interface has also gained convenience functions
find and filter to simplify iterating over instances.
(#4762)getNotebookVersion is added to the PageConfig object.
(#4224)kernelChanged signal now contains both the old kernel
and the new kernel to make it easy to unregister things from the old
kernel.
(#4834)connectTo functions for connecting to kernels and sessions are
now synchronous (returning a connection immediately rather than a
promise). The DefaultSession clone and update methods are also
synchronous now.
(#4725)anyMessage signal
is emitted synchronously when a message is received before
asynchronous message handling, and the iopubMessage and
unhandledMessage signals are emitted during asynchronous message
handling. These changes mean that the comm onMsg and onClose
handlers and the kernel future onReply, onIOPub, and onStdin
handlers, as well as the comm target and message hook handlers, may
be asynchronous and return promises.
(#4697)removeCommTarget and removeMessageHook, instead of using
disposables. The corresponding registerCommTarget and
registerMessageHook functions now return nothing.
(#4697)connectToComm function is synchronous, and now returns
the comm rather than a promise to the comm.
(#4697)KernelFutureHandler class expectShell constructor argument
is renamed to expectReply.
(#4697)done returned promise now resolves to undefined
if there is no reply message.
(#4697)IDisplayDataMsg is updated to have the optional transient
key, and a new IUpdateDisplayDataMsg type was added for update
display messages.
(#4697)uuid function from @jupyterlab/coreutils is removed. Instead
import UUID from @phosphor/coreutils and use UUID.uuid4() .
(#4604)MainAreaWidget class which provides a content area
(.content) and a toolbar (.toolbar), consistent focus handling
and activation behavior, and a spinner displayed until the given
reveal promise is resolved. Document widgets, like the notebook
and text editor and other documents opened from the document
manager, implement the IDocumentWidget interface (instead of
DocumentRegistry.IReadyWidget), which builds on MainAreaWidget
and adds a .context attribute for the document context and makes
dirty handling consistent. Extension authors may consider inheriting
from the MainAreaWidget or DocumentWidget class for consistency.
Several effects from these changes are noted below.
(#3499,
#4453)
.notebook attribute is renamed to
.content..content of a DocumentWidget, so
the top-level editor widget has a toolbar and the editor itself
is widget.content.editor rather than just widget.editor.MimeContent widget embedded inside of a
DocumentWidget now.revealed
promise which resolves when the widget has been revealed (i.e.,
the spinner has been removed). This should be used instead of
the ready promise.Changes in the JupyterLab code infrastructure include:
esModuleInterop flag to enable more natural imports from
non-es2015 JavaScript modules. With the update to ES2015 output,
code generated from async/await syntax became much more manageable,
so we have started to use async/await liberally throughout the
codebase, especially in tests. Because we use Typedoc for API
documentation, we still use syntax compatible with TypeScript 2.7
where Typedoc is used. Extension authors may have some minor
compatibility updates to make. If you are writing an extension in
TypeScript, we recommend updating to TypeScript 2.9 and targeting
ES2015 output as well.
(#4462,
#4675,
#4714,
#4797)jupyterlab_server.
(#4696)IDrives.
(#4613)require.ensure in vega4-extension to lazily load
vega-embed and its dependencies on first render.
(#4706)One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
This is the second in the JupyterLab Beta series of releases. It contains many enhancements, bugfixes, and refinements, including:
This is the second in the JupyterLab Beta series of releases. It contains many enhancements, bugfixes, and refinements, including:
@jupyterlab/services is now at version 2.0!) (#4115).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
Add a /tree handler and Copy Shareable Link to file listing right click menu: https://github.com/jupyterlab/jupyterlab/pull/3396
/tree handler and Copy Shareable Link to file listing right click menu: https://github.com/jupyterlab/jupyterlab/pull/3396Nothing 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
Semantic menus: https://github.com/jupyterlab/jupyterlab/pull/3182
jupyter labextension install is now the recommended way to install a local directory. Local directories are considered linked to the application. cf https://github.com/jupyterlab/jupyterlab/pull/3182--core-mode and --dev-mode are now semantically different. --core-mode is a version of JupyterLab using released JavaScript packages and is what we ship in the Python package. --dev-mode is for unreleased JavaScript and shows the red banner at the top of the page. https://github.com/jupyterlab/jupyterlab/pull/3270Semantic menus: jupyterlab/jupyterlab#3182
Settings editor now allows comments and provides setting validation: jupyterlab/jupyterlab#3167
Switch to Yarn as the package manager: jupyterlab/jupyterlab#3182
Support for carriage return in outputs: #2761
Upgrade to TypeScript 2.6: jupyterlab/jupyterlab#3288
Cleanup of the build, packaging, and extension systems. jupyter labextension install is now the recommended way to install a local directory. Local directories are considered linked to the application. cf jupyterlab/jupyterlab#3182
--core-mode and --dev-mode are now semantically different. --core-mode is a version of JupyterLab using released JavaScript packages and is what we ship in the Python package. --dev-mode is for unreleased JavaScript and shows the red banner at the top of the page. jupyterlab/jupyterlab#3270
Nothing published for this version
Nothing published for this version
Bug fix for file browser right click handling. https://github.com/jupyterlab/jupyterlab/issues/3019
Bug fix for file browser right click handling. https://github.com/jupyterlab/jupyterlab/issues/3019
Bug fix for file browser right click handling. https://github.com/jupyterlab/jupyterlab/issues/3019
Bug fix for file browser right click handling. jupyterlab/jupyterlab#3019
Nothing published for this version
Create new view of cell in cell context menu. #3159
VDomRenderer class. #3133Nothing 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
This release generally focuses on developer and extension author enhancements and general bug fixes.
This release generally focuses on developer and extension author enhancements and general bug fixes.
name -> id and new naming convention). #3078jupyter lab --watch mode for extension authors. #3077Nothing 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
Your coding agent can read these notes before it upgrades. Set up the MCP server →