@jupyterlab/toc
Advanced tools
Changelog
4.0.0 - Highlights
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:
<!-- <START NEW CHANGELOG ENTRY> -->Changelog
v3.0.0
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)Changelog
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)