@jupyterlab/codeeditor
A JupyterLab package which defines an abstract interface to a code editor, which is used in many places in the application, including cells and the file editor.
JupyterLab - Abstract Code Editor
A JupyterLab package which defines an abstract interface to a code editor, which is used in many places in the application, including cells and the file editor.
(changelog)=
JupyterLab 4.5 includes a number of new features (described below), bug fixes, and enhancements. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are encouraged to consult the Extension Migration Guide which lists deprecations and changes to the public API.
The default windowing mode is now contentVisibility which improves cell rendering and
alleviates previously reported issues. The minimap can be enabled for all windowing modes
and all notebooks via the Settings menu, or by toggling the minimap per notebook with
the View -> Show Minimap option. Additional fixes improve layout containment and
scrollbar behavior when working with long cells.
Saving large notebooks is now faster and more responsive thanks to streamed uploads
and users can now open notebooks without starting a kernel, via the Open With
context menu option.

Markdown support has been expanded for using grid and flex based layouts and the Table of Contents has been significantly improved to better handle markdown headings, fixing issues with HTML tags, comments, and horizontal lines.
Copying and pasting cells across browser tabs is now supported and the "Line Wrap" toggle in settings now correctly applies line wrapping to cells.
Other improvements include: restored scrolling to in-notebook links, manual saving support in collaborative mode, and improved performance and memory usage when streaming text outputs.
The debugger's evaluate dialog has been replaced with an interactive console with syntax highlighting and code completion, and the variables panel now preserves its contents when switching editors. Selected breakpoints are now visually highlighted and breakpoints correctly handle empty lines and duplicate clicks. A visual indicator is displayed when the debugger is paused.
Debugger panels as well as console debugging panels now reference the cell execution count helping users relate breakpoints, call stacks and source code to the cells they originate from.

For the Log Console, users can now configure the default log level via settings, as well as customise the toolbar.
The terminal now includes search functionality, with search highlights that adapt to theme changes.

JupyterLab now includes built-in audio and video viewers, allowing users to open audio and video files directly from within JupyterLab.

Uploaded files can auto-open, with controls for size limits and behavior, and
a new allowFileUploads setting provides control over upload permissions.
There is now a menu option for creating new Python, R, or Julia files,
and a “Select All” command has also been added, also accessible via the
Ctrl + A keyboard shortcut.
Users can now configure file browser breadcrumbs through the settings editor
options breadcrumbsLeftItems and breadcrumbsRightItems.

