4.5.0
New features added
- Add terminal search functionality #17691 (@ianthomas23)
Enhancements made
- Fix kernel status display in status bar #18047 (@Darshan808)
- Introduce
DebuggerDisplayRegistryto provide context-aware display names for debugger panels #18043 (@arjxn-py) - Introduce new token for the default
IContentProvider#18027 (@martinRenou) - Update
Show more outputsbutton design #18021 (@andrii-i) - Optimize
content-visibilityapplication #18013 (@Meriem-BenIsmail) - Show execution count in breakpoints, callstack, and sources panels while debugging in console #18003 (@arjxn-py)
- Keep debugger state though kernel restarts #17972 (@gjmooney)
- Make
DocumentManagerdialogs customizable #17961 (@Darshan808) - Systematise how base URL is obtained to allow swapping it more easily #17952 (@krassowski)
- Export the
ContentProviderRegistry#17940 (@martinRenou) - Make filebrowser breadcrumbs configurable #17932 (@Darshan808)
- Switch the default windowing mode to
contentVisibility#17926 (@Meriem-BenIsmail) - Pass context down in attachments resolver #17924 (@krassowski)
- Allow swapping the empty markdown cell placeholder (and translate it) #17920 (@krassowski)
- Enable the minimap for all windowing modes #17904 (@Meriem-BenIsmail)
- Debugger: Differentiate selected breakpoints with specific style #17893 (@HaudinFlorence)
- Use console for debugger evaluation #17892 (@gjmooney)
- Debugger: Visual indicator when debugger is paused #17891 (@arjxn-py)
- Add
IUserAPIClientto make swappingUserManagereasier #17884 (@krassowski) - Provide context about the tag and attribute to the URL resolver #17882 (@krassowski)
- Debugger: Show cell execution count in breakpoint/call stack/source panel #17881 (@arjxn-py)
- Add file browser menu for creating new Python/R/Julia files #17848 (@martinRenou)
- Allow configuring
toSkipfor theSettingsEditor#17834 (@jtpio) - Use
content-visibilityto render notebook cells more efficiently #17822 (@Meriem-BenIsmail) - Use toolbar registry for log console #17814 (@gjmooney)
- Add a new
addExtraLineOnCellMergesetting #17806 (@jtpio) - Update to mermaid 11.10, marked 16.2 #17800 (@bollwyvl)
- Allow opening notebooks without starting a kernel #17798 (@jtpio)
- Allow to swap the URL resolver #17784 (@krassowski)
- Add the "Show Workspace Indicator" command to the palette #17780 (@jtpio)
- Auto-switch between light and dark mode when "Synchronize with System Settings" is enabled #17733 (@MUFFANUJ)
- Keep cell
idwhen the user changes cell type #17731 (@afshin) - Discover the app directory relative to the installed module #17721 (@zanieb)
- Show checkbox and buttons of Dialog component on separate lines #17696 (@MUFFANUJ)
- Add types for interrupt messages, and move them from
shelltocontrolchannel #17684 (@krassowski) - Add fold/unfold commands to menu and command palette #17677 (@Darshan808)
- Add a new
allowFileUploadssetting to the file browser #17676 (@jtpio) - Dockerfile: Install less, vim, and nano #17670 (@rschroll)
- Describe
argsfor all commands #17649 (@jtpio) - Add
audio-extensionandvideo-extension#17636 (@jtpio) - Add select all command for file browser listing #17571 (@RRosio)
- Add a
selectionChangedsignal to the file browser #17563 (@jtpio) - Auto-open uploaded files with size and settings control #17556 (@Darshan808)
- Add a setting to configure the default log level for the Log Console #17547 (@jtpio)
- Add a signal when cells are pasted in the Notebook #17506 (@brichet)
- Add new CSS rule for expanding linked output to 100% height #17487 (@SylvainCorlay)
- Add an optional
exportAsmethod toNbConvert.IManager#17482 (@jtpio) - Reorder
extra_labextensions_pathto favor defaults #17476 (@peytondmurray) - Use the system clipboard for copying and pasting cells #17445 (@yacchin1205)
- Add jump to executing/executed cell button #16880 (@Darshan808)
Bugs fixed
- Update lumino to
v2025.11.13#18108 (@krassowski) - Use
IntersectionObserverto disable containment for on-screen cells #18091 (@Meriem-BenIsmail) - Fix layout trashing when navigating notebook cell-by-cell #18080 (@krassowski)
- Hide “Paused in Debugger” overlay when session terminates #18067 (@arjxn-py)
- Debugger: Fix breakpoints lost when closing modules #18063 (@HaudinFlorence)
- Fix
allow-same-originexception handling in sandbox when changing trust status #18049 (@skapin) - Don't open default editor if a different kind of editor is already open #18034 (@robertstrauss)
- Fix debugger initialization for notebooks on reload #18028 (@arjxn-py)
- Only show hidden part of the path in the tooltip of ellipsis #18026 (@krassowski)
- Fix
ObservableList.removeValuebehaviour: if item isn't found, don't just remove the last item! #18019 (@robertstrauss) - Fix breadcrumb drag-and-drop issues #18014 (@Darshan808)
- Fix race condition renaming unnamed files on first save #17982 (@shreve)
- Fix spurious scrollbar in output area due to prompt overlay #17981 (@shreve)
- Fix file drag-and-drop to breadcrumbs #17975 (@Darshan808)
- Delay content-visibility application to handle early CodeMirror initialization (Firefox) #17973 (@Meriem-BenIsmail)
- Prevent widget closure when Save As is cancelled #17956 (@Darshan808)
- Fix empty whitespace after large cell rendering #17949 (@Meriem-BenIsmail)
- Fix scrolling to targets within notebook #17928 (@krassowski)
- Debugger: fix adding a breakpoint on an empty line of code and reclicking after addition #17923 (@HaudinFlorence)
- Make file browser optional in file editor extension #17922 (@Ankitaupadhaya)
- Debugger: Only send the
configurationDonemessage once as per the DAP #17912 (@martinRenou) - Improve description of windowing mode in settings #17897 (@davidbrochart)
- Fix kernel status display in status bar #17894 (@Darshan808)
- Correctly dispose
TerminalManagereven if terminals are not available #17876 (@krassowski) - Fix notebook toolbar item order #17866 (@Darshan808)
- Fix output prompt overlay height for large outputs #17863 (@Meriem-BenIsmail)
- Debugger: scroll to the highlighted line in source panel #17860 (@brichet)
- Prevent overlay of content from other columns when renaming a file in the file browser #17857 (@CrafterKolyan)
- Select file and accept dialog on file double click in
FileDialog.getOpenFiles#17844 (@martinRenou) - Fix broken toolbar updates due to missing
'clear'cases in switch statements forObservableList#17837 (@Darshan808) - Debugger: Preserve variables panel contents when switching editor focus #17830 (@arjxn-py)
- Send code to console #17824 (@gjmooney)
- Change default line wrap in default editor config #17818 (@gjmooney)
- Clear incomplete execution metadata when splitting running cells #17804 (@Darshan808)
- Activate
Code Foldingsubmenu only where it is supported #17803 (@Darshan808) - Fix highlighting search on output cells and previous match skips #17797 (@itsmevichu)
- Don't create empty page_config in sys_prefix when disabled is empty #17791 (@gjmooney)
- Mark cell as dirty at execution start instead of after execution #17774 (@Darshan808)
- Preserve original cell during split to maintain kernel connections #17755 (@Darshan808)
- Exclude version 6.30.0 of ipykernel, which add a regression on the debugger #17744 (@brichet)
- Fix initial column sizes in
FileDialog.getOpenFilesdialog #17737 (@martinRenou) - Fix anchor navigation on sanitized HTML #17727 (@brichet)
- Fix file browser navigation with
preferredDir#17723 (@Darshan808) - Fix error when deleting a markdown cell with heading #17720 (@itsmevichu)
- Reduce UI blocking time when saving large notebooks by using file stream #17707 (@krassowski)
- Fix scrollbar behaviour when scrolling past long cell in full windowing mode #17705 (@krassowski)
- Normalize
ToolbarButtonComponentdataset attributes with thedata-prefix #17703 (@RRosio) - Do not change silently when executing an empty cell #17701 (@brichet)
- Fix tab order for status bar items #17700 (@MUFFANUJ)
- Update
@codemirror/viewtov6.38.1, fixinglineWrapindefermode #17698 (@krassowski) - Fix auto completion on irrelevant cell types #17693 (@itsmevichu)
- Check minimum docker version when starting docker build #17675 (@rschroll)
- Fix uncoalesced cell stream outputs clearing #17672 (@Darshan808)
- Fix
threadIdbeing passed to the debugger #17667 (@kr-2003) - Fix colors for CodeMirror panels #17666 (@krassowski)
- Create a subshell per target and kernel when using
CommsOverSubshells.PerCommTarget#17634 (@ianthomas23) - Prevent memory leak when rendering text stream #17628 (@krassowski)
- Fix cell toolbar enabled status with multiple notebooks #17625 (@MUFFANUJ)
- Add layout containment on viewport in windowed mode #17620 (@krassowski)
- Fix selection visibility in terminal while using Dark High Contrast theme #17618 (@MUFFANUJ)
- Fix setting allowed schemes on runtime using
Sanitizer.setAllowedSchemes#17602 (@bsundaram1) - Emit
selectionChangedon model refresh #17596 (@jtpio) - Fix error handing in extension manager (typo and undefined variable) #17592 (@Darshan808)
- Fixes for accessibility issues reported on missing ARIA roles #17591 (@nkn2022)
- Fix
stringmd5in docker image if bothmd5sumandmd5are present #17590 (@ritzdevp) - Improve the Table of Contents logic to handle more heading definitions #17583 (@itsmevichu)
- Ensure strings with yellow background in tracebacks are visible #17577 (@EtiennePelletier)
- Add
standbycallback to lumino polls #17567 (@mahendrapaipuri) - Fix stdin input triggering cell re-execution on Shift+Enter #17565 (@Darshan808)
fileeditor-extension: fix handling of launcher, commands and menu entries onspecsChanged#17550 (@jtpio)- Fix Settings Editor incorrectly resetting values to default in filtered view #17540 (@yukiiii04)
- Update widget flag on attaching cell to viewport #17532 (@trungleduc)
- Fix rendering of long cell editors in windowed notebook #17528 (@krassowski)
- Fix incorrect ARIA labels in the
MainAreaWidget#17527 (@dnlzrgz) - Upgrade CodeMirror packages to latest #17526 (@krassowski)
- Update lumino to
v2025.4.30to pull menu aria fix #17525 (@krassowski) - Fix editing shortcuts on Safari (allow shortcut edit button to receive focus) #17511 (@minrk)
- Enable save in collaborative mode #17508 (@Darshan808)
- Add
aria-hiddento icons (<svg>elements) which do not have atitle#17472 (@nkn2022) - Allow
gridandflexboxstyle attributes during Markdown/HTML sanitization #17408 (@dotnetautor) - Fix opening active notebook from kernel - custom drive #15958 (@itsmevichu)
Maintenance and upkeep improvements
- Drop
altairinstallation in release test; migrate from deprecatedvega_datasetstoaltair.datasets#18120 (@krassowski) - Make usage2 server startup/teardown test more robust #18087 (@krassowski)
- Separate verdaccio install and startup to fix flaky
release_testCI job #18082 (@krassowski) - Update PyPI Downloads badge in
README.md#18052 (@jtpio) - Update to mermaid 11.12.1 #18046 (@bollwyvl)
- Revert "Fix kernel status display in status bar" #18038 (@krassowski)
- Fix flaky test
Drag file from nested directory to parent via breadcrumb#18015 (@Darshan808) - Bandaid: pin ipykernel on CI to pre-7.0 #17992 (@krassowski)
- Add UI testing on Firefox (ignore snapshot differences) #17965 (@krassowski)
- Update to Playwright 1.56.0 #17960 (@jtpio)
- Temporarily pin
ipykernelto avoid CI breakage with 7.0 pre-release #17957 (@arjxn-py) - Fix case of 'Debugger console' to 'Debugger Console' #17939 (@jtpio)
- Make debugger console tests more robust and faster #17937 (@krassowski)
- Improve robustness of inline-completer UI tests #17931 (@ianthomas23)
- Fix integrity checks on CI #17927 (@krassowski)
- Ignore npmjs.com in check-links #17915 (@jtpio)
- Update to Playwright 1.55.1 #17914 (@jtpio)
- Fix failing mermaid snapshots test #17845 (@krassowski)
- Avoid ipykernel 7.0.0a2 in CI #17778 (@ianthomas23)
- Re-add workflow to reject changes to staging #17776 (@jtpio)
- Stabilize Code Folding Tests #17773 (@Darshan808)
- Check
app.shell.currentWidgetfor updating the tab title, if available #17772 (@jtpio) - Fix labeller config for audio/video extensions #17768 (@krassowski)
- Update to Playwright 1.54.2 #17760 (@jtpio)
- Add logs to the server startup in the
js-testingtests #17754 (@jtpio) - Pin to
httpx<1#17746 (@jtpio) - Bump form-data from 4.0.2 to 4.0.4 #17717 (@dependabot)
- Bump brace-expansion from 1.1.11 to 1.1.12 #17699 (@dependabot)
- Add more retries on the frequently failing test #17689 (@krassowski)
- Bump actions/cache from 3 to 4 in the actions group #17674 (@dependabot)
- Update library name, minor edit #17671 (@afshin)
- Fix terminal visual regression snapshots test failures #17656 (@krassowski)
- Update UI Tests Documentation snapshots #17654 (@jtpio)
- Update mermaid 11.7.0 #17641 (@bollwyvl)
- Drop manual Firefox install, add playwright cache #17631 (@krassowski)
- Update to Playwright 1.53 #17622 (@jtpio)
- Remove the need for
ILabShellfor the inspector plugins #17608 (@jtpio) - Use hatch to get the version #17559 (@krassowski)
- Temporarily ignore links to github.com #17544 (@krassowski)
- Bump actions/create-github-app-token from 1 to 2 in the actions group #17529 (@dependabot)
- Bump tough-cookie from 4.1.2 to 4.1.4 #17502 (@dependabot)
- Bump ws from 8.16.0 to 8.18.1 in /jupyterlab/tests/mock_packages/test-hyphens-underscore #17500 (@dependabot)
- Bump ws from 8.16.0 to 8.18.1 in /jupyterlab/tests/mock_packages/test_no_hyphens #17499 (@dependabot)
- Update to Playwright 1.52.0 #17483 (@jtpio)
Documentation improvements
- Update JupyterLab pre-release version to 4.5.0rc1 #18111 (@krassowski)
- Clean up references to Gitpod #18107 (@jtpio)
- Update example for disabling
buildAvailable#18075 (@Frank-Steiner) - Update announcement from JupyterCon to JupyterLab 4.5.0 RC #18074 (@krassowski)
- Mention JupyterLab 4.5.0 RC in the installation instructions #18061 (@krassowski)
- Add plausible and logos to API docs #18059 (@krassowski)
- Update PyPI Downloads badge in
README.md#18052 (@jtpio) - Convert documentation to Markdown #18044 (@jtpio)
- Add plausible.io stats to the jupyterlab docs #18041 (@jasongrout)
- Document how to disable the file uploads via the settings #18040 (@jtpio)
- Fix changelog URLs #18031 (@krassowski)
- Update JupyterCon 2025 announcement links #17983 (@krassowski)
- User-facing changelog for JupyterLab 4.5 #17967 (@RRosio)
- Make
DocumentManagerdialogs customizable #17961 (@Darshan808) - Fix parameter documentation issues in API reference #17954 (@krassowski)
- Add cross-references to API reference, fix missing packages in API #17953 (@krassowski)
- Systematise how base URL is obtained to allow swapping it more easily #17952 (@krassowski)
- Add JupyterCon banner and Jupyter colors #17906 (@choldgraf)
- Allow configuring
toSkipfor theSettingsEditor#17834 (@jtpio) - Improve language/grammar in extensions documentation #17833 (@jrdnbradford)
- Reorganise and improve discoverability in documentation #17821 (@cmarmo)
- Remove Isabela Presedo-Floyd from current maintainers #17810 (@isabela-pf)
- Replace deprecated
toolbarRegistry.registerFactorywithtoolbarRegistry.addFactoryin docs #17799 (@krassowski) - Update zoom link for weekly meetings in
CORPORATE.md#17789 (@krassowski) - Mark cell as dirty at execution start instead of after execution #17774 (@Darshan808)
- Stabilize Code Folding Tests #17773 (@Darshan808)
- Check
app.shell.currentWidgetfor updating the tab title, if available #17772 (@jtpio) - Fix anchor navigation on sanitized HTML #17727 (@brichet)
- Improve documentation for
jupyter.lab.transform#17726 (@MUFFANUJ) - Describe
argsfor all commands #17649 (@jtpio) - Fix link to zulip and icon in docs #17639 (@krassowski)
- Add
audio-extensionandvideo-extension#17636 (@jtpio) - Documentation for Kernel Subshells #17623 (@MUFFANUJ)
- Added --yes to conda environment creation command #17605 (@kathatherine)
- Add a
selectionChangedsignal to the file browser #17563 (@jtpio) - Add new entry to Postmortems in
RELEASE.md#17505 (@jtpio) - Add an optional
exportAsmethod toNbConvert.IManager#17482 (@jtpio) - Reorder
extra_labextensions_pathto favor defaults #17476 (@peytondmurray)
Contributors to this release
(GitHub contributors page for this release)
@afshin | @andrii-i | @Ankitaupadhaya | @arjxn-py | @bollwyvl | @brichet | @bsundaram1 | @choldgraf | @cmarmo | @CrafterKolyan | @Darshan808 | @davidbrochart | @dependabot | @dnlzrgz | @domoritz | @dotnetautor | @ellisonbg | @EtiennePelletier | @fcollonval | @Frank-Steiner | @github-actions | @gjmooney | @HaudinFlorence | @hxrshxz | @ianthomas23 | @isabela-pf | @itsmevichu | @jasongrout | @JasonWeill | @jrdnbradford | @jtpio | @jupyterlab-probot | @kathatherine | @kr-2003 | @krassowski | @lumberbot-app | @mahendrapaipuri | @martinRenou | @Meriem-BenIsmail | @minrk | @MUFFANUJ | @nkn2022 | @peytondmurray | @pre-commit-ci | @ritzdevp | @robertstrauss | @RRosio | @rschroll | @shreve | @skapin | @superlevure | @SylvainCorlay | @tonyfast | @trungleduc | @williamstein | @yacchin1205 | @yukiiii04 | @zanieb | @Zsailer