- Fix icon sidebar height for third party extensions (#8333)
- Pin JupyterLab server requirement more tightly (#8330)
- Scrolls cells into view after deletion (#8287)
- Sets data attribute on file type in filebrowser (#8275)
See the JupyterLab 2.1 milestone on GitHub for the full list of pull requests and issues closed.
- Display the extension manager in the left sidebar by default. Users will need to acknowledge the disclaimer in the extension manager before using it. (#8050, #8145)
- Added :ref:`blacklist and whitelist support <extension_listings>` for the extension manager (#7989)
- Automatically link URLs in notebook output text (#8075, #7393)
- Added a "Restart Kernel and Run All Cells…" button to the notebook toolbar (#8024)
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)- Many improvements to
LabIcon
: work with all SVG loaders, improve performance, fix issue with menus from extensions (#8125) - Change the header application area to a box panel, which means the header area will display if its children set their minimum height (#8059, #7279)
- JupyterLab's custom context menu is now disabled on all descendants of a DOM element with a
data-jp-suppress-context-menu
attribute (#7877, #7670)
- Fix property inspector restoration on reload (#8114)
- Increase the timeout for yarn (#8104, #8102)
- Fix find and replace with empty strings (#8100, #8098)
- Select search text when focusing the search overlay (#8073, #7932)
- Fix attaching images with spaces in their names to Markdown cells (#8095)
- Fix build errors by distributing the
.yarnrc
configuration with the Python package (#8045) - Throttle fetch requests in the setting registry's data connector (#7927)
- Close the gap between lines in notebook output (#7832, #7760)
See the JupyterLab 2.0.2 milestone on GitHub for the full list of pull requests and issues closed.
- Fix cell execution when recording timing (#8057, #8056)
- Fix font settings for the editor (#8004, #7910)
- Avoid redundant checkpoint calls on loading a notebook (#7926, #7889)
- For developers: make kernel
IFuture.done
typings more correct by not includingundefined
(#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.
- Support for searching outputs in notebooks (#7258)
Ctrl Shift .
andCtrl Shift ,
shortcuts move focus to the next and previous tab bar in the main area, respectively (#7673)Shift Home
andShift 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
, andwinKeys
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 removedlabhubapp
(#7724)
See :ref:`extension_migration` for help in migrating extensions to JupyterLab 2.0.
- Switch from
@phosphor
to@lumino
dependencies. (#7582, #7534, #7763, #7762, #7595) - Factor out the
settingsregistry
andstatedb
packages from coreutils (#7681, #7615) - Rework services architecture (sessions, kernels, terminals). Among these changes,
ClientSession
is renamed toSessionContext
and theIKernelConnection.connectToComm
method is replaced withIKernelConnection.createComm
andIKernelConnection.hasComm
methods. (#7252, #7674, #7820, #7694, #7690, #7682) - Upgrade to TypeScript 3.7 (#7522)
- Remove
polling
from coreutils in favor for@lumino/polling
(#7617) - TypeScript strict null checking in core packages (#7657, #7607)
- Update state database list method to query based on namespace match. (#7742, #7257)
- Address code todo items and deprecations for 2.0 (#7720, #7724)
- Update Console panel tracker widgets (#7705, #7726, #7648, #7645)
- Update contribution guide to require node v12+ (#7479)
- New API for the
Running
sidebar extension (#6895, #6876) - Clean up handling of icons under unified LabIcon ( #7192 #7700, #7765, #7767, #7800, #7846, #7859, #7864, #7886)
- New property inspector used to display the properties of the currently selected main area widget (#7665, #7664, #7718, #7686)
- Allow metadata for launcher items (#7654, #7652)
- Allow default file browser to restore manually. (#7695, #4009)
- Upgrade bundled yarn to 1.21.1 (#7691, #7692)
- Make session dialogs configurable (#7618, #7616)
- Support transient editor configs (#7611, #7295)
- Optionally force new browser tab (#7603, #7602)
- Update core dependencies (e.g.,
codemirror
,xterm.js
,markdown
,fontawesome
, etc.) (#7590, #7194, #7326, #6479, #7769) - Add storybook to
ui-components
(#7588, #6799) - Add explicit documentation encouraging people to re-use lab components (#7543)
- Enable TypeScript sourcemaps for debugging locally installed labextensions (#7541)
- Add
UseSignal
example to the docs (#7519) - Add
env
prop to kernel options (#7499) - Add kernelspec metadata (#7229, #7228)
- Allow different mimetypes for the clipboard data (#7202)
- Add password dialog to apputils (#7855)
- Alias phosphor packages to lumino to allow a deprecation period for phosphor (#7893)
- Match react version in ui-components peerdependencies (#7794)
- Fix lint-staged for both win and mac (#7784)
- Update websocket workaround for node environments (#7780, #6934)
- Fix handling of linked extensions (#7728, #6738)
- Fix extension compatibility checks for prereleases and extensions supporting multiple major versions of JupyterLab (#7723, #7241, #7919)
- Teach update-dependency about more range specifiers and make it adopt the current range for any tag (#7709)
- Add support for giving a rank to items in the top area (#7278)
- Apply all options to the initial JupyterLab application instance (#7251)
- "Copy Shareable Link" in the file browser context menu now properly works in JupyterHub (#7906)
- Update Mathjax CDN in the cell and console examples (#7680)
- Revert ensure-max-old-space now that Node 12+ has better default memory ceilings (#7677, #7675)
- Resolve race condition between default file browser and tree urls. (#7676, #4009)
- Fix handling of code editor refresh (#7672, #7671)
- Start new notebooks in edit mode (#7666, #6731)
- Use consistent versions of React (#7661, #7655)
- Add scrollbar styles to nbconvert-css (#7653)
- Close output views when corresponding notebooks are closed (#7633, #7301)
- Fixed incorrect white background for new command palette icon (#7609, #7577)
- Block fetching the settings for a plugin that is disabled (#7147)
- When timing metadata changes, ensure signal fires (#7576)
- Prevent memory leaks in Vega renderer (#7564)
- Handle cell execution cancellation when cell is disposed (#7555, #7554)
- Fix dropdown option style issue on Windows (#7513)
- Make sure label is linked to a control when checking for element type (#7458)
- Refine log console message UX (#7448, #7444, #7443)
- Fix multicursor backspacing (#7401, #7205)
- Reset log display and count when non-notebook tab gets activated (#7334, #7325)
- Fix Safari multiple tabs by working around a Safari bug. (#7316, #6921)
- Skip custom click behavior on links when the download attribute is set (#7311, #5443)
- Fix context menu hit test to deal with SVG nodes. (#7242, #7224)
- Fix overwriting of target attribute of anchors rendered by
IPython.display
(#7215, #6827) - Fix file browser location in tree view (#7155)
- Stop too many fetch calls in docmanager-extension (#7879, #7874)
- Ensures that
Shift Tab
dedent shortcut works correctly in the file editor (#7865) - Fix unexpected jump to last search result when using documentsearch (#7835)
- Fixed refresh issue for html viewer (#7824, #7552)
- Fix for center-aligned images with IPython.display.image (#7798)
- Changes to setting editor should trigger application dirty state (#7774, #7757)
- Move vega from "devdependencies" to "dependencies" (#7699, #7689)
- Restore default file browser manually. (#7695, #4009)
- Use default
app_dir
whenapp_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.
- Select cells from the current cell to the top of the notebook with
Shift Home
, to the bottom of the notebook withShift End
(#7336, #6783) - Add a log console extension to display unhandled messages and other activity (#7318, #7319, #7379, #7399, #7406, #7421)
- Allow the npm
max-old-space
option to be specified outside of JupyterLab (#7317) - Only display node structure in a JSON tree view for arrays and empty objects (#7261)
- Make much smaller distribution packages by not building JavaScript source maps for releases. (#7150)
- Add support for pasting cell attachments and dragging attachments from the file browser (#5913, #5744)
- Add a new
registry
configuration parameter to override the default yarn repository when building (#7363, #7109, #7249, #7248)
- Update the Markdown renderer (
marked
) to 0.7.0 (#7328) - Remove datagrid as a singleton, allowing extensions to use newer versions (#7312)
- Add metadata to the kernelspec information (#7234)
- Allow different mimetypes for the clipboard data (#7233)
- Add inline svg icon support to toolbar buttons (#7232)
- Add PageConfig functions to query if a plugin is deferred or disabled (#7216)
- Allow for renderers for nbformat.ierror to be created (#7203, #7193)
- Refactor
fileeditor-extension
for modularization (#6904) - Add execution timing to cells (#6864, #3320)
- Fix the
file-browser-path
query parameter (#7313) - Skip custom click behavior on links when the download attribute is set (#7323)
- Fix opening multiple browser tabs in Safari (#7322)
- Fix context menus on SVG icons (#7263)
- Fix overwriting of target attribute of anchors rendered by
IPython.display
(#7231) - Fix multi-cursor backspacing (#7205, #7401, #7413)
- Fix mult-cursor cell splitting (#7207, #7417, #7419)
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)- Fix workspace reset functionality (#7106, #7105)
- Restore behavior of the "raises-exception" cell tag (#7020, #7015)
- Add settings to override theme font sizes (#6926)
- Accept query parameter to optionally change file browser location (#6875)
- Pressing escape in the console should switch out of edit mode (#6822)
- Fix file browser downloads in Google Chrome (#6686)
- Make it possible to override the default widgets to view a file (#6813, #4048)
- Support installing multiple versions of the same extension (#6857)
- Support JupyterHub server name for JupyterHub 1.0 (#6931)
- Add docs to help users diagnose issues before creating them (#6971)
- The JupyterLab conda-forge package is now a 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)
- Expose install_kernel for tests so that outside projects can better use the testing framework (#7089)
- Fix
comm_info_request
content to conform to the Jupyter message specification in a backwards-compatible way (#6949, #6947) - Add yarn package resolution to build to constrain core package versions to patch semver ranges (#6938)
- Make handling comm messages optional in a kernel connection. (#6929)
- Expose icon svg to theme css (#6034, #7027)
- Expose convenience functions for open dialogs (#6366, #6365)
- Add debug messages to possible kernel messages (#6704)
- Add server side coreconfig object (#6991)
- Handle errors that occur during kernel selection (#7094)
- Fix escaping issues for page config and other template variables (#7016, #7024, #7061, #7058, #6858)
- Require jinja2 2.10+ to fix escaping issues (#7055, #7053)
- Increase the search debounce from 100ms to 500ms to increase incremental search responsiveness in large documents (#7034)
- Fix vega downloads and download urls in general (#7022, #7017, #7098, #7047)
- Do not complain in the build about duplicate or optional packages (#7013)
- Fix contextual help layout for R help (#6933, #6935)
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).
- We now include the JupyterHub extension in core JupyterLab, so you no longer need to install
@jupyterlab/hub-extension
. (#6451, #6428) - JupyterLab now has a File > Logout menu entry when running with JupyterHub (#6087, #5966)
We now have a printing system that allows extensions to customize how documents and activities are printed. (#5850, #1314)
- The launcher displays longer kernel names and supports keyboard navigation (#6587)
- Notebook outputs without any valid MimeType renderers will not be displayed, instead of displaying an error (#6559, #6216)
- Add tooltip to file browser root breadcrumb icon showing the server root, if it is available (#6552)
- Downloading a file will no longer open a new browser window (#6546)
- Rename the help "Inspector" to "Contextual Help" and move it to the "Help" menu (#6493, #6488, #6678, #6671)
- Update many of the icons to make them more consistent (#6672, #6618, #6664, #6621)
- Update the settings UI to remove the table view (#6654, #6622, #6653, #6623, #6646, #6642)
- Replace FAQ Extension with link to JupyterLab documentation (#6628, #6608, #6625, #6610)
- Change the default keyboard shortcut for closing a tab to be
Alt+w
instead ofCmd/Ctrl+w
to avoid conflicts with operating systems. (#6486, #6357) - Show help text in Inspector window to describe you should select a function (#6476)
- Fixes SVG rendering (#6469, #6295)
- Add support for dropping a tab in the tab bar area. (#6454, #5406)
- Switch some default shortcuts to use
Accel
instead ofCtrl
so they are more natural for Mac users (#6447, #5023) - Add ability to tell between hover and selected command palette items (#6407, #279)
- Hide the "Last Modified" column when the file browser is narrow (#6406, #6093)
- Support copy/paste in terminal and Mac OS using
Ctrl+C
andCtrl+V
(#6391, #6385, #1146) - Support scrolling in running kernels panel (#6383, #6371)
- Adds ability to "Merge Selected Cells" in the context menu in the notebook (#6375, #6318)
- Turn On Accessibility In Xterm.js to make it more compatible for screen readers (#6359)
- When selecting cells using the keyboard shortcuts, we now skip collapsed cells (#6356, #3233)
- Supporting opening
.geojson
files in JSON viewer (#6349) - Performance fixes for text-based progress bars (#6304, #4202)
- Add support for rendering Vega 5 and Vega Lite 3 while keeping the existing Vega 4 and Vega Lite 2 renderers (#6294, #6133, #6128, #6689, #6685, #6684, #6675, #6591, #6572)
- Drag and drop console cells into a notebook or text editor (#5585, #4847)
- Drag and drop notebook cells into a console or text editor (#5571, #3732)
- The extension manager search now sorts extensions by the score assigned to them by NPM instead of alphabetically (#5649)
- Notify the user when a kernel is automatically restarted, for example, if crashes from an out of memory error (#6246, #4273)
- Expose the extension manager in a command and menu item (#6200)
- Add command to render all Markdown cells (#6029, #6017)
- Supports using shift to select text in output area (#6015, #4800)
- Output areas that opened in new views are restored properly now on reload (#5981, #5976)
- Add support for managing notebook metadata under a new "Advanced Tools" section in the cell tools area. The cell and notebook metadata now always reflect the current state of the notebook (#5968, #5200)
- Inherit terminal theme from core theme (#5964)
- Adds a built-in HTML viewer so that you can view HTML files (#5962, #5855, #2369)
- New workspaces are now automatically generated when you create a new window with the same workspace name. (#5950, #5854, #5830, #5214)
- We now add a hint to the context menu to describe how you can access the native browser menu (#5940, #4023)
- The tabs on the left panel have changed to make them more understandable (#5920, #5269)
- Start a new terminal when the page is refreshed and the old terminal has died (#5917)
- Add a command to open the main menus, which can be assigned to a keyboard shortcut to open and navigate menus without a mouse (#5910, #3074)
- The contextual help now updates based on changes in the cursor from the mouse instead of just from the keyboard (#5906, #5899)
- The launcher now updates when the kernels change on the server (#5904, #5676)
- Retain cell auto scroll behavior even when a cell output is cleared (#5817, #4028)
- If you link to a relative path that is not a file in a markdown cell, this will now be preserved instead of changing it to a file URL (#5814)
- Adds the ability to link to a certain row in a CSV file and have the viewer open to that row (#5727, #5720)
- We have improved the performance of switching to a large notebook (#5700, #4292, #2639)
- The vdom extension now supports event handling, so that you can have kernel code run in response to user interaction with the UI (#5670)
- Adds the ability to run "Run All Code" and "Restart Kernel and Run All Code" in code and markdown files (#5641, #5579)
- We now remember what line ending a text file has when loading it, so that files with
CRLF
line endings will properly be saved with the same endings (#5622, #4464, #3901, #3706) - Fixes rendering of SVG elements in HTML MimeType output (#5610, #5610, #5589)
- Allow copying files by holding down
Ctrl
when dragging them in the file browser (#5584, #3235) - Switch the hover modified time in the file browser to use the local format (#5567)
- We have added a default keyboard shortcut of
Ctrl Shift Q
for closing and cleaning up a file (#5534, #4390) - Adds the ability to find and go to a certain line in the CSV viewer (#5523)
- Add the ability to create new text and markdown files from the launcher and command palette (#5512, #5511)
- A "New Folder" option has been added to the file browser context menu (#5447)
- The ANSI colors are now the same as those in the classic notebook (#5336, #3773)
- Send complete statements instead of current lines when stepping through code in a cell (#6515, #6063)
- Description list styles (
dl
,dt
,dd
) are improved to be consistent with the nteract project (#5682, #2399)
- The settings system has been rewritten (#5470, #5298) and now uses json5 as the syntax, which supports comments and other features for better human readability (#6343, #6199).
- The keyboard shortcut system has been rewritten and now displays a list of system commands in the settings comments (#5812, #5562).
There are new settings for many following items, including:
- Adds an option to shut down terminals and notebook kernels when they are closed (#6285, #6275)
- Scrolling past the end of a notebooks and text editor document (#5542, #5271, #5652, #4429)
- Text editor code folding, rulers, and active line highlighting (#5761, #4083, #5750, #4179, #5529, #5528)
- Markdown viewer options (#5901, #3940)
- Terminal scrollback and other settings (#5609, #3985)
- The autosave interval (#5645, #5619)
- The file browser showing the current active file (#5698, #4258)
- Custom scrollbar styling for dark themes (#6026, #4867)
- Installing extensions will be quieter and adds a
--debug
to extension installing (#6567, #6499, #5986) - We now support running JupyterLab when its application directory is a symlink (#6240, #6166)
- Add
--all
flag tolabextension uninstall
to remove all extensions (#6058, #6006) - Adds the ability to override the base URLs from the config (#5518, #5503)
- Updates to workspaces CLI command (#6473, #5977, #6276, #6234, #6210, #5975, #5695, #5694)
- We have rewritten how extensions provide keyboard shortcuts and interact with the settings system. If you previously defined keyboard shortcuts or used the settings mechanism, you will need to update your extension (#5470, #5298)
- We have renamed the plugin type from
JupyterLabPlugin
toJupyterFrontEndPlugin
. The application arg is also renamed fromJupyterLab
toJupyterFrontEnd
and some its functionality has been moved to a separateILabShell
plugin (#5845, #5919) - The lab shell
addToMainArea
,addToLeftArea
,addToTopArea
,addToRightArea
, andaddToBottomArea
functions have been replaced with a singleadd()
function that takes the area as an argument. ReplaceaddToMainArea(widget, options)
withadd(widget, 'main', options)
, etc. (#5845) - Rename
pageUrl
toappUrl
in the server connection (#6509, #6508, #6585, #6584) MainAreaWidget
instances now forward update requests to theircontent
(#6586, #6571)- The theme data attributes are renamed and moved to the document body element. If you are relying on these attributes in CSS to conditionally style based on the theme, you should update their names. For example
data-theme-light
is nowdata-jp-theme-light
. (#6566, #6554) - Extensions which require CSS should no longer import their CSS files into their Javascript files. Instead, they should specify a root CSS file in the
style
attribute in theirpackage.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 asInputDialog.getString
,InputDialog.getBoolean
, etc. (#6522, #6378, #6327, #6326)- When a
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) - We have updated our internal TypeScript version to 3.5.1 and our compile target to
ES2017
. Extensions may need to upgrade their TypeScript version and target as well. (#6440, #6224) - We have updated the typings for some of the Kernel messages so that they better match the spec. (#6433)
- A
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) - Add rate limiting and polling utilities to
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 <#6305>`__, #6157) - Require session when instantiating terminal widget (#6339, #5061)
- Provides a signal to see what items are opened in a directory listing (#6270, #6269)
- Ads the ability to add widget above the main work area to a top header area (#5936)
- Renames
contextMenuFirst
tocontextMenuHitTest
in theJupyterFrontEnd
(#5932) - Removes the
initialCommand
arg from the terminal creation command. (#5916) - Adds
--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) - Adds the ability to insert a new item to the toolbar before or after another item (#5896, #5894)
- Adds the ability for extensions to register new CodeMirror modes (#5829)
- We have removed the
JUPYTERLAB_xxx_LOADER
Webpack loaders, instead you should use the loader directly in the URL as Webpack supports it (#5709, #4406) - Adds the ability to handle fragments for document widgets (#5630, #5599)
- We have added a
@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) - The
showErrorMessage
function now lets you customize the buttons it uses (#5513) - We now provide helpers for using React components within JupyterLab. If you were previously using
ReactElementWidget
you should switch to usingReactWidget
. (#5479, #5766, #6595, #6595) - The share link command has been moved to its own extension so that it can be overridden (#5460, #5388)
- Creating a new services session now requires passing a kernel model instead of a kernel instance (#6503, #6142)
- We upgraded the Webpack raw file loader. The new version of the raw loader exports ES2015 modules, so this may require changes in extensions that import files using the raw loader. For example, if you did
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. - Widget factories now can support custom cloning behavior from an optional source widget (#6060, #6044)
- We have renamed the type
InstanceTracker
toWidgetTracker
(#6569). - In order to add widgets to the main area (e.g. as in the old XKCD extension tutorial), the correct syntax is now
app.shell.add(widget)
orapp.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.
- A notebook cell can now be readonly, reflecting its
enabled
metadata. (#5401, #1312) - Add "Go To Line" in the Edit menu for text editors. (#5377)
- Sidebar panels can now be switched between left and right sidebars. Right-click on a sidebar tab to move it to the other sidebar. (#5347, #5054, #3707)
- Make the sidebar a bit narrower, and make the minimum width adjustable from a theme. (#5245)
- Populate the File, Export Notebook As... submenu from the server nbconvert capabilities. (#5217)
- Server contents managers can now tell JupyterLab to open files as notebooks. For example, several custom contents managers save and open notebooks as Markdown files. (#5247, #4924)
- Add a command-line interface for managing workspaces. (#5166)
- Allow safe inline CSS styles in Markdown. (#5012, #1812)
- Add Quit to File menu when appropriate. (#5226, #5252, #5246, #5280)
- Rework extension manager user experience. (#5147, #5042)
- Show a dark splash screen when using a dark theme. (#5339, #5338, #5403)
- Fix code completion menu for a dark theme. (#5364, #5349)
- Style CSV viewer for a dark theme. (#5304, #3456)
- Make Matplotlib figures legible in a dark theme. (#5232)
- Fix notebook cell dropdown legibility in a dark theme. (#5168)
- Various save options in the file menu and toolbar are now disabled when a file is not writable. (#5376, #5391)
- Kernel selector dialog no longer cuts off kernel names. (#5260, #5181)
- Fix focus issues with the toolbar. (#5344, #5324, #2995, #5328)
- Fix toolbar button enabled/disabled status. (#5278)
- Table alignment is now respected in Markdown. (#5301, #3180)
- Fix syntax highlighting for Markdown lists. (#5297, #2741)
- Use the current filebrowser instead of the default one for various commands. (#5390)
- Fix escaping in link handling to conform to Markdown syntax. This means that spaces in link references now need to be encoded as
%20
. (#5383, #5340, #5153)
- Use Typescript 3.1. (#5360)
- Use Lerna 3.2.1. (#5262)
- Node >=6.11.5 is now required. (#5227)
- Pin vega-embed version to 3.18.2. (#5342)
- Use Jest for services tests. (#5251, #5282)
- Make it easier for third party extensions to use the JupyterLab test app and testing utilities. (#5415)
- Fix
jupyter lab clean
on Windows. (#5400, #5397) - Fix
jupyter lab build
on NFS. (#5237, #5233) - Build wheels for Python 3 only. (#5287)
- Migrate to using
jupyterlab_server
instead ofjupyterlab_launcher
and fix the app example. (#5316) - Move Mathjax 2 typesetter to a library package. (#5259, #5257)
- Default toolbar buttons can be overridden, and mime renderers can now specify toolbar buttons. (#5398, #5370, #5363)
- A JupyterLab application instance can now be given a document registry, service manager, and command linker. (#5291)
See the JupyterLab 0.34.0 milestone on GitHub for the full list of pull requests and issues closed.
- Notebooks, consoles, and text files now have access to completions for local tokens.
- Python 3.5+ is now required to use JupyterLab. Python 2 kernels can still be run within JupyterLab.
- Added the pipe (
|
) character as a CSV delimiter option. - Added "Open From Path..."" to top level
File
menu. - Added "Copy Download Link" to context menu for files.
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 optionrefreshInterval
, 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 forthemeChanged
, allowing extension authors to react to changes in the theme. Theme extensions must also provide a new boolean propertyisLight
, 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 eachFileBrowserModel
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 theFileBrowserModel
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
inNotebookModel
. This helps in developing reactive kernels. (#5037)The
ToolbarButton
inapputils
has been refactored with an API change and now uses a React componentToolbarButtonComponent
to render its children. It is now adiv
with a singlebutton
child, which in turn as twospan
elements for an icon and text label. Extensions that were using theclassName
options should rename it asiconClassName
. TheclassName
options still exists, but it used as the CSS class on thebutton
element itself. The API changes were done to accommodate styling changes to the button. (#5117)The
Toolbar.createFromCommand
function has been replaced by a dedicatedToolbarButton
subclass calledCommandToolbarButton
, 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 addingwidget.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 stying 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 asjlpm
), which now allows uses to use Node 10+. (#5121)Clean up handling of
baseUrl
andwsURL
forPageConfig
andServerConnection
. (#5111)
- Added the pipe (
|
) character as a CSV delimiter option. (#5112) - Added
Open From Path...
to top levelFile
menu. (#5108) - Added a
saveState
signal to the document context object. (#5096) - Added "Copy Download Link" to context menu for files. (#5089)
- Extensions marked as
deprecated
are no longer shown in the extension manager. (#5058) - Remove
In
andOut
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)
- Fixed a bug in the rendering of the "New Notebook" item of the command palette. (#5079)
- We only create the extension manager widget if it is enabled. This prevents
unnecessary network requests to
npmjs.com
. (#5075) - The
running
panel now shows the running sessions at startup. (#5118) - Double clicking a file in the file browser always opens it rather than sometimes selecting it for a rename. (#5101)
See the JupyterLab 0.33.0 milestone on GitHub for the full list of pull requests and issues closed.
- No longer in beta
- Workspaces
- Menu items
- Keyboard shortcuts
- Command palette items
- Settings
- Larger file uploads
- Extension management and installation
- Interface changes
- Renderers
- Changes for developers
- Other fixes
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 :ref:`workspace documentation <url-workspaces-ui>` for more details. (#4502, #4708, #4088, #4041 #3673, #4780)
- “Activate Previously Used Tab” added to the Tab menu
(
Ctrl/Cmd Shift '
) to toggle between the previously active tabs in the main area. (#4296) - “Reload From Disk” added to the File menu to reload an open file from the state saved on disk. (#4615)
- “Save Notebook with View State” added to the File menu to persist the
notebook collapsed and scrolled cell state. We now read the
collapsed
,scrolled
,jupyter.source_hidden
andjupyter.outputs_hidden
notebook cell metadata when opening.collapsed
andjupyter.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 valuetrue
, and if it is not, both will not be written. (#3981) - “Increase/Decrease Font Size” added to the text editor settings menu. (#4811)
- “Show in File Browser” added to a document tab’s context menu. (#4500)
- “Open in New Browser Tab” added to the file browser context menu. (#4315)
- “Copy Path” added to file browser context menu to copy the document’s path to the clipboard. (#4582)
- “Show Left Area” has been renamed to “Show Left Sidebar” for consistency (same for right sidebar). (#3818)
- “Save As…” given the keyboard shortcut
Ctrl/Cmd Shift S
. (#4560) - “Run All Cells” given the keyboard shortcut
Ctrl/Cmd Shift Enter
. (#4558) - “notebook:change-to-cell-heading-X” keyboard shortcuts (and commands) renamed to “notebook:change-cell-to-heading-X” for X=1…6. This fixes the notebook command-mode keyboard shortcuts for changing headings. (#4430)
- The console execute shortcut can now be set to either
Enter
orShift 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 shortcutCtrl 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)
- “fontFamily”, “fontSize”, and “lineHeight” settings added to the text editor advanced settings. (#4673)
- Solarized dark and light text editor themes from CodeMirror. (#4445)
- Support for larger file uploads (>15MB) when using Jupyter notebook server version >= 5.1. (#4224)
- New extension manager for installing JupyterLab extensions from npm within the JupyterLab UI. You can enable this from the Advanced Settings interface. (#4682, #4925)
- Please note that to install extensions in JupyterLab, you must use NodeJS version 9 or earlier (i.e., not NodeJS version 10). We will upgrade yarn, with NodeJS version 10 support, when a bug in yarn is fixed. (#4804)
- Wider tabs in the main working area to show longer filenames. (#4801)
- Initial kernel selection for a notebook or console can no longer be canceled: the user must select a kernel. (#4596)
- Consoles now do not display output from other clients by default. A new “Show All Kernel Activity” console context menu item has been added to show all activity from a kernel in the console. (#4503)
- The favicon now shows the busy status of the kernels in JupyterLab. (#4361, #3957, #4966)
- JupyterLab now ships with a Vega4 renderer by default (upgraded from Vega3). (#4806)
- The HTML sanitizer now allows some extra tags in rendered HTML,
including
kbd
,sup
, andsub
. (#4618) - JupyterLab now recognizes the
.tsv
file extension as tab-separated files. (#4684) - Javascript execution in notebook cells has been re-enabled. (#4515)
- A new signal for observing application dirty status state changes. (#4840)
- A new signal for observing notebook cell execution. (#4740, #4744)
- A new
anyMessage
signal for observing any message a kernel sends or receives. (#4437) - A generic way for different widgets to register a “Save with extras” command that appears in the File menu under save. (#3981)
- A new API for removing groups from a JupyterLab menu.
addGroup
now returns anIDisposable
which can be used to remove the group.removeGroup
has been removed. (#4890) - The
Launcher
now uses commands from the applicationCommandRegistry
to launch new activities. Extension authors that add items to the launcher will need to update them to use commands. (#4757) - There is now a top-level
addToBottomArea
function in the application, allowing extension authors to add bottom panel items like status bars. (#4752) - Rendermime extensions can now indicate that they are the default rendered widget factory for a file-type. For instance, the default widget for a markdown file is a text editor, but the default rendered widget is the markdown viewer. (#4692)
- Add new workspace REST endpoints to
jupyterlab_server
and make them available in@jupyterlab/services
. (#4841) - Documents created with a mimerenderer extension can now be accessed
using an
IInstanceTracker
which tracks them. Include the tokenIMimeDocumentTracker
in your plugin to access this. TheIInstanceTracker
interface has also gained convenience functionsfind
andfilter
to simplify iterating over instances. (#4762) - RenderMime render errors are now displayed to the user. (#4465)
getNotebookVersion
is added to thePageConfig
object. (#4224)- The session
kernelChanged
signal now contains both the old kernel and the new kernel to make it easy to unregister things from the old kernel. (#4834) - The
connectTo
functions for connecting to kernels and sessions are now synchronous (returning a connection immediately rather than a promise). The DefaultSessionclone
andupdate
methods are also synchronous now. (#4725) - Kernel message processing is now asynchronous, which guarantees the
order of processing even if a handler is asynchronous. If a kernel
message handler returns a promise, kernel message processing is
paused until the promise resolves. The kernel’s
anyMessage
signal is emitted synchronously when a message is received before asynchronous message handling, and theiopubMessage
andunhandledMessage
signals are emitted during asynchronous message handling. These changes mean that the commonMsg
andonClose
handlers and the kernel futureonReply
,onIOPub
, andonStdin
handlers, as well as the comm target and message hook handlers, may be asynchronous and return promises. (#4697) - Kernel comm targets and message hooks now are unregistered with
removeCommTarget
andremoveMessageHook
, instead of using disposables. The correspondingregisterCommTarget
andregisterMessageHook
functions now return nothing. (#4697) - The kernel
connectToComm
function is synchronous, and now returns the comm rather than a promise to the comm. (#4697) - The
KernelFutureHandler
classexpectShell
constructor argument is renamed toexpectReply
. (#4697) - The kernel future
done
returned promise now resolves to undefined if there is no reply message. (#4697) - The
IDisplayDataMsg
is updated to have the optionaltransient
key, and a newIUpdateDisplayDataMsg
type was added for update display messages. (#4697) - The
uuid
function from@jupyterlab/coreutils
is removed. Instead importUUID
from@phosphor/coreutils
and useUUID.uuid4()
. (#4604) - Main area widgets like the launcher and console inherit from a common
MainAreaWidget
class which provides a content area (.content
) and a toolbar (.toolbar
), consistent focus handling and activation behavior, and a spinner displayed until the givenreveal
promise is resolved. Document widgets, like the notebook and text editor and other documents opened from the document manager, implement theIDocumentWidget
interface (instead ofDocumentRegistry.IReadyWidget
), which builds onMainAreaWidget
and adds a.context
attribute for the document context and makes dirty handling consistent. Extension authors may consider inheriting from theMainAreaWidget
orDocumentWidget
class for consistency. Several effects from these changes are noted below. (#3499, #4453)- The notebook panel
.notebook
attribute is renamed to.content
. - The text editor is now the
.content
of aDocumentWidget
, so the top-level editor widget has a toolbar and the editor itself iswidget.content.editor
rather than justwidget.editor
. - Mime documents use a
MimeContent
widget embedded inside of aDocumentWidget
now. - Main area widgets and document widgets now have a
revealed
promise which resolves when the widget has been revealed (i.e., the spinner has been removed). This should be used instead of theready
promise.
- The notebook panel
Changes in the JupyterLab code infrastructure include:
- The JupyterLab TypeScript codebase is now compiled to ES2015 (ES6)
using TypeScript 2.9. We also turned on the TypeScript
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) - The JupyterLab codebase is now formatted using Prettier. By default the development environment installs a pre-commit hook that formats your staged changes. (#4090)
- Updated build infrastructure using webpack 4 and better typing. (#4702, #4698)
- Upgraded yarn to version 1.6. Please note that you must use NodeJS version 9 or earlier with JupyterLab (i.e., not NodeJS version 10). We will upgrade yarn, with NodeJS version 10 support, when a bug in yarn is fixed. (#4804)
- Various process utilities were moved to
jupyterlab_server
. (#4696)
- Fixed a rendering bug with the Launcher in single-document mode. (#4805)
- Fixed a bug where the native context menu could not be triggered in a notebook cell in Chrome. (#4720)
- Fixed a bug where the cursor would not show up in the dark theme. (#4699)
- Fixed a bug preventing relative links from working correctly in
alternate
IDrive
s. (#4613) - Fixed a bug breaking the image viewer upon saving the image. (#4602)
- Fixed the font size for code blocks in notebook Markdown headers. (#4617)
- Prevented a memory leak when repeatedly rendering a Vega chart. (#4904)
- Support dropped terminal connection re-connecting. (#4763, #4802)
- Use
require.ensure
invega4-extension
to lazily loadvega-embed
and its dependencies on first render. (#4706) - Relative links to documents that include anchor tags will now correctly scroll the document to the right place. (#4692)
- Fix default settings JSON in setting editor. (#4591, #4595)
- Fix setting editor pane layout’s stretch factor. (#2971, #4772)
- Programmatically set settings are now output with nicer formatting. (#4870)
- Fixed a bug in displaying one-line CSV files. (#4795, #4796)
- Fixed a bug where JSON arrays in rich outputs were collapsed into strings. (#4480)
This is the second in the JupyterLab Beta series of releases. It contains many enhancements, bugfixes, and refinements, including:
- Better handling of a corrupted or invalid state database. (#3619, #3622, #3687, #4114).
- Fixing file dirty status indicator. (#3652).
- New option for whether to autosave documents. (#3734).
- More commands in the notebook context menu. (#3770, #3909)
- Defensively checking for completion metadata from kernels. (#3888)
- New “Shutdown all” button in the Running panel. (#3764)
- Performance improvements wherein non-focused documents poll the server less. (#3931)
- Changing the keyboard shortcut for singled-document-mode to something less easy to trigger. (#3889)
- Performance improvements for rendering text streams, especially around progress bars. (#4045).
- Canceling a “Restart Kernel” now functions correctly. (#3703).
- Defer loading file contents until after the application has been restored. (#4087).
- Ability to rotate, flip, and invert images in the image viewer. (#4000)
- Major performance improvements for large CSV viewing. (#3997).
- Always show the context menu in the file browser, even for an empty directory. (#4264).
- Handle asynchronous comm messages in the services library more
correctly (Note: this means
@jupyterlab/services
is now at version 2.0!) ([#4115](https://github.com/jupyterlab/jupyterlab/issues/4115)). - Display the kernel banner in the console when a kernel is restarted to mark the restart ([#3663](https://github.com/jupyterlab/jupyterlab/issues/3663)).
- Many tweaks to the UI, as well as better error handling.
- Add a
/tree
handler andCopy Shareable Link
to file listing right click menu: #3396 - Experimental support for saved workspaces: #3490, #3586
- Added types information to the completer: #3508
- More improvements to the top level menus: #3344
- Editor settings for notebook cells: #3441
- Simplification of theme extensions: #3423
- New CSS variable naming scheme: #3403
- Improvements to cell selection and dragging: #3414
- Style and typography improvements: #3468 #3457 #3445 #3431 #3428 #3408 #3418
- Semantic menus: #3182
- Settings editor now allows comments and provides setting validation: #3167
- Switch to Yarn as the package manager: #3182
- Support for carriage return in outputs: #2761
- Upgrade to TypeScript 2.6: #3288
- Cleanup of the build, packaging, and extension systems.
jupyter labextension install
is now the recommended way to install a local directory. Local directories are considered linked to the application. cf #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. #3270
Bug fix for file browser right click handling. #3019
- Create new view of cell in cell context menu. #3159
- New Renderers for VDOM and JSON mime types and files. #3157
- Switch to React for our VDOM implementation. Affects the
VDomRenderer
class. #3133 - Standalone Cell Example. #3155
This release generally focuses on developer and extension author enhancements and general bug fixes.
- Plugin id and schema file conventions change. #2936.
- Theme authoring conventions change. #3061
- Enhancements to enabling and disabling of extensions. #3078
- Mime extensions API change (
name
->id
and new naming convention). #3078 - Added a
jupyter lab --watch
mode for extension authors. #3077 - New comprehensive extension authoring tutorial. #2921
- Added the ability to use an alternate LaTeX renderer. #2974
- Numerous bug fixes and style enhancements.
- Added support for dynamic theme loading. #2759
- Added an application splash screen. #2899
- Enhancements to the settings editor. #2784
- Added a PDF viewer. #2867
- Numerous bug fixes and style improvements.
- Implemented server side handling of users settings: #2585
- Revamped the handling of file types in the application - affects document and mime renderers: #2701
- Updated dialog API - uses virtual DOM instead of raw DOM nodes and better use of the widget lifecycle: #2661
- Added a new extension type for mime renderers, with the
vega2-extension
as a built-in example. Also overhauled the rendermime interfaces. #2488 #2555 #2595 - Finished JSON-schema based settings system, using client-side storage for now. #2411
- Overhauled the launcher design. #2506 #2580
- Numerous bug fixes and style updates.
- Overhaul of the launcher. #2380
- Initial implementation of client-side settings system. #2157
- Updatable outputs. #2439
- Use new Phosphor Datagrid for CSV viewer. #2433
- Added ability to enable/disable extensions without rebuilding. #2409
- Added language and tab settings for the file viewer. #2406
- Improvements to real time collaboration experience. #2387 #2333
- Compatibility checking for extensions. #2410
- Numerous bug fixes and style improvements.
- Chat box feature. #2118
- Collaborative cursors. #2139
- Added concept of Drive to ContentsManager. #2248
- Refactored to enable switching the theme. #2283
- Clean up the APIs around kernel execution. #2266
- Various bug fixes and style improvements.
- Export To… for notebooks. #2200
- Change kernel by clicking on the kernel name in the notebook. #2195
- Improved handling of running code in text editors. #2191
- Can select file in file browser by typing: #2190
- Ability to open a console for a notebook. #2189
- Upgrade to Phosphor 1.2 with Command Palette fuzzy matching improvements. #1182
- Rename of widgets that had
Widget
in the name and associated package names. #2177 - New
jupyter labhub
command to launch JupyterLab on JupyterHub: #2222 - Removed the
utils
from@jupyterlab/services
in favor ofPageConfig
andServerConnection
. #2173 #2185 - Cleanup, bug fixes, and style updates.
Release Notes:
- Overhaul of extension handling, see updated docs for users and developers. #2023
- Added single document mode and a
Tabs
sidebar. #2037 - More work toward real time collaboration - implemented a model database interface that can be in-memory by real time backends. #2039
Numerous 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.
- Split the repository into multiple packages that are managed using the lerna build tool. #1773
- Added restoration of main area layout on refresh. #1880
- Numerous bug fixes and style updates.
- Upgrade to new
@phosphor
packages - brings a new Command Palette interaction that should be more intuitive, and restores the ability to drag to dock panel edges #1762. - Refactor of
RenderMime
and associated renders to use live models. See #1709 and #1763. - Improvements and bug fixes for the completer widget: #1778
- Upgrade CodeMirror to 5.23: #1764
- Numerous style updates and bug fixes.
- Adds a Cell Tools sidebar that allows you to edit notebook cell metadata. #1586.
- Adds keyboard shortcuts to switch between tabs (Cmd/Ctrl LeftArrow and Cmd/Ctrl RightArrow). #1647
- Upgrades to xterm.js 2.3. #1664
- Fixes a bug in application config, but lab extensions will need to be re-enabled. #1607
- Numerous other bug fixes and style improvements.