@jupyterlab/builder
A JupyterLab package which provides functions that are used to compile and build JupyterLab extensions.
This package is only intended for use within Node.js environments.
JupyterLab - Extension Builder
A JupyterLab package which provides functions that are used to compile and build JupyterLab extensions.
This package is only intended for use within Node.js environments.
(changelog)=
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:
@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 | @RRosio
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 | @RRosio | @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 | @RRosio | @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 | @RRosio | @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 | @RRosio | @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 | @RRosio | @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 | @RRosio | @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 | @RRosio | @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)IDrive
s.
(#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.