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
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
See the JupyterLab 1.0.0 milestone on GitHub for the full list of pull requests and issues closed in 1.0.0, and other 1.0.x milestones for bugs fixed
See the JupyterLab 1.0.0 milestone on GitHub for the full list of pull requests and issues closed in 1.0.0, and other 1.0.x milestones for bugs fixed in patch releases.
<img alt="A notebook with multiple cells and the find and replace interface in the upper right." src="https://raw.githubusercontent.com/jupyterlab/jupyterlab/3.1.x/docs/source/getting_started/find.png" class="jp-screenshot">
We have added first class support for find and replace across JupyterLab. It is currently supported in notebooks and text files and is extensible for other widgets who wish to support it. (#6350, #6322, #6301, #6282, #6256, #6241, #6237, #6159, #6081, #6155, #6094, #6024, #5937, #5795, #1074)
<img alt="A screenshot of the updated JupyterLab status bar." src="https://raw.githubusercontent.com/jupyterlab/jupyterlab/3.1.x/docs/source/getting_started/statusbar.png" class="jp-screenshot">
We have integrated the JupyterLab Status Bar package package into the core distribution. Extensions can add their own status to it as well (#5577, #5525 #5990, #5982, #5514, #5508, #5352).
@jupyterlab/hub-extension.
(#6451,
#6428)We now have a printing system that allows extensions to customize how documents and activities are printed. (#5850, #1314)
Alt+w
instead of Cmd/Ctrl+w to avoid conflicts with operating systems.
(#6486,
#6357)Accel instead of Ctrl so
they are more natural for Mac users
(#6447,
#5023)Ctrl+C and
Ctrl+V
(#6391,
#6385,
#1146).geojson files in JSON viewer
(#6349)CRLF line endings will properly be saved with the
same endings
(#5622,
#4464,
#3901,
#3706)Ctrl when dragging them in the
file browser
(#5584,
#3235)Ctrl Shift Q for
closing and cleaning up a file
(#5534,
#4390)dl, dt, dd) are improved to be
consistent with the nteract project
(#5682,
#2399)There are new settings for many following items, including:
--debug to
extension installing
(#6567,
#6499,
#5986)--all flag to labextension uninstall to remove all
extensions
(#6058,
#6006)JupyterLabPlugin to
JupyterFrontEndPlugin. The application arg is also renamed from
JupyterLab to JupyterFrontEnd and some its functionality has
been moved to a separate ILabShell plugin
(#5845,
#5919)addToMainArea, addToLeftArea, addToTopArea,
addToRightArea, and addToBottomArea functions have been replaced
with a single add() function that takes the area as an argument.
Replace addToMainArea(widget, options) with
add(widget, 'main', options), etc.
(#5845)pageUrl to appUrl in the server connection
(#6509,
#6508,
#6585,
#6584)MainAreaWidget instances now forward update requests to their
content
(#6586,
#6571)data-theme-light is now data-jp-theme-light.
(#6566,
#6554)style attribute in their package.json, and
JupyterLab will automatically import that CSS file.
(#6533,
#6530,
#6395,
#6390)Dialog.prompt has been replaced by a number of type-specific
dialogs such as InputDialog.getString, InputDialog.getBoolean,
etc. (#6522,
#6378,
#6327,
#6326)RenderMime widget is re-rendered, the default behavior is
to remove any existing content in the DOM. This can be overridden if
needed.
(#6513,
#6505,
#6497)ES2017. Extensions may need to upgrade their
TypeScript version and target as well.
(#6440,
#6224)connectionFailure signal has been added to some of the manager
classes, which can be used to detect when a connection to the server
is lost
(#6399,
#6176,
#3324)coreutils to use for
throttling and debouncing of API requests
(#6345,
#6346,
#6401,
#6305,
#6157,
#6192,
#6186,
#6141,
#3929,
#6141,
#3929,
#6186,
#6192,
#6401
,#6305,
#6157)contextMenuFirst to contextMenuHitTest in the
JupyterFrontEnd
(#5932)initialCommand arg from the terminal creation command.
(#5916)--jp-code-cursor-width0, --jp-code-cursor-width1, and
--jp-code-cursor-width2 variables to the themes to support
changing the cursor width if you change the font size
(#5898)JUPYTERLAB_xxx_LOADER Webpack loaders, instead
you should use the loader directly in the URL as Webpack supports it
(#5709,
#4406)@jupyterlab/ui-components package that contains
reusable React components to be used internally and in extensions.
Feel free to use this to create extension UIs with consistent styles
(#5538)showErrorMessage function now lets you customize the buttons
it uses
(#5513)ReactElementWidget you should switch
to using ReactWidget.
(#5479,
#5766,
#6595,
#6595)require('myfile.md') to get the content of
myfile.md as a string, you now should import it using
ES2015 import syntax, or use
require(\'myfile.md\').default.InstanceTracker to WidgetTracker
(#6569).app.shell.add(widget) or app.shell.add(widget, 'main'), see
here.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
See the JupyterLab 0.35.0 milestone on GitHub for the full list of pull requests and issues closed.
See the JupyterLab 0.35.0 milestone on GitHub for the full list of pull requests and issues closed.
enabled
metadata.
(#5401,
#1312)%20.
(#5383,
#5340,
#5153)jupyter lab clean on Windows.
(#5400,
#5397)jupyter lab build on NFS.
(#5237,
#5233)jupyterlab_server instead of
jupyterlab_launcher and fix the app example.
(#5316)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
Extensions marked as deprecated are no longer shown in the extension manager.
See the JupyterLab 0.34.0 milestone on GitHub for the full list of pull requests and issues closed.
|) character as a CSV delimiter option.File menu.Notebooks, consoles, and text files now have access to completions for local tokens. If a text file has a running kernel associated with its path (as happens with an attached console), it also gets completions and tooltips from that kernel. (#5049)
The FileBrowser widget has a new constructor option
refreshInterval, allowing the creator to customize how often the
widget polls the storage backend. This can be useful to prevent
rate-limiting in certain contexts.
(#5048)
The application shell now gets a pair of CSS data attributes indicating the current theme, and whether it is light or dark. Extension authors can write CSS rules targeting these to have their extension UI elements respond to the application theme. For instance, to write a rule targeting whether the theme is overall light or dark, you can use
[data-theme-light='true'] your-ui-class {
background-color: white;
}
[data-theme-light='false'] your-ui-class {
background-color: black;
}
The theme name can also be targeted by writing CSS rules for
data-theme-name.
(#5078)
The IThemeManager interface now exposes a signal for
themeChanged, allowing extension authors to react to changes in
the theme. Theme extensions must also provide a new boolean property
isLight, declaring whether they are broadly light colored. This
data allows third-party extensions to react better to the active
application theme.
(#5078)
Added a patch to update the uploads for each FileBrowserModel
instantly whenever a file upload errors. Previously, the upload that
erred was only being removed from uploads upon an update. This would
allow the status bar component and other extensions that use the
FileBrowserModel to be more precise.
(#5077)
Cell IDs are now passed in the shell message as part of the cell metadata when a cell is executed. This helps in developing reactive kernels. (#5033)
The IDs of all deleted cells since the last run cell are now passed
as part of the cell metadata on execution. The IDs of deleted cells
since the last run cell are stored as deletedCells in
NotebookModel. This helps in developing reactive kernels.
(#5037)
The ToolbarButton in apputils has been refactored with an API
change and now uses a React component ToolbarButtonComponent to
render its children. It is now a div with a single button child,
which in turn as two span elements for an icon and text label.
Extensions that were using the className options should rename it
as iconClassName. The className options still exists, but it
used as the CSS class on the button element itself. The API
changes were done to accommodate styling changes to the button.
(#5117)
The Toolbar.createFromCommand function has been replaced by a
dedicated ToolbarButton subclass called CommandToolbarButton,
that wraps a similarly named React component.
(#5117)
The design and styling of the right and left sidebars tabs has been
improved to address
#5054. We are
now using icons to render tabs for the extensions we ship with
JupyterLab and extension authors are encouraged to do the same (text
labels still work). Icon based tabs can be used by removing
widget.caption and adding
widget.iconClass = '<youriconclass> jp-SideBar-tabIcon';.
(#5117)
The style of buttons in JupyterLab has been updated to a borderless design. (#5117)
A new series of helper CSS classes for styling SVG-based icons at
different sizes has been added: jp-Icon, jp-Icon-16,
jp-Icon-18, jp-Icon-20.
The rank of the default sidebar widget has been updated. The main
change is giving the extension manager a rank of 1000 so that it
appears at the end of the default items.
Python 3.5+ is now required to use JupyterLab. Python 2 kernels can still be run within JupyterLab. (#5119)
JupyterLab now uses yarn 1.9.4 (aliased as jlpm), which now
allows uses to use Node 10+.
(#5121)
Clean up handling of baseUrl and wsURL for PageConfig and
ServerConnection.
(#5111)
|) character as a CSV delimiter option.
(#5112)Open From Path... to top level File menu.
(#5108)saveState signal to the document context object.
(#5096)deprecated are no longer shown in the
extension manager.
(#5058)In and Out text from cell prompts. Shrunk the prompt
width from 90px to 64px. In the light theme, set the prompt colors
of executed console cells to active prompt colors and reduced their
opacity to 0.5. In the dark theme, set the prompt colors of executed
console cells to active prompt colors and set their opacity to 1.
(#5097 and
#5130)npmjs.com.
(#5075)running panel now shows the running sessions at startup.
(#5118)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
Your coding agent can read these notes before it upgrades. Set up the MCP server →