v3.0.0
User-facing changes
Extensions can be installed without building JupyterLab with NodeJS
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.
The JupyterLab interface supports multiple languages
JupyterLab now provides the ability to set the display language of the
user interface. See the
documentation
for more details.
A new visual debugger
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.
Improvements to Simple Interface mode and Mobile
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.
Table of Contents is now in core
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.
Visual filter in file browser
The file browser now has a filter input which filters the list of files
using the same fuzzy matching as the command palette.
Property inspector moved to right sidebar
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).
Command Palette
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.
Jupyter Server
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.
For Developers
Prebuilt Extensions
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.
- Better handling of extensions that provide both prebuilt and source
extensions.
(#9489,
#9277)
- Document new page config conventions
(#9454,
#9240)
- Use stylemodule in prebuilt extensions
(#9460,
#9459)
- Update style-loader and mini-css-extract-plugin
(#9451)
- Use a more explicit stylemodule key for js css imports
(#9427,
#9423)
- Ignore source packages when building or loading jupyterlab if there
is a prebuilt package
(#9424,
#9277)
- Include federated extensions in extension manager from the api
(#9390,
#9367)
- Handle hyphens and switch to importlib in the develop script
(#9471)
- Chunk the jupyterlab and lumino modules together when building the
core application
(#9359)
- Link to the documentation in the extension manager federated dialog
(#9327)
- Federated extension script: change package name logic
(#9326,
#9320)
- Do not error if requiredversion is not provided.
(#9321)
- Reinstate extension manager
(#9317)
- Built-in extensions using federated dependencies
(#9310)
- Update upgrade script to use labextension for outputdir
(#9306)
- Require 'package' instead of 'package/' so webpack activates
sharing
(#9300)
- Enable using federated extensions in dev mode when a flag is set.
(#9286,
#9235)
- Update webpack to 5.3.1
(#9245)
- Adds package installation info to labextension list and uninstall
output
(#9244)
- Restructure federated extensions to allow for package manager
metadata
(#9239)
- List the dynamic extensions in the extension manager
(#9236,
#8804)
- Refuse to uninstall federated extensions.
(#9232,
#9230)
- Allow custom webpack config for federated extensions
(#9224,
#9175)
- Use the new webpack 5 'auto' publicpath
(#9062,
#9043)
- Bump webpack to 5.0rc1
(#9091)
- Update the upgrade script to not replace dev deps to caret
(#9090)
- Bump webpack to 5.0rc2
(#9103)
- Fix watch mode
(#9101,
#9089)
- Upgrade to webpack 5
(#9148)
- Fix watch mode
(#9146,
#9116)
- Docs: fix commands to watch
(#9163)
- Docs: update jupyter lab command in ext dev guide
(#9165,
#)
- Update release test script to also install federated extensions
(#9166,
#8818)
- Remove @types/webpack (shipped with webpack 5)
(#9167)
- Mention jupyter-packaging and cookiecutter in migration guide
(#9199)
- Install jupyter_packaging in tutorial
(#9190,
#9174)
- Handle sharing of linked packages and locally installed extensions
(#9213,
#9203)
- Clean up federated extension install and upgrade
(#8974)
- Add
--development
and --source-map
flags for building
extensions.
(#8961,
#8952) - Add extension upgrade script
(#8950,
#8870,
#8869)
- Improved handling of disabled extensions
(#8944,
#7481)
- Add development mode to lab extension build scripts
(#8918)
- Pull federated extension loading data from the webpack compilation
(#8913,
#8842)
- Update labextension build cli to include a parameter for setting the
webpack publicpath option
(#8911)
- Update apod extension tutorial
(#8905,
#8859)
- Let webpack automatically determine the required version of
dependencies
(#8875)
- Fix rebuild of federated extension and add discovery metadata to
schema
(#8874)
- Fix build issues with publicpath
(#8871)
- Split buildutils into buildutils and builder
(#8863,
#8857)
- Dynamically set public path in generated extensions according to
page config
(#8861,
#8827)
- Clean up federated extension cli
(#8855,
#46)
- Fix app example.
(#8852)
- Add lumino dependencies to buildutils so the phosphor webpack
aliasing works
(#8850,
#8822)
- Add another federated example package.
(#8847,
#5)
- Fixes for the federated example
(#8846)
- Add slash to publicpath
(#8845)
- Update watch plugin for webpack 5
(#8841,
#8705)
- Adding a mime extension to the webpack config
(#8825)
- Fix labextension build
(#8821)
- Fix boolean error
(#8819)
- CI and extension developer cleanup
(#8810)
- Adding extension to shared modules list
(#8808)
- Module federation implementation
(#8802)
- Fix examples and update webpack
(#8779,
#8767)
- Add extension building scripts
(#8772)
- Keep the existing webpack file in staging
(#8673)
- Workaround for vega build error
(#8666)
- Add missing polyfill
(#8664,
#8660)
- Add url as a polyfill dependency for apputils.
(#8659,
#8657)
- Update to webpack 5b21
(#8651)
- Fix examples and break into separate build
(#8647,
#8646)
- Add cur extension for url-loader
(#8634)
- Experiment with module federation
(#8385)
Jupyter Server
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.
- Update server(s), nbclassic, pytest fixtures
(#9478,
#9473)
- Add jupyter_core as a dependency
(#9251)
- Put exposeappinbrowser and quitbutton values back in page config
(#9262)
- Update favicon handling
(#9145,
#9138)
- Enable JupyterLab to run as an old notebook server extension
(#8956,
#8943)
- Fixed
static_url_prefix
, added classic notebook flags and aliases,
and bumped jupyterlab_server
dependency
(#8910) - Use favicons provided by
jupyter_server
(#8898,
#8794) - Load
app_version
next to running on jupyter_server
(#8889,
#8812) - Reinstate the labhubapp
(#8806,
#8704)
- Jupyterlab as server extension
(#7416)
Internationalization
The JupyterLab UI now supports translation.
- Cleanup tsconfig for the translation extension
(#9357)
- Add options to add prefix to strings
(#8946)
- Add a standalone translation manager to be used outside of plugins
(#8945)
- Add missing string fixes
(#8888)
- Add crowdin badge
(#8823)
- Change
optionsmap
to a an array of tuples to be able to localize
the options
(#8820) - Localize strings in jlab
(#8800)
- Add translation package
(#8681)
Visual Debugger
- Debugger-sidebar
(#9452)
- Handle multiple scopes in the debugger variables viewer
(#9346)
- Remove the ptvsd dependency from the debugger user docs
(#9344)
- Throws an error if the kernel cannot start the debugger
(#9426)
- Replace switch in debugger
(#9432,
#9354)
- Sets terminatedebuggee to false
(#9362)
- Add missing return signatures in debugger sidebar
(#9088)
- Fix invisible breakpoint in debugger
(#8908)
- Port
jupyterlab/debugger
PR #527 to JupyterLab
(#8878) - Add jupyterlab debugger to core
(#8747,
#75)
Table of Contents
- Update toc ui
(#9275)
- Add tests for the toc
(#8757,
#8558)
- Change toc to use labicon
(#8692,
#8557)
- Switch from using settings registry to a signal for notebook
collapsing behavior in toc
(#8601)
- Remove
husky
dependencies from toc
and toc-extension
(#8571) - Merge toc extension into core
(#8538)
Other
- Resolve 'restarting' state on reconnect
(#9484,
#9008)
- Upgrade typedoc
(#9483)
- Update to typescript 4.1.3
(#9476)
- Disable shut down all button if there is no running kernel or
terminal
(#9468,
#48)
- Make some dependencies optional for the code console plugin
(#9467)
- Require tornado>=6.1.0
(#9453)
- Pin to tornado>=6.1 on binder
(#9449)
- Fix some of the ui-components dependency warnings
(#9448)
- Fix browser test
(#9447)
- Support for lowercase search queries in the file browser
(#9446)
- Set the tabs menu title by default
(#9445)
- Add tests for interop between source and prebuilt extensions
(#9443,
#9333)
- Make itreepathupdater optional in file browser plugin
(#9442)
- Make ilabshell optional in the filebrowser factory plugin
(#9439)
- Reduce yarn timeout
(#9419)
- Remove unused requires for the tree-resolver plugin
(#9412)
- Update @types/react to ^17.0.0
(#9409)
- Make css dependency graph of js modules
(#9407)
- Cleanup unused python imports in examples/
(#9404)
- Clear the model and the signals upon continue response
(#9402)
- Fix scroll positions when clearing outputs
(#9400,
#9331)
- Remove initial extra _onmimetypechanged call
(#9394)
- Bump the eslint dev dependencies
(#9391)
- Reconnect to kernel on manual restart
(#9388)
- Remove the memory usage status bar item
(#9386,
#9363)
- Change user references from single-document mode to simple interface
(mode)
(#9380,
#9378)
- Reconnect to kernel on restart action
(#9371)
- Add a polyfill for path in the base webpack config
(#9368,
#9345)
- Add reconnect to kernel main menu item, and notebook implementation.
(#9356,
#9353)
- Update blueprint dependencies
(#9350)
- Target sys-prefix by default but allow you to specify user
(#9347)
- Eliminate eager sharing
(#9348,
#9343)
- Revert opening in new tab in single-document mode
(#9334,
#9323)
- Eager share only core packages and their dependencies
(#9332,
#9329)
- Changed the expression to "server unavailable or unreachable"
instead of "server not running"
(#9325)
- Increase the pause between publishing and using npm packages to 5
minutes
(#9319)
- Lint extension manager
(#9318)
- Refactor build conventions
(#9312,
#9304)
- Make ilabshell optional for the launcher extension
(#9305)
- Update binder to use conda, which allows us to install our own
nodejs.
(#9298)
- Move the single document switch to the status bar
(#9296)
- Added utf-8 encoding parameter to create process
(#9294,
#8600)
- Fix linting errors in github prs
(#9293)
- Enable mimedocument to use an optional specific renderer
(#9291)
- Pause after publishing packages to allow npm time to update their
listing
(#9288)
- Sidebar width
(#9287,
#8938)
- Mybinder.org link for people who want to test their own branches in
the developer guidelines
(#9284,
#9255)
- Remove ensure-max-old-space script
(#9282)
- Fix usage tests refusing to uninstall federated extensions
(#9281,
#9280)
- Add a new menu shell area
(#9274)
- Fix #9255
(#9273,
#9255)
- Fix theme path in jupyterlab builder
(#9272)
- Move document mode switch to separate plugin
(#9270)
- Fix styling of single-document mode switch in menu bar
(#9267)
- Make pdf viewer extension recognize pdf files
(#9266)
- Fix relative path handling in markdown images
(#9264,
#9253,
#9243)
- Add jupyterhub to page config
(#9256,
#9248)
- Update to webpack-cli 4.1.0
(#9254)
- Upgrade to react 17
(#9227)
- Extension documentation
(#9221)
- Lint fixes
(#9218)
- Update change log
(#9217)
- Update committer list
(#9215)
- Upgrade to TypeScript 4
(#8883)
- File browser filter
(#8615)
- Update yarn.lock.
(#9095)
- Handle notebook kernel in busy state on page reload
(#9077)
- Use span element to maintain ellipsis
(#9075,
#9074)
- Add codemirror singleton plugin
(#9067)
- Support token authentication for terminal websocket communication
(#9080)
- Do not special-case logic for mainareawidget.
(#9094)
- Set an icon for the inspector main area widget
(#9093)
- Fix the open tabs handling of mainareawidget icons
(#9092,
#126)
- Sort completion filtering results
(#9098,
#9048,
#9048)
- Add hover scrolling to menu, like toolbar.
(#9097)
- Add codemirror simple mode addon
(#9123)
- Create codeql-analysis.yml
(#9119)
- Create ensurevimkeymap function
(#9161)
- Increase size of docstring pop up tooltip
(#9134,
#9085)
- Add a 2.x -> 3.x migration guide
(#9162,
#9118)
- Add an offline circle icon for disconnected or unknown kernel state
(#9172)
- Include js api in sphinx docs
(#9179)
- Update rtd build
(#9182)
- Allow to substitute the default completer renderer
(#8930,
#8926)
- Update dependencies for beta
(#8921)
- Test cleanup
(#8894)
- Resize isolated iframes on content height change
(#8909,
#5696)
- Update minimum python version to python 3.6.
(#8903)
- Update yarn.lock
(#8862)
- Makes some properties and methods of class dsvmodel accessible
outside the class.
(#8849,
#8848)
- Do not use token parameters in websocket urls
(#8835,
#8813)
- Use blocked/allowed extension naming in jupyterlab
(#8799,
#8533)
- Create icon for pdfs in the filebrowser
(#8791)
- Correctly set base_url on workspace apps
(#8788)
- Pass in isessioncontextdialogs to notebookwidgetfactory
(#8778)
- Update encoding version in vega sample.
(#8766)
- Upgrade codemirror
(#8739)
- Rename the logconsole:nboutput plugin id
(#8729)
- Rename the celltags plugin id to @jupyterlab/celltags
(#8728)
- Uncaught typeerror when switching kernels
(#8727)
- Change inspector detail_level to 1
(#8725)
- Change main menu ranks to allow for application menu to l of file
(#8719)
- Handle errors in async browser_check
(#8717,
#8709)
- Add mehmet and andrew to contributors, fix last name order
(#8712)
- Updated puppeteer version to v4.0.0
(#8707)
- Update the singleton packages to include at least every package with
a 'tokens.ts' file
(#8703)
- Update link to jupyter contributing guide
(#8697,
#8682)
- Added ability to delete a document from titlebar context menu
(#8670)
- Move codemirror html tree and related css to shadow dom
(#8584)
- Support macoptionismeta option in terminal
(#8573,
#4236)
- Align output baseline with prompt
(#8561,
#8560)
- Use the same font-family for cell prompt and code
(#8553,
#8552)
- Prompt to save files before rebuild
(#8526,
#7372)
- Change json5 payload to json payload
(#8225)
- Move notebook logging plugin to notebook-extension package
(#7830)
- First pass at adding scroll to cell method
(#6818)
- Add a debugger section to the user docs and contributing guide
(#8977)
Single Document Mode and Mobile Enhancements
- Make the single document title widget work for widgets that are not
main area widgets
(#9078)
- Add border at top of single-document open menus
(#9096,
#9065)
- Implement a simple checkbox for single-document mode in the menu
bar. (#9100,
#8292)
- Followup #9100: made sdm switch pretty, accessible
(#9104)
- Improved url scheme, state, interactions for single document mode
(#8715)
- Add workspace mime handler and loading/saving workspaces manually
(#8691)
- Modify ansi color fix
(#8555,
#8554)
- Improve single document mode to address classic notebook usage cases
(#8531)
- Incrementally improve jupyterlab mobile ux
(#8456)
Benchmarks (now a separate repository)
- Move benchmarks to seperate repo
(#8795)
- Fix off by one error in benchmark samples
(#8785)
- Benchmark params configurable and increase timeout
(#8786)
- Benchmarks: new erroroutputs + larger timeout + notebook defs in
subfolder
(#8783)
- Add ability to compare benchmarks
(#8737)
- Benchmark notebook loads
(#8020)
Bugfixes
- Fix lerna warning
(#9061)
- Fix doc build
(#9063,
#9060)
- Make text settings menu work
(#9066,
#9042)
- Fix lint check for the codemirror-extension package
(#9087)
- Fix the examples ci
(#9150)
- Test: cleanup eslint jest rules and files
(#9125)
- Switch to a different murmurhash2 implementation to handle unicode
characters
(#9158)
- Add more xxx to the mktemp command in release_test.sh
(#9131)
- Add setup.py and pyproject.toml to manifest.in
(#9129)
- Urlext.join cant handle colon in relative paths
(#9169,
#9159)
- Remove absolute document search pane width
(#9180,
#9178)
- Update session and kernel manager data only if there was a real
change.
(#9189,
#9133)
- Update metadata recorded to align better with jupyter protocol
(#9206)
- Fix focus issues with command palette
(#9210,
#9121)
- Update mimetype for dragging files
(#8965,
#8934)
- Fix comment explaining the extension entry point.
(#8964)
- Security docs: link to jupyter-server instead of jupyter-noteboook
(#8954)
- Fix titles in the extension development docs
(#8948)
- Fix link syntax in the apod tutorial
(#8942)
- Fix codemirror text color issue with dark jupyter theme.
(#8919,
#8792)
- Remove the extension path, not the entire extension directory, when
uninstalling an extension
(#8904)
- Header
'content-type'
should not be overwritten
(#8891,
#8890) - Make sure adding or removing a cell tag actually replaces the tag
list, so a changed signal is emitted for the cell metadata
(#8751,
#8534)
- Fix up ensure package and repo
(#8749,
#8748)
- Add comma in
extension_points.rst
to fix syntax error of code
(#8745) - Fix: Contributing Guide Link is Out of Sync
(#8665)
- Fix api docs links
(#8624,
#8616)
- Fix handling of disposed widgets after closing a panel in tutorial
(#8623)
- Fix small typos in docs for developing extensions
(#8622)
- Reload the application on manual state reset
(#8621)
- Remove superfluous page reload on workspace reset
(#8619)
- Remove superfluous console log from the application shell
(#8618)
- Fix minor typos in extension tutorial
(#8613)
- Fix minor typos in docs for extensions.
(#8551)
- Fix small typo in install docs
(#8550)
- Fix more linting errors
(#8454)
- Reconnect a websocket when a kernel is restarted.
(#8432)