Updates to file dialogs and navigation have addressed column spacing, preferred-directory handling and double-click behavior.
Code fold and unfold commands have been added and shortcuts for these can be set in the settings editor.
The “Show Workspace Indicator” command has been added to the command palette and the “Send Code to Console” shortcut has been restored. The previous issue involving editing shortcuts on Safari loosing focus, has been resolved.
The settings editor now supports a toSkip configuration to hide
specific plugins from view.
A new setting, addExtraLineOnCellMerge, allows to remove the extra line added
when merging cells, which is expected behavior based on the classic notebook.
JupyterLab can now automatically switch between light and dark themes when “Synchronize with System Settings” is enabled.
Dialog components display buttons and checkboxes on separate lines for better readability, and selections in the terminal under high-contrast themes have better visibility.
Keyboard navigation and tab order in the status bar has also been improved.
JupyterLab 4.4 includes a number of new features (described below), bug fixes, and enhancements. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are encouraged to consult the Extension Migration Guide which lists deprecations and changes to the public API.
The code console prompt can now be positioned on the top, left, or right side of the console, in addition to the default bottom placement. The placement is persisted in the Prompt Cell Position setting.
The console toolbar now includes buttons to:
Additional settings for console behavior have been added:
Toggling all the three new settings transforms the console into an interactive editor resembling an ephemeral notebook with a single cell.
Settings can now be exported to overrides.json from the Settings Editor,
which can be used to pre-configure defaults in deployments or to restore settings.
An opt-in workspace indicator is displayed on the top bar (next to the menu bar). It can be enabled in the Settings → View → Appearance → Show Workspace Indicator.
RTC: driveReal time collaboration in previous versions of JupyterLab
(which can be enabled by installing jupyter-collaboration package)
was implemented by swapping the default JupyterLab file system
drive to a collaborative drive with the RTC: prefix.
This approach was incompatible with multiple extensions.
JupyterLab 4.4 introduces the Content Providers API, which allows the next version of jupyter-collaboration to work without changing the drive prefix.
This improves compatibility with extensions that do not support arbitrary drives.
Kernel subshells, introduced in JEP 91, enable concurrent code execution in kernels that support them. When performing long-running computations (such as training a model), subshells enable users to:
ipywidgets with updates displayed immediatelySubshells are supported by ipykernel 7 (currently in alpha).
To create a subshell, open context menu (right-click) over a notebook using a kernel supporting subshells and select "New Subshell Console for Notebook". A new console panel will open allowing access to variables from the main session.
JupyterLab can automatically create subshells for comm messages if kernels support this feature.
This enables concurrent execution of ipywidgets callbacks without requiring a user action.
This behavior can be changed from the settings, with options to:
ipywidgets)The context menu, available under right mouse click in browsers, can now be disabled globally
by toggling the Enable Context Menu option available in the Command Palette,
or via the JSON Settings Editor in the Application Context Menu.
The terminals counter no longer appears in the status bar if no terminals are open.
The kernels counter can be disabled by toggling the "Show the status bar item" setting
in "Running Terminals and Kernels" (code name showStatusBarItem).
JupyterLab 4.3 includes a number of new features (described below), bug fixes, and enhancements. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the Extension Migration Guide which lists deprecations and changes to the public API.
The virtual scrollbar now acts as a minimap and exposes information on whether a cell:
[*]), idle ([ ]) or was already run (e.g. [1])[ ]/[*]/[1] for code, nothing for markdown)
To enable the minimap, click on the hamburger icon (≡) which appears in the notebook's toolbar. If you do not see the hamburger icon, go to Settings → Notebook → Windowing mode and choose "full".
JupyterLab now offers two ways to toggle the full screen mode from within the application:
View → Appearance → Fullscreen Mode menu entryThe file browser now:
JupyterLab 4.2 added the option for extensions to implement server-side execution, which preserves outputs created when the browser window is closed or disconnected. The server-side execution builds on the same shared models API as the real-time collaboration (RTC).
This release includes additional work, improving both the server-side execution and real-time collaboration (RTC) use cases:
[*]) is now synchronized in the model, allowing collaborators to see that a cell is executed, and allowing server-side execution extensions to populate the state accordingly,You can try these features by installing extensions:
jupyter-server-nbmodel* provides server-side execution for jupyter-server,jupyter-collaboration provides the real-time collaboration features,jupyverse is an alternative server (a replacement for jupyter-server) which supports server-side execution.* while jupyter-server-nbmodel is developed by maintainers of JupyterLab, as of the JupyterLab 4.3.0 release date it is not an official Project Jupyter extension.
The previous release enabled connecting to external kernels, such as those spawned by a third-party application like Blender. In this release the kernel selector dialog was improved to also show the external kernels.
The previous release improved the awareness of the kernel/kernel specification distinction by providing both tree and list view in the kernels sidebar panel, but only the tree view featured the kernel identifiers. In this release both the list and tree view show the kernel identifier stub.
A new toolbar button was added in the kernel allowing to shut down unused kernels (kernels with no widget attached).
The following dialog windows can now be dismissed or silenced:
skipKernelRestartDialog),
It is now possible to switch and manage workspaces from within JupyterLab.
The jupyterlab-recents extension was integrated into JupyterLab.
Users are now able to:
re-open recently used files from the main menu:
re-open recently closed files from the sidebar:
quickly jump to open tabs/recently closed files by using a new searchable modal dialog (press <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>A</kbd> to open the dialog, or click on the [↗] icon in the sidebar):
Notebooks in the full windowing mode only render the visible cells, significantly improving the performance of the application. One limitation of full mode is that the search function in your browser may produce false negatives; using the JupyterLab search function is recommended. To revert to the behaviour from JupyterLab 4.1, go to Settings → Settings Editor → Notebook, scroll to "Windowing mode", and choose defer.
Among the numerous improvements and bug fixes for the keyboard shortcuts editor:
A new theme, JupyterLab Dark High Contrast, which is intended to benefit users with the need for higher contrast, following the WCAG AAA accessibility standard for color contrast. To select this theme, from the menu bar, choose Settings → Theme → JupyterLab Dark High Contrast. Please provide feedback and suggestions on further improvements to this theme.
Following feedback from users, implementation of certain shortcuts was moved from the CodeMirror editor to JupyterLab shortcut system, allowing for better integration:
JupyterLab 4.1 includes a number of new features (described below), bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the Extension Migration Guide which lists deprecations and changes to the public API.
JupyterLab now supports automatic loading of custom CSS. Themes are the recommended way for customizing the JupyterLab look and feel, while custom CSS is intended for minor personal adjustments.
To opt in, start JupyterLab with the --custom-css flag.
The location of the custom.css file is documented in the section on customizing the user interface.
`custom.css` is also available in Jupyter Notebook;
while similar selectors can be used for components shared between JupyterLab 4.1 and Jupyter Notebook 7.0,
there was a different set of selectors in Notebook 6 and older versions.
Users with the custom CSS file using the selectors from legacy Notebook versions
will need to update them and note that tutorials may refer to the selectors for the old Notebook versions.Matching GitHub-Flavoured Markdown, JupyterLab 4.1 now supports Mermaid diagrams.
To create a mermaid diagram use the mermaid language specifier for a code block in a markdown cell or document, for example:
```mermaid
flowchart LR
A[Hard] -->|Text| B(Round)
B --> C{Decision}
C -->|One| D[Result 1]
C -->|Two| E[Result 2]
```which renders as:
JupyterLab now supports completion presented as ghost text in the cell and file editors,
allowing generative AI models to provide multi-line completions.
The suggestions are provided by plugins implementing the IInlineCompletionProvider API;
by default a single provider which uses kernel history is available.
The suggestions can be invoked as-you-type or manually using a configurable shortcut (by default <kbd>Alt</kbd> + <kbd>\</kbd>). The default keyboard shortcuts are displayed in the small widget shown when hovering over the ghost suggestion:
To enable the inline suggestions based on the kernel history, go to Settings → Inline Completer → History provider → check the "enabled" checkbox.
In addition to the built-in history suggestions,
the jupyter-ai extension can provide
suggestions from supported models.
The jupyter-ai integration with inline completer is available starting with the
v2.10.0 release.
The Inline Completer API is still considered experimental and may be subject to changes, please share feedback!
Numerous improvements to keyboard navigation with focus on accessibility and usability are included in this release:
For more details, see this post on the Jupyter Blog.
The code from previously executed cells can be used to populate empty cells, allowing to iterate on code from previous cells or even previous sessions (depending on how a specific kernel stores history).
To cycle between history items, press <kbd>Alt</kbd> + <kbd>Arrow Up</kbd> and <kbd>Alt</kbd> + <kbd>Arrow Down</kbd>.
To enable execution history, go to Settings → Notebook → check the "Kernel history access" checkbox.
This feature was already available in the console in previous releases; it only works with kernels supporting execution history requests. To clear the execution history, consult the documentation of the kernel you are using (e.g., IPython/ipykernel).
Paths to code files detected in tracebacks returned by kernels on execution error are now turned into links. These links will open the corresponding file for editing, if it is in the Jupyter root directory, or they will open a read-only preview if the file is outside of the root directory and the active kernel supports the debugger.
When a cell fails during execution, an error indicator will be displayed by the corresponding heading, increasing awareness of the notebook state and enabling users to quickly navigate to the cell which requires attention.
Individual plugins can now be disabled or enabled from a new Plugin Manager user interface. Each extension is composed of one or more plugins, and plugins form the basis of JupyterLab itself, thus the plugin manager enables more extensive customization of the JupyterLab experience.
This feature is intended for advanced users and is documented in depth in the documentation.
Administrators may want to lock specific plugins if they are required for any reason; this will prevent users from disabling the plugins via Plugin Manager and remote API calls. The Plugin Manager itself can be disabled using the CLI.
The windowed notebook received an optional scrollbar delineating the active cell and selected cells. Users can jump to a specific cell.
To enable the virtual scrollbar, go to Settings → Notebook → Windowing mode, choose "full", and click on the hamburger icon (≡) which appears in the notebook's toolbar.
Virtual scrollbar is considered experimental, please share feedback!
JupyterLab 3.6 added a notification center which so far was only used for announcements and version update notifications (both opt-in). JupyterLab 4.1 adds two notifications to guide users in potentially confusing situations:
Notebooks in the full windowing mode only render the visible cells, significantly improving the performance of the application.
Numerous improvements for the full windowing mode behaviour (such as scrolling, search, rendering, and navigation) are included in this release (see the list of issues in #15258 for details).
The windowing mode is still experimental and known issues remain to be solved
([#15415](https://github.com/jupyterlab/jupyterlab/issues/15415), [#15465](https://github.com/jupyterlab/jupyterlab/issues/15465), [#15594](https://github.com/jupyterlab/jupyterlab/issues/15594)).
In addition, a sporadic regression in cell ordering ([#15610](https://github.com/jupyterlab/jupyterlab/issues/15610)) was observed in 4.1 beta,
and remains to be fixed, pending reports from users willing to test the windowing mode in JupyterLab 4.1 to help create reproducible steps that would enable fixing this issue.
Users who already enabled this mode in previous versions are advised to evaluate the benefits of fixes included in 4.1 against regressions linked above before deciding to upgrade.Some internal JupyterLab plugins have been re-organized to allow for better flexibility for deployments and downstream applications like Notebook 7. This might affect users that disable specific plugins with the jupyter labextension disable command or the disabledExtensions config option.
help:open command is not defined in the @jupyterlab/help-extension:resources plugin anymore, but has been moved to a new @jupyterlab/help-extension:open plugin instead.Below are the major highlights in JupyterLab 4.0.0.
CodeMirror, the text editor used for cells and file editors, has been updated to CodeMirror 6. This brings important accessibility and performance improvements as well as better customization capabilities. We have also improved the editor settings. Previously, users had to customize settings separately for each type of cell, the file editor, and the console editor. Now, you can change your settings in one place. It is now easier to use the default settings for all editors and to change some settings for specific cases. For example, you can now hide line numbers only for markdown cells.
Developers can now provide editor extensions, like themes and programming language parsers, through new application registries.
Starting with JupyterLab 3, extensions can be installed via Python packages (or other providers of prebuilt extensions).
In JupyterLab 4, building on this feature, the Extension Manager now includes extensions from pypi.org. This removes the build step from installation of extension when using Extension Manager.
Developers can provide an alternative package repository to display their own set of extensions.
The Search and Replace functionality has been improved with new features when searching in a notebook:
Some new elements have been added or changed in the UI:
JupyterLab is not yet fully accessible. Currently, we are focused on making Notebook 7 accessible. A big part of the code is shared, though, and the following accessibility improvements are in JupyterLab 4:
JupyterLab is now faster, thanks to the following improvements:
Notebook windowing might add side effects for example if some cell outputs are displaying iframes. Therefore it is not yet the default value. But we recommend user to switch to it and report bugs to help us polish it. To test it, you
need to set the user setting Notebook > Windowing mode to full. If you have issues with notebook rendering, try changing back to defer or none. (none should be used as a last resort, because it disables all optimizations.)
JupyterLab 3.6 already made significant improvements to the Real Time Collaboration (RTC) feature. The feature is now in a separate repository: jupyter_collaboration. The rationale is to limit the dependencies for users who don't need RTC. Separating RTC also helps organizations using JupyterLab that do not meet the specific requirements regarding file content management.
To enable RTC, install the jupyter-collaboration package with either pip or conda.
pip install "jupyter-collaboration>=1.0.0a0"RTC highlights in the standalone jupyter-collboration package, version 1.0.0, include:
Here are the main tool updates that will benefit extension authors and developers:
We recommend using Node.js v18 or newer, because older versions will reach end of life in 2023 or earlier (see Node release schedule).
To ease code migration to JupyterLab 4, developers should review the migration guide. A few existing extensions have already been migrated and can be used as examples:
DebuggerDisplayRegistry to provide context-aware display names for debugger panels #18043 (@arjxn-py)IContentProvider #18027 (@martinRenou)Show more outputs button design #18021 (@andrii-i)content-visibility application #18013 (@Meriem-BenIsmail)DocumentManager dialogs customizable #17961 (@Darshan808)ContentProviderRegistry #17940 (@martinRenou)contentVisibility #17926 (@Meriem-BenIsmail)IUserAPIClient to make swapping UserManager easier #17884 (@krassowski)toSkip for the SettingsEditor #17834 (@jtpio)content-visibility to render notebook cells more efficiently #17822 (@Meriem-BenIsmail)addExtraLineOnCellMerge setting #17806 (@jtpio)id when the user changes cell type #17731 (@afshin)shell to control channel #17684 (@krassowski)allowFileUploads setting to the file browser #17676 (@jtpio)args for all commands #17649 (@jtpio)audio-extension and video-extension #17636 (@jtpio)selectionChanged signal to the file browser #17563 (@jtpio)exportAs method to NbConvert.IManager #17482 (@jtpio)extra_labextensions_path to favor defaults #17476 (@peytondmurray)v2025.11.13 #18108 (@krassowski)IntersectionObserver to disable containment for on-screen cells #18091 (@Meriem-BenIsmail)allow-same-origin exception handling in sandbox when changing trust status #18049 (@skapin)ObservableList.removeValue behaviour: if item isn't found, don't just remove the last item! #18019 (@robertstrauss)configurationDone message once as per the DAP #17912 (@martinRenou)TerminalManager even if terminals are not available #17876 (@krassowski)FileDialog.getOpenFiles #17844 (@martinRenou)'clear' cases in switch statements for ObservableList #17837 (@Darshan808)Code Folding submenu only where it is supported #17803 (@Darshan808)FileDialog.getOpenFiles dialog #17737 (@martinRenou)preferredDir #17723 (@Darshan808)ToolbarButtonComponent dataset attributes with the data- prefix #17703 (@RRosio)@codemirror/view to v6.38.1, fixing lineWrap in defer mode #17698 (@krassowski)threadId being passed to the debugger #17667 (@kr-2003)CommsOverSubshells.PerCommTarget #17634 (@ianthomas23)Sanitizer.setAllowedSchemes #17602 (@bsundaram1)selectionChanged on model refresh #17596 (@jtpio)stringmd5 in docker image if both md5sum and md5 are present #17590 (@ritzdevp)standby callback to lumino polls #17567 (@mahendrapaipuri)fileeditor-extension: fix handling of launcher, commands and menu entries on specsChanged #17550 (@jtpio)MainAreaWidget #17527 (@dnlzrgz)v2025.4.30 to pull menu aria fix #17525 (@krassowski)aria-hidden to icons (<svg> elements) which do not have a title #17472 (@nkn2022)grid and flexbox style attributes during Markdown/HTML sanitization #17408 (@dotnetautor)altair installation in release test; migrate from deprecated vega_datasets to altair.datasets #18120 (@krassowski)release_test CI job #18082 (@krassowski)README.md #18052 (@jtpio)Drag file from nested directory to parent via breadcrumb #18015 (@Darshan808)ipykernel to avoid CI breakage with 7.0 pre-release #17957 (@arjxn-py)app.shell.currentWidget for updating the tab title, if available #17772 (@jtpio)js-testing tests #17754 (@jtpio)httpx<1 #17746 (@jtpio)ILabShell for the inspector plugins #17608 (@jtpio)buildAvailable #18075 (@Frank-Steiner)README.md #18052 (@jtpio)DocumentManager dialogs customizable #17961 (@Darshan808)toSkip for the SettingsEditor #17834 (@jtpio)toolbarRegistry.registerFactory with toolbarRegistry.addFactory in docs #17799 (@krassowski)CORPORATE.md #17789 (@krassowski)app.shell.currentWidget for updating the tab title, if available #17772 (@jtpio)jupyter.lab.transform #17726 (@MUFFANUJ)args for all commands #17649 (@jtpio)audio-extension and video-extension #17636 (@jtpio)selectionChanged signal to the file browser #17563 (@jtpio)RELEASE.md #17505 (@jtpio)exportAs method to NbConvert.IManager #17482 (@jtpio)extra_labextensions_path to favor defaults #17476 (@peytondmurray)(GitHub contributors page for this release)
@afshin | @andrii-i | @Ankitaupadhaya | @arjxn-py | @bollwyvl | @brichet | @bsundaram1 | @choldgraf | @cmarmo | @CrafterKolyan | @Darshan808 | @davidbrochart | @dependabot | @dnlzrgz | @domoritz | @dotnetautor | @ellisonbg | @EtiennePelletier | @fcollonval | @Frank-Steiner | @github-actions | @gjmooney | @HaudinFlorence | @hxrshxz | @ianthomas23 | @isabela-pf | @itsmevichu | @jasongrout | @JasonWeill | @jrdnbradford | @jtpio | @jupyterlab-probot | @kathatherine | @kr-2003 | @krassowski | @lumberbot-app | @mahendrapaipuri | @martinRenou | @Meriem-BenIsmail | @minrk | @MUFFANUJ | @nkn2022 | @peytondmurray | @pre-commit-ci | @ritzdevp | @robertstrauss | @RRosio | @rschroll | @shreve | @skapin | @superlevure | @SylvainCorlay | @tonyfast | @trungleduc | @williamstein | @yacchin1205 | @yukiiii04 | @zanieb | @Zsailer
v2025.11.13 #18108 (@krassowski)IntersectionObserver to disable containment for on-screen cells #18091 (@Meriem-BenIsmail)release_test CI job #18082 (@krassowski)buildAvailable #18075 (@Frank-Steiner)(GitHub contributors page for this release)
@arjxn-py | @Frank-Steiner | @HaudinFlorence | @jasongrout | @jtpio | @jupyterlab-probot | @krassowski | @martinRenou | @Meriem-BenIsmail
DebuggerDisplayRegistry to provide context-aware display names for debugger panels #18043 (@arjxn-py)IContentProvider #18027 (@martinRenou)Show more outputs button design #18021 (@andrii-i)content-visibility application #18013 (@Meriem-BenIsmail)allow-same-origin exception handling in sandbox when changing trust status #18049 (@skapin)ObservableList.removeValue behaviour: if item isn't found, don't just remove the last item! #18019 (@robertstrauss)README.md #18052 (@jtpio)Drag file from nested directory to parent via breadcrumb #18015 (@Darshan808)README.md #18052 (@jtpio)(GitHub contributors page for this release)
@andrii-i | @Ankitaupadhaya | @arjxn-py | @bollwyvl | @Darshan808 | @domoritz | @ellisonbg | @gjmooney | @jasongrout | @jtpio | @jupyterlab-probot | @krassowski | @martinRenou | @Meriem-BenIsmail | @robertstrauss | @RRosio | @skapin
DocumentManager dialogs customizable #17961 (@Darshan808)ContentProviderRegistry #17940 (@martinRenou)ipykernel to avoid CI breakage with 7.0 pre-release #17957 (@arjxn-py)DocumentManager dialogs customizable #17961 (@Darshan808)(GitHub contributors page for this release)
@andrii-i | @arjxn-py | @Darshan808 | @github-actions | @hxrshxz | @ianthomas23 | @itsmevichu | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @martinRenou | @Meriem-BenIsmail | @shreve
contentVisibility #17926 (@Meriem-BenIsmail)configurationDone message once as per the DAP #17912 (@martinRenou)TerminalManager even if terminals are not available #17876 (@krassowski)(GitHub contributors page for this release)
@github-actions | @gjmooney | @HaudinFlorence | @jtpio | @jupyterlab-probot | @krassowski | @martinRenou | @Meriem-BenIsmail
IUserAPIClient to make swapping UserManager easier #17884 (@krassowski)toSkip for the SettingsEditor #17834 (@jtpio)content-visibility to render notebook cells more efficiently #17822 (@Meriem-BenIsmail)addExtraLineOnCellMerge setting #17806 (@jtpio)FileDialog.getOpenFiles #17844 (@martinRenou)'clear' cases in switch statements for ObservableList #17837 (@Darshan808)Code Folding submenu only where it is supported #17803 (@Darshan808)toSkip for the SettingsEditor #17834 (@jtpio)toolbarRegistry.registerFactory with toolbarRegistry.addFactory in docs #17799 (@krassowski)CORPORATE.md #17789 (@krassowski)(GitHub contributors page for this release)
@arjxn-py | @bollwyvl | @brichet | @choldgraf | @cmarmo | @CrafterKolyan | @Darshan808 | @davidbrochart | @github-actions | @gjmooney | @HaudinFlorence | @isabela-pf | @jrdnbradford | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @martinRenou | @Meriem-BenIsmail | @williamstein
preferredDir #17723 (@Darshan808)app.shell.currentWidget for updating the tab title, if available #17772 (@jtpio)app.shell.currentWidget for updating the tab title, if available #17772 (@jtpio)(GitHub contributors page for this release)
@Darshan808 | @fcollonval | @github-actions | @ianthomas23 | @itsmevichu | @jtpio | @jupyterlab-probot | @krassowski | @Zsailer
id when the user changes cell type #17731 (@afshin)shell to control channel #17684 (@krassowski)allowFileUploads setting to the file browser #17676 (@jtpio)args for all commands #17649 (@jtpio)audio-extension and video-extension #17636 (@jtpio)FileDialog.getOpenFiles dialog #17737 (@martinRenou)ToolbarButtonComponent dataset attributes with the data- prefix #17703 (@jupyterlab)@codemirror/view to v6.38.1, fixing lineWrap in defer mode #17698 (@krassowski)threadId being passed to the debugger #17667 (@kr-2003)CommsOverSubshells.PerCommTarget #17634 (@ianthomas23)Sanitizer.setAllowedSchemes #17602 (@bsundaram1)selectionChanged on model refresh #17596 (@jtpio)js-testing tests #17754 (@jtpio)httpx<1 #17746 (@jtpio)ILabShell for the inspector plugins #17608 (@jtpio)jupyter.lab.transform #17726 (@MUFFANUJ)args for all commands #17649 (@jtpio)audio-extension and video-extension #17636 (@jtpio)(GitHub contributors page for this release)
@afshin | @bollwyvl | @brichet | @bsundaram1 | @Darshan808 | @dependabot | @github-actions | @ianthomas23 | @itsmevichu | @jtpio | @jupyterlab-probot | @kathatherine | @kr-2003 | @krassowski | @lumberbot-app | @martinRenou | @MUFFANUJ | @nkn2022 | @pre-commit-ci | @jupyterlab | @rschroll | @zanieb
selectionChanged signal to the file browser #17563 (@jtpio)stringmd5 in docker image if both md5sum and md5 are present #17590 (@ritzdevp)standby callback to lumino polls #17567 (@mahendrapaipuri)fileeditor-extension: fix handling of launcher, commands and menu entries on specsChanged #17550 (@jtpio)MainAreaWidget #17527 (@dnlzrgz)grid and flexbox style attributes during Markdown/HTML sanitization #17408 (@dotnetautor)(GitHub contributors page for this release)
@brichet | @Darshan808 | @dnlzrgz | @dotnetautor | @EtiennePelletier | @github-actions | @jtpio | @jupyterlab-probot | @krassowski | @mahendrapaipuri | @ritzdevp | @SylvainCorlay | @yacchin1205
exportAs method to NbConvert.IManager #17482 (@jtpio)extra_labextensions_path to favor defaults #17476 (@peytondmurray)v2025.4.30 to pull menu aria fix #17525 (@krassowski)aria-hidden to icons (<svg> elements) which do not have a title #17472 (@nkn2022)RELEASE.md #17505 (@jtpio)exportAs method to NbConvert.IManager #17482 (@jtpio)extra_labextensions_path to favor defaults #17476 (@peytondmurray)(GitHub contributors page for this release)
@dependabot | @jtpio | @jupyterlab-probot | @krassowski | @minrk | @nkn2022 | @peytondmurray | @pre-commit-ci | @trungleduc | @yukiiii04
none windowing mode #17486 (@krassowski)@jupyterlab/services import #17457 (@jtpio)(GitHub contributors page for this release)
@achhina | @afshin | @bnavigator | @brichet | @Darshan808 | @davidbrochart | @DenisaCG | @dependabot | @jtpio | @jupyterlab-probot | @krassowski | @pre-commit-ci
IKernelSpecAPICLient and ITerminalAPIClient, fix definitions of interfaces #17395 (@jtpio)IKernelAPIClient and ISessionAPIClient as options for Kernel.IManager and Session.IManager #17348 (@jtpio)display: flex #17343 (@SatyajitRedekar)@codemirror/lang-python to provide match-case indentation #17189 (@deephbz)--subshell-console flag #17180 (@ianthomas23)CONTRIBUTING.md #17078 (@JasonWeill)ServiceManager with plugins #16794 (@jtpio)@jupyterlab/debugger icons to @jupyterlab/ui-components #16745 (@joaopalmeiro)ITerminalAPIClient in TerminalConnection #17437 (@jtpio)delete_to_trash is True #17359 (@jesuino)null banner in the code console #17322 (@jtpio)ctrl + m toggle focus binding, enable configuring it via Keyboard Shortcuts #17291 (@krassowski)<GroupItem> to filter out null children and accept any ReactNode #17244 (@MUFFANUJ)\tag{} directive in LaTeX #17223 (@MUFFANUJ)lastCell from notebook run actions #17156 (@pawel99k)contentProviderId #17141 (@jtpio)settingeditor:open when settings editor is already open #17121 (@andrewfulton9)proxies parameter for httpx<0.28 #17113 (@AmberArr)bind(this) to NotebookAdapter's isReady function #17109 (@martenrichter)@codemirror packages #17064 (@jtpio)AsyncHTTPTransport over HTTPTransport for httpx #17058 (@krassowski)FileBrowserModel.onFileChanged for drives (including RTC:) #16988 (@davidbrochart)min-height when not windowing #16979 (@brichet)Last Modified column is hidden #16962 (@krassowski)Services.Contents #16927 (@cmarmo).mypy_cache #17444 (@krassowski)ILabShell optional in the logconsole extension #17430 (@jtpio)any #17414 (@krassowski)tj-actions/changed-files #17398 (@jtpio)ILicensesClient interface #17397 (@jtpio)JupyterLab.IInfo for the plugin manager plugin #17367 (@jtpio)apputils-extension #17361 (@jtpio)ConfigSectionManager via a plugin #17345 (@jtpio)ITranslationConnector to fetch the translations #17329 (@jtpio)ISettingsConnector via a separate plugin #17327 (@jtpio)ITranslatorConnector via a separate plugin #17325 (@jtpio)semver and tough-cookie to non-vulnerable versions #17319 (@dlqqq)jupyter-packaging #17294 (@jtpio)jupyterlab-demo #17283 (@krassowski)2025.2.1, fix the console prompt menu alignment #17274 (@jtpio)isPalette arg as for other commands #17258 (@jtpio)skipLibCheck from the test tsconfig #17143 (@jtpio)ISignal instead of Signal #17122 (@jtpio)navigator.language #17094 (@krassowski)typedoc 0.27.4 #17070 (@bollwyvl)nanoid from 3.3.6 to to 3.3.8 #17057 (@krassowski)httpx version window #17041 (@bollwyvl)httpx versions, bump httpx to v0.28.0 #17013 (@davidbrochart)terminal.spec.ts #16942 (@holzman)docmanager/savehandler "continue to save" test #16933 (@holzman)mermaid 11.x, marked 15.x #15733 (@bollwyvl)apputils-extension #17361 (@jtpio)ConfigSectionManager via a plugin #17345 (@jtpio)<GroupItem> to filter out null children and accept any ReactNode #17244 (@MUFFANUJ)repo → repository #17152 (@pdarshane)CONTRIBUTING.md #17078 (@JasonWeill)typedoc 0.27.4 #17070 (@bollwyvl)typedoc 0.26, fix missing module pages #17006 (@bollwyvl)IInlineCompletionItem.token #16959 (@fcollonval)Services.Contents #16927 (@cmarmo)Contents.IChangedArgs documentation #16918 (@cmarmo)ServiceManager with plugins #16794 (@jtpio)@jupyterlab/debugger icons to @jupyterlab/ui-components #16745 (@joaopalmeiro)(GitHub contributors page for this release)
@Adam-D-Lewis | @afshin | @ajbozarth | @AmberArr | @andrewfulton9 | @andreytaboola | @andrii-i | @bollwyvl | @brichet | @Carreau | @claytonparnell | @cmarmo | @Darshan808 | @davidbrochart | @deephbz | @dependabot | @dlqqq | @echarles | @fcollonval | @fleming79 | @github-actions | @holzman | @hxrshxz | @ianthomas23 | @iisakkirotko | @itsmevichu | @JasonWeill | @jesuino | @joaopalmeiro | @jtpio | @jupyterlab-probot | @kellyrowland | @krassowski | @kuraga | @lumberbot-app | @maitreya2954 | @martenrichter | @martinRenou | @mgeier | @MUFFANUJ | @nkn2022 | @Nriver | @pawel99k | @pdarshane | @peytondmurray | @pre-commit-ci | @Princekumarofficial | @Rishab87 | @rpwagner | @jupyterlab | @rsaditya01 | @SamuelMarks | @SatyajitRedekar | @SylvainCorlay | @trungleduc | @Zsailer
ITerminalAPIClient in TerminalConnection #17437 (@jtpio).mypy_cache #17444 (@krassowski)ILabShell optional in the logconsole extension #17430 (@jtpio)(GitHub contributors page for this release)
@Darshan808 | @dependabot | @fcollonval | @github-actions | @jtpio | @jupyterlab-probot | @krassowski | @MUFFANUJ | @nkn2022
(GitHub contributors page for this release)
@bollwyvl | @brichet | @itsmevichu | @jupyterlab-probot | @krassowski | @MUFFANUJ
IKernelSpecAPICLient and ITerminalAPIClient, fix definitions of interfaces #17395 (@jtpio)any #17414 (@krassowski)tj-actions/changed-files #17398 (@jtpio)ILicensesClient interface #17397 (@jtpio)(GitHub contributors page for this release)
@afshin | @fleming79 | @ianthomas23 | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @martinRenou | @trungleduc
IKernelAPIClient and ISessionAPIClient as options for Kernel.IManager and Session.IManager #17348 (@jtpio)display: flex #17343 (@SatyajitRedekar)delete_to_trash is True #17359 (@jesuino)null banner in the code console #17322 (@jtpio)JupyterLab.IInfo for the plugin manager plugin #17367 (@jtpio)apputils-extension #17361 (@jtpio)ConfigSectionManager via a plugin #17345 (@jtpio)ITranslationConnector to fetch the translations #17329 (@jtpio)ISettingsConnector via a separate plugin #17327 (@jtpio)ITranslatorConnector via a separate plugin #17325 (@jtpio)semver and tough-cookie to non-vulnerable versions #17319 (@dlqqq)apputils-extension #17361 (@jtpio)ConfigSectionManager via a plugin #17345 (@jtpio)(GitHub contributors page for this release)
@afshin | @andrii-i | @bollwyvl | @Darshan808 | @davidbrochart | @dependabot | @dlqqq | @fcollonval | @github-actions | @ianthomas23 | @iisakkirotko | @itsmevichu | @jesuino | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @martinRenou | @pre-commit-ci | @Princekumarofficial | @jupyterlab | @rsaditya01 | @SatyajitRedekar | @trungleduc
ServiceManager with plugins #16794 (@jtpio)ctrl + m toggle focus binding, enable configuring it via Keyboard Shortcuts #17291 (@krassowski)<GroupItem> to filter out null children and accept any ReactNode #17244 (@MUFFANUJ)\tag{} directive in LaTeX #17223 (@MUFFANUJ)jupyter-packaging #17294 (@jtpio)jupyterlab-demo #17283 (@krassowski)2025.2.1, fix the console prompt menu alignment #17274 (@jtpio)isPalette arg as for other commands #17258 (@jtpio)<GroupItem> to filter out null children and accept any ReactNode #17244 (@MUFFANUJ)repo → repository #17152 (@pdarshane)ServiceManager with plugins #16794 (@jtpio)(GitHub contributors page for this release)
@Adam-D-Lewis | @afshin | @andrii-i | @brichet | @Carreau | @Darshan808 | @dependabot | @dlqqq | @echarles | @fcollonval | @github-actions | @hxrshxz | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @MUFFANUJ | @pdarshane | @pre-commit-ci | @Rishab87 | @rpwagner | @jupyterlab | @Zsailer
@codemirror/lang-python to provide match-case indentation #17189 (@deephbz)--subshell-console flag #17180 (@ianthomas23)lastCell from notebook run actions #17156 (@pawel99k)contentProviderId #17141 (@jtpio)skipLibCheck from the test tsconfig #17143 (@jtpio)(GitHub contributors page for this release)
@ajbozarth | @brichet | @Darshan808 | @deephbz | @dependabot | @github-actions | @hxrshxz | @ianthomas23 | @itsmevichu | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @MUFFANUJ | @pawel99k | @peytondmurray | @pre-commit-ci | @SylvainCorlay
settingeditor:open when settings editor is already open #17121 (@andrewfulton9)proxies parameter for httpx<0.28 #17113 (@AmberArr)bind(this) to NotebookAdapter's isReady function #17109 (@martenrichter)ISignal instead of Signal #17122 (@jtpio)(GitHub contributors page for this release)
@AmberArr | @andrewfulton9 | @andreytaboola | @bollwyvl | @Darshan808 | @davidbrochart | @dependabot | @echarles | @fcollonval | @ianthomas23 | @jtpio | @jupyterlab-probot | @krassowski | @martenrichter | @peytondmurray | @SamuelMarks
CONTRIBUTING.md #17078 (@JasonWeill)@jupyterlab/debugger icons to @jupyterlab/ui-components #16745 (@joaopalmeiro)@codemirror packages #17064 (@jtpio)AsyncHTTPTransport over HTTPTransport for httpx #17058 (@krassowski)FileBrowserModel.onFileChanged for drives (including RTC:) #16988 (@davidbrochart)min-height when not windowing #16979 (@brichet)navigator.language #17094 (@krassowski)typedoc 0.27.4 #17070 (@bollwyvl)nanoid from 3.3.6 to to 3.3.8 #17057 (@krassowski)httpx version window #17041 (@bollwyvl)httpx versions, bump httpx to v0.28.0 #17013 (@davidbrochart)mermaid 11.x, marked 15.x #15733 (@bollwyvl)CONTRIBUTING.md #17078 (@JasonWeill)typedoc 0.27.4 #17070 (@bollwyvl)typedoc 0.26, fix missing module pages #17006 (@bollwyvl)@jupyterlab/debugger icons to @jupyterlab/ui-components #16745 (@joaopalmeiro)(GitHub contributors page for this release)
@bollwyvl | @brichet | @claytonparnell | @cmarmo | @Darshan808 | @davidbrochart | @dependabot | @fcollonval | @itsmevichu | @JasonWeill | @joaopalmeiro | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @mgeier | @Nriver | @pre-commit-ci | @jupyterlab
Last Modified column is hidden #16962 (@krassowski)Services.Contents #16927 (@cmarmo)terminal.spec.ts #16942 (@holzman)docmanager/savehandler "continue to save" test #16933 (@holzman)IInlineCompletionItem.token #16959 (@fcollonval)Services.Contents #16927 (@cmarmo)Contents.IChangedArgs documentation #16918 (@cmarmo)(GitHub contributors page for this release)
@andrewfulton9 | @brichet | @cmarmo | @Darshan808 | @dependabot | @fcollonval | @holzman | @ianthomas23 | @itsmevichu | @JasonWeill | @jtpio | @jupyterlab-probot | @kellyrowland | @krassowski | @kuraga | @maitreya2954 | @pre-commit-ci
Show Virtual Scrollbar -> Show Minimap #16776 (@jtpio)@jupyterlab/ui-components and update SVGO #16678 (@joaopalmeiro)@jupyterlab/completer type colors to theme CSS variables #16656 (@joaopalmeiro)--jp-border-radius CSS variable in missing input fields #16568 (@joaopalmeiro)Tab as an alternative shortcut for accepting inline completion #16565 (@andrewfulton9).jp-ThemedContainer class #16519 (@fcollonval)ICodeCellModel.executionState, deprecate setPrompt() #16431 (@krassowski)Completer.selected signals #16312 (@ajbozarth)serverRequests #16834 (@kaushalaaditya99)inline-grid for browser column positioning #16765 (@krassowski)jupyterlab-unfold #16763 (@krassowski)class instead of id in the log console test #16723 (@krassowski)configure calls not being propagated correctly #16508 (@krassowski)jupyter-collaboration-missing error message #16436 (@krishanbhasin-px)Shift + Tab contextual help inspector tooltip regression #16343 (@krassowski)@jupyter/ydoc final #16898 (@jtpio)https://code.visualstudio.com in check-links #16878 (@jtpio)pypi.org links for now #16843 (@jtpio)|| in the update:dependency script #16821 (@krassowski)browser_check in headed mode #16810 (@jtpio).gitignore #16595 (@joaopalmeiro)setuptools dependency) #16423 (@jtpio)canvas with jest-canvas-mock #16314 (@krassowski)(beta) from the 4.3 changelog #16902 (@jtpio)4.3.0rc0 to the release postmortems #16858 (@jtpio)IPropertyInspectorProvider plugin description #16797 (@jtpio)tmpPath #16587 (@krassowski).jp-ThemedContainer class #16519 (@fcollonval)api directory is present to build documentation #16467 (@Darshan808)canvas with jest-canvas-mock #16314 (@krassowski)(GitHub contributors page for this release)
@achhina | @afshin | @ajbozarth | @algonell | @andrewfulton9 | @andreytaboola | @andrii-i | @bollwyvl | @brichet | @ChairBorn | @cmarmo | @Darshan808 | @davidbrochart | @dependabot | @dhysdrn | @doshi-kevin | @echarles | @EdsterG | @ellisonbg | @ericsnekbytes | @fcollonval | @g547315 | @gabalafou | @gderocher | @github-actions | @guyq1997 | @HaudinFlorence | @hnben | @itsmevichu | @j264415 | @JasonWeill | @jgoodson | @joaopalmeiro | @jtpio | @jupyterlab-probot | @kaushalaaditya99 | @krassowski | @krishanbhasin-px | @lumberbot-app | @mahendrapaipuri | @maitreya2954 | @Mehak261124 | @mjpsyapse | @Nagidrop | @Nazeeh21 | @nekomeowww | @NexVeridian | @pauldruce | @pre-commit-ci | @Renegade334 | @Rob-P-Smith | @jupyterlab | @sanskriti2005 | @srdas | @SylvainCorlay | @tonyfast | @welcome | @williamstein | @Wzixiao
serverRequests #16834 (@kaushalaaditya99)https://code.visualstudio.com in check-links #16878 (@jtpio)4.3.0rc0 to the release postmortems #16858 (@jtpio)(GitHub contributors page for this release)
@Darshan808 | @dependabot | @github-actions | @joaopalmeiro | @jtpio | @jupyterlab-probot | @kaushalaaditya99 | @krassowski | @mjpsyapse | @Nagidrop
(GitHub contributors page for this release)
@algonell | @ChairBorn | @github-actions | @HaudinFlorence | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @nekomeowww | @pre-commit-ci
inline-grid for browser column positioning #16765 (@krassowski)|| in the update:dependency script #16821 (@krassowski)(GitHub contributors page for this release)
@dependabot | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski
Show Virtual Scrollbar -> Show Minimap #16776 (@jtpio)Tab as an alternative shortcut for accepting inline completion #16565 (@andrewfulton9)jupyterlab-unfold #16763 (@krassowski)class instead of id in the log console test #16723 (@krassowski)browser_check in headed mode #16810 (@jtpio)IPropertyInspectorProvider plugin description #16797 (@jtpio)(GitHub contributors page for this release)
@andrewfulton9 | @bollwyvl | @cmarmo | @Darshan808 | @davidbrochart | @dependabot | @fcollonval | @github-actions | @JasonWeill | @joaopalmeiro | @jtpio | @jupyterlab-probot | @krassowski
@jupyterlab/ui-components and update SVGO #16678 (@joaopalmeiro)(GitHub contributors page for this release)
@cmarmo | @davidbrochart | @dependabot | @itsmevichu | @JasonWeill | @joaopalmeiro | @jtpio | @jupyterlab-probot | @krassowski | @maitreya2954
@jupyterlab/completer type colors to theme CSS variables #16656 (@joaopalmeiro).gitignore #16595 (@joaopalmeiro)tmpPath #16587 (@krassowski)(GitHub contributors page for this release)
@afshin | @andrii-i | @brichet | @davidbrochart | @dependabot | @dhysdrn | @EdsterG | @fcollonval | @gabalafou | @gderocher | @github-actions | @HaudinFlorence | @itsmevichu | @JasonWeill | @joaopalmeiro | @jtpio | @jupyterlab-probot | @krassowski | @Mehak261124 | @Nazeeh21 | @NexVeridian | @pauldruce | @pre-commit-ci | @Renegade334 | @Rob-P-Smith | @jupyterlab | @tonyfast | @welcome | @williamstein
--jp-border-radius CSS variable in missing input fields #16568 (@joaopalmeiro).jp-ThemedContainer class #16519 (@fcollonval).jp-ThemedContainer class #16519 (@fcollonval)(GitHub contributors page for this release)
@dependabot | @fcollonval | @g547315 | @gabalafou | @github-actions | @j264415 | @JasonWeill | @joaopalmeiro | @jtpio | @jupyterlab-probot | @krassowski | @NexVeridian | @pre-commit-ci | @welcome
ICodeCellModel.executionState, deprecate setPrompt() #16431 (@krassowski)configure calls not being propagated correctly #16508 (@krassowski)jupyter-collaboration-missing error message #16436 (@krishanbhasin-px)setuptools dependency) #16423 (@jtpio)api directory is present to build documentation #16467 (@Darshan808)(GitHub contributors page for this release)
@achhina | @afshin | @brichet | @Darshan808 | @davidbrochart | @dependabot | @echarles | @ellisonbg | @fcollonval | @github-actions | @HaudinFlorence | @hnben | @itsmevichu | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @krishanbhasin-px | @lumberbot-app | @mahendrapaipuri | @Mehak261124 | @pre-commit-ci | @jupyterlab | @sanskriti2005 | @srdas | @welcome
Completer.selected signals #16312 (@ajbozarth)Shift + Tab contextual help inspector tooltip regression #16343 (@krassowski)canvas with jest-canvas-mock #16314 (@krassowski)canvas with jest-canvas-mock #16314 (@krassowski)(GitHub contributors page for this release)
@ajbozarth | @brichet | @dependabot | @fcollonval | @github-actions | @itsmevichu | @JasonWeill | @jgoodson | @jtpio | @jupyterlab-probot | @krassowski | @Rob-P-Smith | @welcome | @Wzixiao
notifyCommandChanged() #16273 (@jtpio)(GitHub contributors page for this release)
@davidbrochart | @dependabot | @fcollonval | @FoSuCloud | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @welcome
FilterBox #16216 (@krassowski)(GitHub contributors page for this release)
@Alanhou1222 | @divyansshhh | @github-actions | @itsmevichu | @JasonWeill | @jtpio | @jupyterlab-probot | @kolibril13 | @krassowski | @NexVeridian | @Rob-P-Smith | @sawickid | @welcome
(GitHub contributors page for this release)
@dependabot | @fcollonval | @jupyterlab-probot | @krassowski
IDefaultFileBrowser dependency from launcher-extension #16173 (@milinm)Enter #16156 (@krassowski)(GitHub contributors page for this release)
@AnastasiaSliusar | @andrii-i | @bollwyvl | @brichet | @dependabot | @fcollonval | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @Mehak261124 | @milinm | @Tanmay-Deshmukh | @welcome
notebook:create-output-view command #16138 (@jtpio)smart scroll in debugger to minimize distraction #16084 (@krassowski)dependency_type: minimum for Minimum Versions check #16105 (@krassowski)altair and jupyterlab-language-pack-zh-cn for tests, relax copier pin #16094 (@dependabot)(GitHub contributors page for this release)
@Alanhou1222 | @brichet | @davidbrochart | @dependabot | @e218736 | @echarles | @fcollonval | @FoSuCloud | @gabalafou | @github-actions | @itsmevichu | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @m158261 | @pre-commit-ci | @Susilkessav | @welcome
full notebook windowing mode by default #15964 (@krassowski)ICellExecutor providing an entry to customize cell execution #15830 (@fcollonval)IShell.currentChanged and notify commands based on it #15449 (@fcollonval)IWorkspaceCommands in apputils extension #16058 (@krassowski)IWorkspaceCommands in apputils extension #16058 (@krassowski)(GitHub contributors page for this release)
@afshin | @fcollonval | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @UntitledError-09 | @welcome
ServerConnection.appendToken via PageConfig #16022 (@minrk)ServerApp.token deprecation warnings #16011 (@jtpio)whatwg-fetch polyfill #16000 (@jtpio)--verbose #15905 (@krassowski)whatwg-fetch polyfill #16000 (@jtpio)(GitHub contributors page for this release)
@brichet | @dependabot | @erkin98 | @fcollonval | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @mdietz94 | @Mehak261124 | @minrk | @jupyterlab | @trungleduc | @welcome
selectItemByName() if already selected #15970 (@krassowski)ContentsManagerMock #15291 (@jtpio)@jupyter/ydoc v2.0.1 #15982 (@jtpio)ContentsManagerMock #15974 (@jtpio)node-fetch dependency #15969 (@jtpio)node-fetch dependency #15969 (@jtpio)(GitHub contributors page for this release)
@andrii-i | @blink1073 | @brichet | @dependabot | @diyoyo | @fcollonval | @FoSuCloud | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @linlol | @welcome
metadataform to the labeler #15896 (@jtpio)child_process dependency #15888 (@jtpio)sanitize-html to latest v2.12.1 #15877 (@krassowski)4.0.x and 4.1.x to the documentation switcher #15850 (@jtpio)(GitHub contributors page for this release)
@AllanChain | @brichet | @dependabot | @ericsnekbytes | @fcollonval | @FoSuCloud | @github-actions | @HaudinFlorence | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @linlol | @lumberbot-app | @trungleduc | @welcome
(GitHub contributors page for this release)
@FoSuCloud | @github-actions | @JasonWeill | @jupyterlab-probot | @kiliansinger | @krassowski | @lumberbot-app | @nluetts | @trungleduc | @welcome
document.cookie #15788 (@minrk)OSError in addition to PermissionError when sys_prefix is read-only #15756 (@dhml)jupyter-collaboration for the Binder environment #15767 (@jtpio)(GitHub contributors page for this release)
@davidbrochart | @dhml | @fcollonval | @g547315 | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @minrk | @pre-commit-ci | @welcome
defaultPath option to set the default directory for file dialog #15282 (@mmichilot)processedItemsCache as a protected in CompleterModel #15025 (@krassowski)filebrowser.open and add ability to provide a factory #14983 (@fcollonval)copyAbsolutePath enabling to copy absolute path #14842 (@pauky)overrides.json not working for shortcuts #15716 (@krassowski)user level or to none (as fallback) #15678 (@krassowski)Ctrl + Enter #15638 (@krassowski)hash from jupyter-server v2.11.1+ #15577 (@Wh1isper)Tab #15571 (@krassowski)jupyter labextension watch --help #15542 (@akx)level trait for plugin/extension managers #15512 (@krassowski)FormComponent showing error indicators in all fields when using a customValidate function #15464 (@mmichilot)defaultPath, and model disposal #15463 (@mmichilot)overrides.json #15346 (@LJMP)require.resolve() #15299 (@tibdex)Shift + Enter #15288 (@krassowski)full windowed mode #15286 (@krassowski)unusedDocuments, fix culling of foreign documents #15105 (@krassowski)getMimeTypeByLanguage() #15101 (@krassowski)<select> elements in dark theme #15098 (@Rmarieta)_updateConstraints missing protected/private classifier. #15066 (@krassowski)HoverBox: adjust right when moving node to fit within window #15052 (@krassowski)shouldShowContinuousHint() #15015 (@krassowski)staging/yarn.lock #14926 (@fcollonval)serverCapabilities, provides, and updateLogging #14712 (@krassowski)context.contentsModel.content #14660 (@fcollonval)ifaxity/wait-on-action wrapper with direct wait-on use #15721 (@krassowski)pytest-tornasync to pytest-jupyter #15662 (@KiranmaiKalla)jlpm as npm client for snapshot updates #15641 (@krassowski)page.filebrowser.refresh() timeout logic #15607 (@jtpio)actions/upload-artifact@v4 and action/download-artifact@v4 #15536 (@jtpio)ipython in dependabot updates #15528 (@jtpio)pull_request_review #15523 (@jtpio)actions/labeler to v4 to fix failing CI action #15496 (@krassowski)--collaborative is used without jupyter-collaboration #15300 (@mdengler)@jupyterlab/rendermime-interfaces to 3.9.0-alpha.1 #15240 (@jtpio)@jupyter/ydoc 1.1.1 #15177 (@jtpio)| #15072 (@krassowski)getEditorIndexAt() method #15028 (@krassowski)| null to the mermaid plugin activate parameter #15003 (@jtpio)default_url configurable #14944 (@jtpio)Event.IManager interface #14770 (@trungleduc)StatusMessage which is dead code #14713 (@krassowski)jupyter labextension list compat message #14680 (@jtpio)OSTYPE check in ci_install.sh #11801 (@jtpio)level trait for plugin/extension managers #15512 (@krassowski)Notification.dismiss #15197 (@krassowski)README.md #15039 (@jtpio)--UNSAFE flag in the extension tutorial docs #15007 (@jtpio)staging/yarn.lock #14926 (@fcollonval)copyAbsolutePath enabling to copy absolute path #14842 (@pauky)good first issue label #14686 (@krassowski)jupyter labextension list compat message #14680 (@jtpio)(GitHub contributors page for this release)
@afshin | @akx | @alden-ilao | @AllanChain | @andrewfulton9 | @andrii-i | @ashna1jain | @bikash30851 | @blink1073 | @bollwyvl | @brichet | @brijsiyag | @coriegulik | @davidbrochart | @DcWire | @Deepali1211 | @DenisaCG | @dependabot | @dharmaquark | @divyansshhh | @dolevf | @DonJayamanne | @echarles | @eliaslma | @emmanuel-ferdman | @ericsnekbytes | @fcollonval | @firai | @FoSuCloud | @g547315 | @gabalafou | @GabrielaVives | @github-actions | @HaudinFlorence | @hbcarlos | @holzman | @isabela-pf | @j264415 | @jans-code | @JasonWeill | @jtpio | @jupyterlab-bot | @jupyterlab-probot | @KiranmaiKalla | @krassowski | @LJMP | @lumberbot-app | @m158261 | @mctoohey | @mdengler | @MFA-X-AI | @misterfads | @mlucool | @mmichilot | @nbowditch-einblick | @nishikantparmariam | @paolocarinci | @parmentelat | @pauky | @paulkim3151 | @phil-zxx | @pre-commit-ci | @Rmarieta | @jupyterlab | @Sarthug99 | @sinistersnare | @skyetim | @smacke | @SylvainCorlay | @t03857785 | @tibdex | @timkpaine | @tonyfast | @trungleduc | @welcome | @Wh1isper | @yuvipanda
overrides.json not working for shortcuts #15716 (@krassowski)ifaxity/wait-on-action wrapper with direct wait-on use #15721 (@krassowski)(GitHub contributors page for this release)
@FoSuCloud | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @Sarthug99 | @welcome
user level or to none (as fallback) #15678 (@krassowski)hash from jupyter-server v2.11.1+ #15577 (@Wh1isper)pytest-tornasync to pytest-jupyter #15662 (@KiranmaiKalla)(GitHub contributors page for this release)
@brichet | @dependabot | @fcollonval | @FoSuCloud | @github-actions | @j264415 | @JasonWeill | @jupyterlab-bot | @jupyterlab-probot | @KiranmaiKalla | @krassowski | @welcome | @Wh1isper
(GitHub contributors page for this release)
@github-actions | @jupyterlab-probot | @krassowski
Ctrl + Enter #15638 (@krassowski)Tab #15571 (@krassowski)jlpm as npm client for snapshot updates #15641 (@krassowski)page.filebrowser.refresh() timeout logic #15607 (@jtpio)(GitHub contributors page for this release)
@alden-ilao | @andrewfulton9 | @bollwyvl | @brichet | @dependabot | @fcollonval | @github-actions | @j264415 | @jtpio | @jupyterlab-probot | @krassowski | @MFA-X-AI | @misterfads | @pre-commit-ci | @welcome | @Wh1isper
jupyter labextension watch --help #15542 (@akx)level trait for plugin/extension managers #15512 (@krassowski)FormComponent showing error indicators in all fields when using a customValidate function #15464 (@mmichilot)defaultPath, and model disposal #15463 (@mmichilot)actions/upload-artifact@v4 and action/download-artifact@v4 #15536 (@jtpio)ipython in dependabot updates #15528 (@jtpio)pull_request_review #15523 (@jtpio)actions/labeler to v4 to fix failing CI action #15496 (@krassowski)OSTYPE check in ci_install.sh #11801 (@jtpio)level trait for plugin/extension managers #15512 (@krassowski)(GitHub contributors page for this release)
@afshin | @akx | @ashna1jain | @brichet | @DcWire | @dependabot | @DonJayamanne | @fcollonval | @g547315 | @gabalafou | @GabrielaVives | @github-actions | @j264415 | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @m158261 | @mmichilot | @parmentelat | @pre-commit-ci | @t03857785 | @tonyfast | @welcome
--collaborative is used without jupyter-collaboration #15300 (@mdengler)(GitHub contributors page for this release)
@andrewfulton9 | @blink1073 | @brichet | @fcollonval | @gabalafou | @github-actions | @j264415 | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @m158261 | @mdengler | @parmentelat | @jupyterlab | @tonyfast | @welcome
defaultPath option to set the default directory for file dialog #15282 (@mmichilot)overrides.json #15346 (@LJMP)require.resolve() #15299 (@tibdex)Shift + Enter #15288 (@krassowski)full windowed mode #15286 (@krassowski)@jupyterlab/rendermime-interfaces to 3.9.0-alpha.1 #15240 (@jtpio)(GitHub contributors page for this release)
@andrewfulton9 | @andrii-i | @blink1073 | @bollwyvl | @brichet | @DenisaCG | @dependabot | @dharmaquark | @divyansshhh | @dolevf | @eliaslma | @ericsnekbytes | @fcollonval | @firai | @github-actions | @j264415 | @jtpio | @jupyterlab-probot | @krassowski | @LJMP | @lumberbot-app | @m158261 | @mmichilot | @nbowditch-einblick | @nishikantparmariam | @parmentelat | @pauky | @paulkim3151 | @pre-commit-ci | @sinistersnare | @skyetim | @tibdex | @tonyfast | @trungleduc | @welcome
unusedDocuments, fix culling of foreign documents #15105 (@krassowski)processedItemsCache as a protected in CompleterModel #15025 (@krassowski)getMimeTypeByLanguage() #15101 (@krassowski)<select> elements in dark theme #15098 (@Rmarieta)_updateConstraints missing protected/private classifier. #15066 (@krassowski)HoverBox: adjust right when moving node to fit within window #15052 (@krassowski)shouldShowContinuousHint() #15015 (@krassowski)@jupyter/ydoc 1.1.1 #15177 (@jtpio)| #15072 (@krassowski)getEditorIndexAt() method #15028 (@krassowski)| null to the mermaid plugin activate parameter #15003 (@jtpio)Notification.dismiss #15197 (@krassowski)README.md #15039 (@jtpio)--UNSAFE flag in the extension tutorial docs #15007 (@jtpio)(GitHub contributors page for this release)
@afshin | @andrewfulton9 | @bikash30851 | @brichet | @Deepali1211 | @dependabot | @echarles | @fcollonval | @gabalafou | @github-actions | @HaudinFlorence | @hbcarlos | @isabela-pf | @jans-code | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @m158261 | @parmentelat | @pre-commit-ci | @Rmarieta | @smacke | @trungleduc | @welcome
filebrowser.open and add ability to provide a factory #14983 (@fcollonval)copyAbsolutePath enabling to copy absolute path #14842 (@pauky)staging/yarn.lock #14926 (@fcollonval)serverCapabilities, provides, and updateLogging #14712 (@krassowski)context.contentsModel.content #14660 (@fcollonval)default_url configurable #14944 (@jtpio)Event.IManager interface #14770 (@trungleduc)StatusMessage which is dead code #14713 (@krassowski)jupyter labextension list compat message #14680 (@jtpio)staging/yarn.lock #14926 (@fcollonval)copyAbsolutePath enabling to copy absolute path #14842 (@pauky)good first issue label #14686 (@krassowski)jupyter labextension list compat message #14680 (@jtpio)(GitHub contributors page for this release)
@AllanChain | @andrii-i | @bollwyvl | @brichet | @brijsiyag | @coriegulik | @davidbrochart | @DenisaCG | @dependabot | @echarles | @emmanuel-ferdman | @ericsnekbytes | @fcollonval | @FoSuCloud | @g547315 | @gabalafou | @GabrielaVives | @github-actions | @hbcarlos | @holzman | @isabela-pf | @j264415 | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @lumberbot-app | @mctoohey | @pauky | @pre-commit-ci | @skyetim | @SylvainCorlay | @timkpaine | @tonyfast | @trungleduc | @welcome | @yuvipanda
(GitHub contributors page for this release)
@dependabot | @ericsnekbytes | @fcollonval | @GabrielaVives | @github-actions | @jtpio | @jupyterlab-probot | @krassowski | @pre-commit-ci | @tonyfast
maxHeight being equal to minHeight for HoverBox's visibility #14533 (@nishikantparmariam)sortNotebooksFirst option #14497 (@tpatel).cm-editor #14601 (@krassowski)IStatusBar optional for the notification plugin #14593 (@jtpio)@jupyterlab/celltags from the resolutions #14551 (@jtpio)main #14492 (@jtpio)main #14492 (@jtpio)(GitHub contributors page for this release)
@brijsiyag | @c3Vu | @dependabot | @fcollonval | @github-actions | @j264415 | @JasonWeill | @JeanLescutMuller | @jtpio | @jupyterlab-probot | @krassowski | @nishikantparmariam | @t03857785 | @tpatel | @tuncbkose | @welcome
JupyterLab 4 is released! :tada:
Check out the new features, improvements and bug fixes: https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-0
For extension authors, there is a migration guide available to help you migrate your extensions to JupyterLab 4: https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-3-x-to-4-x
For reference, below are the changed since v4.0.0rc1:
(GitHub contributors page for this release)
@afshin | @andrii-i | @fcollonval | @github-actions | @HaudinFlorence | @jupyterlab-probot | @krassowski | @welcome
Notebook._ensureFocus #14425 (@fcollonval).lm-hidden class to disappear before taking snapshot #14456 (@krassowski)(GitHub contributors page for this release)
@afshin | @andrewfulton9 | @andrii-i | @bikash30851 | @dependabot | @fcollonval | @gabalafou | @github-actions | @JaSpa | @jtpio | @jupyterlab-probot | @krassowski | @meeseeksdev | @pre-commit-ci | @welcome
::-webkit-scrollbar styles on-demand #14275 (@krassowski)contain:strict #13831 (@krassowski)default locale will use OS default locale #13721 (@fcollonval)Completer.IRenderer.sanitizer #13700 (@fcollonval)contentVisibility widget hiding mode #13652 (@krassowski)contentHeader is not disposed before accessing widgets #13453 (@krassowski).ipynb_checkpoints #13286 (@krassowski)Contents.IModel #13216 (@krassowski)Contents.ContentType to string #12875 (@trungleduc)eachLine loops #12746 (@vidartf)<select> instead of using universal CSS selector #14408 (@fcollonval)<code> block in the UI when there is an error installing any extension. #14095 (@kamalika0363)defaultValue, add a test for typing #14085 (@krassowski)hasCommand before calling notifyCommandChanged #14066 (@jtpio)lineWiseCopyCut setting #14055 (@bollwyvl)runmenu:restart-an-run-all #14000 (@fcollonval)preferred_dir for examples #13788 (@fcollonval)settingEditorType #13761 (@jtpio)replaceSelection, add unit test #13657 (@krassowski)RunningTerminal access before initialization #13655 (@krassowski)source_hidden not effective. #13611 (@yczhangsjtu)scaleFactor value from the embed options when creating the PNG representation for a Vega-based chart #13610 (@joaopalmeiro)IDocumentProviderFactory.IOptions generic to ISharedDocument #13490 (@jtpio)FileEditor.ready #13426 (@krassowski)dirty handling in notebook model #13358 (@fcollonval)isUntitled to false on document path changes #13268 (@fcollonval)display to hide tabs #13103 (@fcollonval)debugger variable renderer #12968 (@firai)tmpPath #12823 (@fcollonval)@codemirror and @lezer packages to latest #14413 (@krassowski)--skip-dev-build, use with yarn invocation to fix binder #14273 (@bollwyvl)check_links job #14243 (@krassowski)webpack dependencies #14189 (@jtpio)Stream instead of downstream stream #14123 (@afshin)--extensions-in-dev-mode on Gitpod #14076 (@jtpio)@lumino/datagrid #14037 (@bollwyvl)@types/react as a dependency of @jupyterlab/apputils #13981 (@jtpio)@jupyterlab/filebrowser-extension:default-file-browser #13936 (@jtpio)@jupyterlab/completer-extension:tracker to @jupyterlab/completer-extension:manager #13910 (@fcollonval)jlpm to yarn 3.4.1 #13875 (@brichet)jupyter_server_ydoc as 0.6.2 is yanked #13864 (@fcollonval)2.0.0-beta.0 #13828 (@krassowski)preferred_dir for examples #13788 (@fcollonval)@jupyterlab/buildutils in @jupyterlab/builder #13741 (@jtpio)jupyter_server>=2.0.1,<3 #13718 (@jtpio)DocumentWidgetOpenerMock #13703 (@fcollonval)skipLibCheck in the vega5-extension package #13630 (@jtpio)terser-webpack-plugin #13532 (@jtpio)@jupyter/ydoc instead of @jupyter-notebook/ydoc #13506 (@jtpio)moment dependency #13469 (@jtpio)jupyter labextension #13321 (@jtpio)generate_changelog.py script #13262 (@jtpio)pytest and pytest-check-links dependencies #13219 (@jtpio)width: 100% of jp-WindowedPanel-inner #13157 (@jtpio)width: 100% of jp-WindowedPanel-window #13154 (@jtpio)pull_request_target to have write permission on forks #13060 (@fcollonval)micromamba to bootstrap the dev environment #13030 (@jtpio)python-version in the macos workflow #13014 (@jtpio)jupyterlab_widgets in the docs dependencies #12979 (@jtpio)(developer) label to the developer facing commands #12970 (@jtpio)jupyterlab_widgets==1.1.1 in docs-screenshots #12967 (@jtpio)dev_mode/style.js to the licenser ignore list #12902 (@jtpio)yjs-codemirror.next #12880 (@jtpio)yarn-deduplicate on build:core #12850 (@jtpio)verdaccio, start registry on 0.0.0.0 instead of localhost #12799 (@jtpio)marked and @types/marked #12747 (@krassowski)check_links job #14243 (@krassowski)jlpm to yarn 3.4.1 #13875 (@brichet)window.jupyterlab #13767 (@jtpio)CHANGELOG.md #13698 (@jtpio)scaleFactor value from the embed options when creating the PNG representation for a Vega-based chart #13610 (@joaopalmeiro)moment dependency #13469 (@jtpio)lab -> app #13223 (@davidbrochart)jupyter_server_config.py #13208 (@jtpio)en in conf.py #12707 (@jtpio)window.jupyterlab #13767 (@jtpio)Completer.IRenderer.sanitizer #13700 (@fcollonval)moment dependency #13469 (@jtpio)(GitHub contributors page for this release)
@3coins | @a3626a | @aditya211935 | @afshin | @agoose77 | @ajbozarth | @akhmerov | @alec-kr | @Alexboiboi | @andrii-i | @athornton | @blink1073 | @bollwyvl | @brichet | @c00kie123 | @cccs-nik | @chbrandt | @ChristopherDavisUCI | @damiend97 | @davidbrochart | @dependabot | @dlqqq | @dmonad | @kamalika0363 | @domoritz | @echarles | @ellisonbg | @ericsnekbytes | @fcollonval | @firai | @FoSuCloud | @fperez | @frenzymadness | @frivas-at-navteca | @gabalafou | @GabrielaVives | @github-actions | @HaudinFlorence | @hbcarlos | @hsuanxyz | @hugetim | @isabela-pf | @jasongrout | @JasonWeill | @jmk89 | @joaopalmeiro | @JohanMabille | @jtpio | @jupyterlab-probot | @kenyaachon | @kostyafarber | @krassowski | @kulsoomzahra | @liliyao2022 | @malemburg | @markgreene74 | @marthacryan | @martinRenou | @matthewturk | @mctoohey | @meeseeksdev | @meeseeksmachine | @mgcth | @minrk | @mlucool | @NikolayXHD | @oscar6echo | @peytondmurray | @pre-commit-ci | @psychemedia | @RobbyPratl | @jupyterlab | @rursprung | @siddartha-10 | @steff456 | @SylvainCorlay | @telamonian | @thetorpedodog | @thomasaarholt | @tonyfast | @trallard | @trungleduc | @vidartf | @vthinkxie | @welcome | @yangql176 | @yanmulin | @yczhangsjtu | @yumyumqing | @yuvipanda | @zrottman | @Zsailer
(GitHub contributors page for this release)
@andrii-i | @bollwyvl | @brichet | @damiend97 | @fcollonval | @github-actions | @JasonWeill | @jtpio | @jupyterlab-probot | @krassowski | @welcome
lineWiseCopyCut setting #14055 (@bollwyvl)(GitHub contributors page for this release)
@andrii-i | @blink1073 | @bollwyvl | @brichet | @bt- | @dlqqq | @domoritz | @echarles | @fcollonval | @fperez | @gabalafou | @GabrielaVives | @github-actions | @goanpeca | @HaudinFlorence | @hbcarlos | @ianhi | @jasongrout | @JasonWeill | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @meeseeksdev | @meeseeksmachine | @mlucool | @psychemedia | @telamonian | @tonyfast | @vidartf | @welcome
(GitHub contributors page for this release)
@fcollonval | @jupyterlab-probot | @meeseeksmachine
default locale will use OS default locale #13721 (@fcollonval)MainAreaWidget #13811 (@krassowski)Completer.IRenderer.sanitizer #13700 (@fcollonval)Contents.IModel #13216 (@krassowski).ipynb_checkpoints #13297 (@krassowski)jupyter_ydoc #13863 (@fcollonval)preferred_dir for examples #13788 (@fcollonval)settingEditorType #13761 (@jtpio)scaleFactor value from the embed options when creating the PNG representation for a Vega-based chart #13610 (@joaopalmeiro)IDocumentProviderFactory.IOptions generic to ISharedDocument #13490 (@jtpio)isUntitled to false on document path changes #13268 (@fcollonval)@lumino/widgets to 1.37.1 on 3.6 branch #13829 (@krassowski)preferred_dir for examples #13788 (@fcollonval)@jupyterlab/buildutils in @jupyterlab/builder #13741 (@jtpio)CHANGELOG.md #13698 (@jtpio)@jupyter/ydoc instead of @jupyter-notebook/ydoc #13506 (@jtpio)jupyter labextension #13424 (@jtpio)CHANGELOG.md #13698 (@jtpio)lab -> app #13223 (@davidbrochart)(GitHub contributors page for this release)
@afshin | @andrii-i | @blink1073 | @bollwyvl | @brichet | @Carreau | @davidbrochart | @echarles | @ellisonbg | @ericsnekbytes | @fcollonval | @fperez | @github-actions | @HaudinFlorence | @hbcarlos | @jasongrout | @JasonWeill | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @martinRenou | @meeseeksdev | @meeseeksmachine | @psychemedia | @SylvainCorlay | @trungleduc | @uenot | @vidartf | @welcome
jupyter_server dependency to < 3 #13068 (@Zsailer)isUntitled to false on document path changes #13268 (@fcollonval)lab -> app #13223 (@davidbrochart)(GitHub contributors page for this release) @Carreau | @davidbrochart | @ellisonbg | @fcollonval | @hbcarlos | @jasongrout | @jtpio | @jupyterlab-probot | @krassowski | @meeseeksdev | @meeseeksmachine | @SylvainCorlay | @trungleduc | @welcome
(GitHub contributors page for this release)
@agoose77 | @blink1073 | @ellisonbg | @fcollonval | @gabalafou | @github-actions | @jtpio | @jupyterlab-probot | @krassowski | @meeseeksmachine | @welcome
debugger variable renderer #12968 (@firai)(GitHub contributors page for this release)
@ajbozarth | @athornton | @blink1073 | @ellisonbg | @fcollonval | @goanpeca | @ian-r-rose | @isabela-pf | @jasongrout | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @JasonWeill | @krassowski | @KrishnaKumarHariprasannan | @malemburg | @manfromjupyter | @meeseeksdev | @meeseeksmachine | @mlucool | @saulshanabrook | @telamonian | @tgeorgeux | @trallard | @VersBersh | @vidartf | @welcome
(GitHub contributors page for this release)
@afshin | @agoose77 | @blink1073 | @davidbrochart | @fcollonval | @jasongrout | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @martinRenou | @meeseeksdev | @meeseeksmachine | @ryanlovett | @SylvainCorlay | @telamonian | @trungleduc | @welcome
eachLine loops #12746 (@vidartf)tmpPath #12823 (@fcollonval)marked and @types/marked #12747 (@krassowski)en in conf.py #12712 (@jtpio)(GitHub contributors page for this release)
@afshin | @aiqc | @davidbrochart | @dlqqq | @dmonad | @echarles | @ellisonbg | @fcollonval | @github-actions | @goanpeca | @hbcarlos | @jasongrout | @JohanMabille | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @JasonWeill | @krassowski | @martinRenou | @meeseeksdev | @meeseeksmachine | @siddartha-10 | @SylvainCorlay | @welcome | @williamstein
maxNumberOutputs #12598 (@fcollonval)(GitHub contributors page for this release)
@afshin | @blink1073 | @bollwyvl | @davidbrochart | @dmonad | @echarles | @ellisonbg | @fcollonval | @github-actions | @hbcarlos | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @meeseeksdev | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@fcollonval | @jtpio | @jupyterlab-probot | @karlaspuldaro | @meeseeksmachine | @welcome
preferredPath from the page config #12521 (@jtpio)(GitHub contributors page for this release)
@ajbozarth | @echarles | @fcollonval | @github-actions | @jtpio | @jupyterlab-probot | @meeseeksmachine | @welcome
expect #12311 (@fcollonval)searchText and replaceText to search and replace commands #12310 (@fcollonval)(GitHub contributors page for this release)
@bollwyvl | @davidbrochart | @echarles | @fcollonval | @gabalafou | @github-actions | @jtpio | @jupyterlab-probot | @JasonWeill | @krassowski | @meeseeksdev | @meeseeksmachine | @welcome
expect #12311 (@fcollonval)searchText and replaceText to search and replace commands #12310 (@fcollonval)(GitHub contributors page for this release)
@afshin | @bollwyvl | @davidbrochart | @echarles | @fcollonval | @gabalafou | @github-actions | @jtpio | @jupyterlab-probot | @JasonWeill | @krassowski | @meeseeksdev | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@aiqc | @blink1073 | @echarles | @fcollonval | @github-actions | @jasongrout | @jtpio | @jupyterlab-probot | @JasonWeill | @krassowski | @meeseeksdev | @meeseeksmachine | @welcome
null default not getting marked as modified #12240 (@krassowski)expected_http_error function from jupyterlab_server.tests #12228 (@jtpio)jupyterlab-some-package in docs #12248 (@jtpio)(GitHub contributors page for this release)
@afshin | @aiqc | @ajbozarth | @blink1073 | @bollwyvl | @damianavila | @davidbrochart | @echarles | @fcollonval | @github-actions | @hbcarlos | @isabela-pf | @jtpio | @jupyterlab-probot | @JasonWeill | @krassowski | @marthacryan | @martinRenou | @meeseeksdev | @meeseeksmachine | @mlucool | @rccern | @welcome
(GitHub contributors page for this release)
@fcollonval | @github-actions | @jtpio | @jupyterlab-probot | @meeseeksmachine
CodeCellModel.onModelDBOutputsChange #12147 (@trungleduc)(GitHub contributors page for this release)
@davidbrochart | @echarles | @ellisonbg | @fcollonval | @github-actions | @jasongrout | @jtpio | @jupyterlab-probot | @JasonWeill | @krassowski | @martinRenou | @meeseeksmachine | @welcome
Accel Enter keyboard shortcuts for the notebook:run-cell command #11942 (@jtpio)maintainer-tools base setup action #11595 (@jtpio)3.1.19 Changelog Entry #11842 (@jtpio)(GitHub contributors page for this release)
@agoose77 | @andrewfulton9 | @baggiponte | @blink1073 | @bollwyvl | @Carreau | @davidbrochart | @dmonad | @echarles | @ellisonbg | @ErikBjare | @fcollonval | @github-actions | @hbcarlos | @isabela-pf | @jasongrout | @JohanMabille | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @JasonWeill | @krassowski | @marthacryan | @meeseeksdev | @meeseeksmachine | @mlucool | @schmidi314 | @SylvainCorlay | @Sync271 | @telamonian | @thesinepainter | @trungleduc | @welcome | @yuvipanda | @Zsailer
maintainer-tools base setup action #11595 (@jtpio)(GitHub contributors page for this release)
@andrewfulton9 | @blink1073 | @bollwyvl | @echarles | @fcollonval | @github-actions | @hbcarlos | @isabela-pf | @jasongrout | @JohanMabille | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @marthacryan | @meeseeksdev | @meeseeksmachine | @mlucool | @welcome | @yuvipanda | @Zsailer
(GitHub contributors page for this release)
@github-actions | @hbcarlos | @jtpio | @jupyterlab-probot | @meeseeksdev | @meeseeksmachine
No merged PRs
(GitHub contributors page for this release)
@andrewfulton9 | @bollwyvl | @davidbrochart | @echarles | @ellisonbg | @fcollonval | @github-actions | @hbcarlos | @jasongrout | @JohanMabille | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @meeseeksdev | @meeseeksmachine | @schmidi314 | @TheOtherRealm | @thesinepainter | @welcome
toggleCollapsedSignal to handler right at creation of Markdown #11514 (@fcollonval)sanitize-html pin to 3.5.3 #11513 (@fcollonval)$ #11488 (@krassowski)(GitHub contributors page for this release)
@blink1073 | @bollwyvl | @dmonad | @echarles | @ellisonbg | @fcollonval | @github-actions | @hbcarlos | @jasongrout | @jess-x | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @JasonWeill | @krassowski | @meeseeksdev | @meeseeksmachine | @trungleduc | @welcome
undomanager paste regression - fixes #10928 #11471 (@dmonad)toc-extension #11460 (@fcollonval)(GitHub contributors page for this release)
@blink1073 | @fcollonval | @github-actions | @isabela-pf | @jasongrout | @jtpio | @jupyterlab-probot | @krassowski | @meeseeksdev | @meeseeksmachine | @welcome | @williamstein
themePath and schemaDir #11427 (@jtpio)(GitHub contributors page for this release)
@dmonad | @fcollonval | @github-actions | @jasongrout | @jtpio | @jupyterlab-probot | @JasonWeill | @krassowski | @meeseeksdev | @meeseeksmachine
orig_nbformat optional #11005 #11370 (@nanoant)release_test #11390 (@fcollonval)cat package.json #11372 (@ceesu)@playright/test dependency in Galata #11371 (@jtpio)clearSignalData reference (now Signal.clearData) #11339 (@krassowski)(GitHub contributors page for this release)
@blink1073 | @davidbrochart | @ellisonbg | @fcollonval | @github-actions | @jasongrout | @jess-x | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @meeseeksmachine | @trungleduc | @welcome | @williamstein | @Zsailer
'\r' ended files #11310 (@lucabarcelos)indexChanged on model state updates #11298 (@krassowski)www. with https:// #11272 (@krassowski)(GitHub contributors page for this release)
@3coins | @blink1073 | @ellisonbg | @fcollonval | @github-actions | @jasongrout | @jtpio | @jupyterlab-probot | @meeseeksmachine | @welcome
shareUrl #11188 (@fcollonval)preferred-dir handling #10667 (@goanpeca)\r line endings #11271 (@jasongrout)cd('/') when already in / #11219 (@minrk)\n #11141 (@jasongrout)i18n will pass on zeroed patch pre-release version #11214 (@fcollonval)window.open to make it work also in desktop app #11202 (@mbektas)page_config.json #11152 (@achimgaedke)(GitHub contributors page for this release)
@3coins | @achimgaedke | @blink1073 | @echarles | @ellisonbg | @fcollonval | @github-actions | @goanpeca | @hbcarlos | @isabela-pf | @jasongrout | @jess-x | @joelostblom | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @loichuder | @meeseeksdev | @meeseeksmachine | @SylvainCorlay | @trungleduc | @welcome
(GitHub contributors page for this release)
@agoose77 | @andrewfulton9 | @baggiponte | @blink1073 | @bollwyvl | @Carreau | @davidbrochart | @dmonad | @echarles | @ellisonbg | @fcollonval | @github-actions | @hbcarlos | @isabela-pf | @jasongrout | @jess-x | @JohanMabille | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @JasonWeill | @krassowski | @meeseeksdev | @meeseeksmachine | @schmidi314 | @SylvainCorlay | @telamonian | @thesinepainter | @trungleduc | @welcome | @williamstein | @yuvipanda | @Zsailer
(GitHub contributors page for this release)
@blink1073 | @github-actions | @jupyterlab-probot
(GitHub contributors page for this release)
@jupyterlab-probot | @meeseeksmachine
cd('/') when already in / #11219 (@minrk)i18n will pass on zeroed patch pre-release version #11214 (@fcollonval)i18n #11190 (@fcollonval)(GitHub contributors page for this release)
@blink1073 | @echarles | @ellisonbg | @fcollonval | @github-actions | @goanpeca | @hbcarlos | @isabela-pf | @jasongrout | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @loichuder | @meeseeksdev | @meeseeksmachine | @SylvainCorlay | @welcome
(Skipped due to errors in release process)
(GitHub contributors page for this release)
@blink1073 | @echarles | @github-actions | @goanpeca | @jess-x | @jupyterlab-probot | @krassowski | @meeseeksdev | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@blink1073 | @fcollonval | @github-actions | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @meeseeksmachine | @Mithil467 | @trungleduc | @welcome
(GitHub contributors page for this release)
@blink1073 | @github-actions | @jasongrout | @jtpio | @jupyterlab-dev-mode | @jupyterlab-probot | @krassowski | @meeseeksmachine | @Mithil467
(GitHub contributors page for this release)
@blink1073 | @echarles | @fcollonval | @jtpio | @jupyterlab-dev-mode | @meeseeksmachine
(GitHub contributors page for this release)
@agoose77 | @baggiponte | @blink1073 | @echarles | @ellisonbg | @fcollonval | @goanpeca | @jasongrout | @jtpio | @jupyterlab-dev-mode | @krassowski | @mbektas | @meeseeksdev | @meeseeksmachine | @SarunasAzna | @welcome
(GitHub contributors page for this release)
@blink1073 | @jupyterlab-dev-mode | @meeseeksdev | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@blink1073 | @fcollonval | @jupyterlab-dev-mode | @krassowski | @meeseeksdev | @meeseeksmachine
npm-cli-login utility from buildutils #10828 (@krassowski)(GitHub contributors page for this release)
@3coins | @afshin | @blink1073 | @fcollonval | @goanpeca | @jasongrout | @jupyterlab-dev-mode | @krassowski | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@blink1073 | @jupyterlab-dev-mode | @krassowski | @meeseeksmachine
isLocal check #10773 (@loichuder)(GitHub contributors page for this release)
@echarles | @jupyterlab-dev-mode | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@AnudeepGunukula | @blink1073 | @ellisonbg | @fcollonval | @goanpeca | @jasongrout | @jupyterlab-dev-mode | @krassowski | @meeseeksmachine | @welcome
(GitHub contributors page for this release)
@blink1073 | @bollwyvl | @goanpeca | @hbcarlos | @jtpio | @jupyterlab-dev-mode | @meeseeksmachine | @welcome
--collaborative flag. See full documentation on collaboration.Settings -> Auto Close Brackets) or from the Advanced Settings Editor.
autoClosingBrackets by default everywhere #9488 (@telamonian)cursorBlinkRate settings for editors #10485 (@fcollonval)Tooltip #10590 (@krassowski)activeIndex and indexChanged #10244 (@hbcarlos)tabIndex taking focus away from notebook #10580 (@krassowski)menu attribute #10567 (@fcollonval)docmanager:name-on-save command #10355 (@jtpio)Copy shareable link command - fix the filename encoding (for files with spaces in the name) #10015 (@ognjenjevremovic)marked dep past vulnerability #9809 (@telamonian)ArgumentConflict is not defined #9760 (@andrewfulton9)dirty plugin id #10623 (@jtpio)js-services test with the new ipykernel 6 #10592 (@jtpio)PromiseDelegate in yprovider.ts #10587 (@jtpio)YjsEchoWebSocket #10586 (@jtpio)path-ignore #10568 (@jtpio)ui-tests folder to the labeler #10386 (@jtpio)mode from the JupyterFrontEnd.IShell interface #10368 (@jtpio)IMainMenu dependency #10356 (@jtpio)documentation label for docs #10336 (@jtpio)ws dependency #10316 (@jtpio)yprovider.ts #10308 (@jtpio)sanitize-html~=2.3.3 #10220 (@jtpio)url-parse~=1.5.1 #10219 (@jtpio)jupyter_packaging #10217 (@jtpio)app example #10078 (@jtpio)app example #10053 (@jtpio)buffer dependency from @jupyterlab/apputils #10050 (@jtpio)selectionExecuted signal (copy-paste error) #10579 (@krassowski)ipykernel to the debugger user docs #10512 (@jtpio)documentsearch description in package.json #10265 (@jtpio)notebook from the contributing guide #10200 (@jtpio)(GitHub contributors page for this release)
@0618 | @achandak123 | @afonit | @afshin | @AgoCan | @agoose77 | @ainzzorl | @aiqc | @ajbozarth | @akx | @andrewfulton9 | @Ashish-15s | @blink1073 | @bollwyvl | @bsyouness | @cameron-toy | @consideRatio | @darcsoel | @davidbrochart | @dge8 | @dharmaquark | @dhirschfeld | @DianeHu | @dmonad | @echarles | @ellisonbg | @fasiha | @fcollonval | @flying-sheep | @fperez | @gereleth | @goanpeca | @Guillaume-Garrigos | @hbcarlos | @ian-r-rose | @isabela-pf | @jahn96 | @janjagusch | @jasongrout | @jayqi | @jess-x | @jhamet93 | @jluttine | @jochym | @JohanMabille | @jtpio | @jupyterlab-dev-mode | @krassowska | @krassowski | @legendb317 | @loichuder | @maartenbreddels | @manavendrasen | @manfromjupyter | @mariobuikhuizen | @marthacryan | @martinRenou | @mbektas | @meeseeksdev | @meeseeksmachine | @mellesies | @mgeier | @mlucool | @mnowacki-b | @mwakaba2 | @NPetz | @ognjenjevremovic | @ohrely | @palewire | @paravatha | @partev | @plan-do-break-fix | @robertpyke | @RodyLipson | @sarahspak | @saulshanabrook | @shngt | @skyetim | @smacke | @stadlerb | @SylvainCorlay | @telamonian | @tonyfast | @trallard | @vidartf | @vkaidalov-rft | @welcome | @yasmin-bb | @yuvipanda
See the JupyterLab 3.0 milestone on GitHub for the full list of pull requests and issues closed.
sanitize-html~=2.3.3 #10220 @jtpiourl-parse~=1.5.1 #10219 @jtpiofile_to_run logic.
(#9848)@jupyterlab/rendermime: upgraded marked dep past
vulnerability.
(#9809)Path.resolve() to get canonical case-sensitive path names.
(#9709)'restarting' instead of 'autorestarting' from server.
(#9674)jupyterhub make_singleuser_app mixin when available.
(#9681)html-webpack-plugin to support webpack 5.
(#9651)xeus-robot to the debugger documentation.
(#9661)?? help on Windows.
(#9617)?? in plain js, as it is too new.
(#9606)jupyterlab.upgrade_extension on Windows.
(#9546)--checkout 3.0 in the extension tutorial.
(#9545)In JupyterLab 3.0, a new recommended way of distributing and installing extensions as Python pip or conda packages is available. Installing such extensions does not require rebuilding JupyterLab and does not require having NodeJS installed. The previous way of distributing extensions as npm packages requiring rebuilding JupyterLab is still available as well. See the documentation for more details.
JupyterLab now provides the ability to set the display language of the user interface. See the documentation for more details.
JupyterLab now ships with a debugger front-end by default, available for kernels that support the new debugging protocol. See the documentation for more details.
The Simple Interface mode (previously Single Document Mode) is now more streamlined. JupyterLab now supports showing the current file in use in the browser URL bar, similar to the classic Jupyter Notebook.
The popular Table of Contents extension is now part of core JupyterLab. This core extension makes it easy to see an outline view of notebooks and other documents.
The file browser now has a filter input which filters the list of files using the same fuzzy matching as the command palette.
The default interface for JupyterLab now has system-wide sidebar panes on the left side and sidebar panels that interact with a specific document (such as the debugger or notebook property inspector) on the right side. As always, you can move panes between the left and right sidebars (right click on the sidebar icon, or change it in Advanced Settings).
The command palette is now a floating window that appears on top of your JupyterLab workspace. This enables users to quickly invoke a command while keeping the sidebar closed or switching sidebar panels. The command palette can be put back into the sidebar by adjusting the default in Advanced Settings.
JupyterLab 3.0 now depends on Jupyter Server, which is a new Jupyter project based on the server portion of the classic Notebook server. See the Migration Guide to migrate custom notebook configuration to Jupyter Server.
Users will typically consume prebuilt extensions, which are Python
packages with static assets built using JupyterLab. See the updated
APOD tutorial for the workflow of creating a prebuilt extension from
scratch. For existing extensions, there is a new
python -m jupyterlab.upgrade_extension script that can be used to
upgrade extensions. The script will update the relevant dependencies and
add the boilerplate to create the Python package. For extensions that
already contained Python packages (typically server extensions), the
files are not overwritten, and some manual copying of content is
required. See the
example,
which used this script heavily. There are two highlighted commits that
demonstrate upgrading a server extension. Prebuilt extensions are also
known as federated extensions in the changes below, since they use the
federated module capability in Webpack 5.
--development and --source-map flags for building
extensions.
(#8961,
#8952)JupyterLab 3.0 uses Jupyter Server instead of the classic Notebook server. Existing server extensions will be shimmed, but it is advised to update extensions to use jupyter_server.
static_url_prefix, added classic notebook flags and aliases,
and bumped jupyterlab_server dependency
(#8910)jupyter_server
(#8898,
#8794)app_version next to running on jupyter_server
(#8889,
#8812)The JupyterLab UI now supports translation.
optionsmap to a an array of tuples to be able to localize
the options
(#8820)jupyterlab/debugger PR #527 to JupyterLab
(#8878)husky dependencies from toc and toc-extension
(#8571)'content-type' should not be overwritten
(#8891,
#8890)extension_points.rst to fix syntax error of code
(#8745)See the JupyterLab 2.2 milestone on GitHub for the full list of pull requests and issues closed.
We are very excited to add Eric Charles to the core team this month! (#8513)
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)
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)See the JupyterLab 2.0.2 milestone on GitHub for the full list of pull requests and issues closed.
IFuture.done typings more correct by
not including undefined
(#8032)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.
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)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)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)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.
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)
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.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)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)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)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](https://github.com/jupyterlab/jupyterlab/pull/4115))./tree handler and Copy Shareable Link to file listing
right click menu:
https://github.com/jupyterlab/jupyterlab/pull/3396jupyter 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/3270Bug fix for file browser right click handling. https://github.com/jupyterlab/jupyterlab/issues/3019
VDomRenderer class.
#3133This 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.
#3077vega2-extension as a built-in example. Also overhauled the
rendermime interfaces.
https://github.com/jupyterlab/jupyterlab/pull/2488
https://github.com/jupyterlab/jupyterlab/pull/2555
https://github.com/jupyterlab/jupyterlab/pull/2595Widget in the name and associated
package names. https://github.com/jupyterlab/jupyterlab/pull/2177jupyter labhub command to launch JupyterLab on JupyterHub:
https://github.com/jupyterlab/jupyterlab/pull/2222utils from @jupyterlab/services in favor of
PageConfig and ServerConnection.
https://github.com/jupyterlab/jupyterlab/pull/2173
https://github.com/jupyterlab/jupyterlab/pull/2185Release Notes:
Tabs sidebar.
https://github.com/jupyterlab/jupyterlab/pull/2037Numerous bug fixes and improvements.
Mainly backend-focused release with compatibility with Phosphor 1.0 and a big refactor of session handling (the ClientSession class) that provides a simpler object for classes like notebooks, consoles, inspectors, etc. to use to communicate with the API. Also includes improvements to the development workflow of JupyterLab itself after the big split.
https://github.com/jupyterlab/jupyterlab/pull/1984 https://github.com/jupyterlab/jupyterlab/pull/1927
@phosphor packages * brings a new Command Palette
interaction that should be more intuitive, and restores the ability
to drag to dock panel edges
https://github.com/jupyterlab/jupyterlab/pull/1762.RenderMime and associated renders to use live models.
See https://github.com/jupyterlab/jupyterlab/pull/1709 and
https://github.com/jupyterlab/jupyterlab/issues/1763.