<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Jupyter Notebook</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/tag-jupyter-notebook.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</id><updated>2026-07-02T16:15:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>JupyterLab 4.6 and Notebook 7.6 are out!</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/" rel="alternate"/><published>2026-07-02T16:13:00+00:00</published><updated>2026-07-02T16:15:00+00:00</updated><author><name>Michał Krassowski</name></author><id>tag:jasongrout.github.io,2026-07-02:/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/</id><summary type="html">&lt;p&gt;JupyterLab 4.6 features new interface customization options, improved file browser and debugger, an easy way to jump between recently…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-6"&gt;JupyterLab 4.6&lt;/a&gt; features new interface customization options, improved file browser and debugger, an easy way to jump between recently edited cells, and numerous other notebook experience improvements. Keyboard shortcuts, navigation and accessibility is another focus area in this release. &lt;a href="https://jupyter-notebook.readthedocs.io/en/stable/changelog.html#id1"&gt;Jupyter Notebook 7.6&lt;/a&gt; has also been released, including the fixes and enhancements of JupyterLab along with a new Scratchpad console and other Notebook-specific improvements. This article highlights notable changes in both applications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can try out the changes in your browser: &lt;a href="https://jupyter.org/try-jupyter/lab/index.html"&gt;JupyterLab 4.6&lt;/a&gt;, &lt;a href="https://jupyter.org/try-jupyter/notebooks/?path=notebooks/Intro.ipynb"&gt;Notebook 7.6&lt;/a&gt;&lt;br&gt;
At the time of publication, the preview runs on &lt;a href="https://github.com/jupyterlite/jupyterlite"&gt;JupyterLite&lt;/a&gt; 0.8.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
&lt;img alt="Overview of some user interface enhancements visible in JupyterLab UI" src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/001-1_zni6m_lgsXqu-zsGH77zBw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Overview of some user interface enhancements visible in JupyterLab UI&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="enhancements-shared-by-jupyterlab-and-notebook"&gt;Enhancements shared by JupyterLab and Notebook&lt;/h2&gt;
&lt;h3 id="notebook-improvements"&gt;Notebook improvements&lt;/h3&gt;
&lt;p&gt;Two new navigation commands, “Select previous last modified cell” and “Select next last modified cell”, allow jumping back and forward through recently edited cells. The commands are accessible from the Command Palette and as buttons in the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/toc.html"&gt;Table Of Contents&lt;/a&gt; toolbar when a notebook is active.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Clicking the highlighted button will jump to a previously edited cell" src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/002-0_3gi9bAn6k4-yH8MP.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Clicking the highlighted button will jump to a previously edited cell&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Copy, cut, and paste text commands have been added to the notebook context menu. This feature requires permission to access clipboard to work reliably and may not work in Firefox depending on version and additional restrictions.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Copy/Cut/Paste Selected cells expose clipboard actions on cell source" src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/003-0_fuYCAQUXQwuqp6cG.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Copy/Cut/Paste Selected cells expose clipboard actions on cell source&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The cell toolbar delete button now shows a confirmation dialog to prevent accidental deletion. The “Do not ask me again” checkbox is available and the preference is persisted in &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/notebook.html#cell-toolbar"&gt;Cell Toolbar&lt;/a&gt; settings. The standard keyboard shortcut (D, D) is unaffected.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Dialog shown when deleting a cell from cell tollbar" src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/004-0_vITL_K8lFE_UIsHj.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Dialog shown when deleting a cell from cell tollbar&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Pressing Ctrl + B (Cmd + B on macOS) in a markdown cell wraps the selected text in bold formatting.&lt;/p&gt;
&lt;p&gt;When exporting a notebook as HTML via &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/export.html"&gt;File → Save and Export Notebook As → HTML&lt;/a&gt;, a dialog now asks whether to sanitize the HTML output before download.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="file-browser-new-column-editable-breadcrumbs-open-in-terminal"&gt;File browser: new column, editable breadcrumbs, open in terminal&lt;/h3&gt;
&lt;p&gt;A new “Date Created” column has been added to the file browser, showing when files were created. The column can be toggled via Settings → File Browser → “Show date created column” or by right-clicking the column header. The latest &lt;code&gt;jupyter-server&lt;/code&gt; (&lt;code&gt;v2.18&lt;/code&gt;+) is required for accurate values across operating systems.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="New date created column in file browser" src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/005-0_epZrkZYQDIzropSt.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;New date created column in file browser&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The breadcrumb bar now supports &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/files.html#editable-breadcrumbs"&gt;direct path editing&lt;/a&gt; with tab-completion. Clicking the area behind breadcrumbs (highlighted on hover), or using the Command Palette, opens an editable text field where pressing Tab completes the longest common prefix of matching subdirectories.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Editable breadcrumbs" src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/006-0_grxuAxyEQqLFVn6d.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Editable breadcrumbs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A new “Open in Terminal” option in the file browser context menu opens a terminal navigated to the selected directory. When multiple directories are selected, one terminal is opened per directory.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Opening terminal for a specific directory is now easier." src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/007-0_aespdpw35miy6vmr.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Opening terminal for a specific directory is now easier.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Additional file browser improvements include: a configurable &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/files.html#file-name-sort-order"&gt;file name sort order&lt;/a&gt;, persistence of the sort state across sessions, automatic clearing of the file filter when changing directories, and a loading animation during file browser refresh.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="debugger-kernel-sources-filter-floating-overlay"&gt;Debugger: kernel sources filter, floating overlay&lt;/h3&gt;
&lt;p&gt;The debugger Sources panel has been moved out of the debugger sidebar; the Sources now open as read-only editors in the main area, keeping the sidebar uncluttered while you &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/debugger.html#explore-the-code-state"&gt;explore the code state&lt;/a&gt;. The previous behavior can be restored by disabling the “Show Sources in Main Area” setting in the Debugger settings.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/008-0_l0V_AJYDsYfEOA54.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;An overlay with continue/step in/stop buttons has been added easing the control of the debugger steps:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/009-0_-kwAopUu6uow4ERY.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;The Kernel Sources filter bar has been moved to the toolbar and now supports live filtering, making it easier to search through kernel source files while debugging.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/010-0_lXUep59E1svw80P6.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;The refresh button for sources list was removed — the sources will now update automatically after each code execution.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="keyboard-navigation-and-accessibility"&gt;Keyboard navigation and accessibility&lt;/h3&gt;
&lt;p&gt;Keyboard navigation has been improved across several components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The terminal no longer traps keyboard focus, allowing users to move focus away with the keyboard.&lt;/li&gt;
&lt;li&gt;The console and file browser breadcrumbs both received keyboard navigation fixes.&lt;/li&gt;
&lt;li&gt;Focus is now correctly restored after closing the command palette, and input elements in dialogs opened from the command palette receive focus immediately.&lt;/li&gt;
&lt;li&gt;The find-and-replace button focus in the document search box has been corrected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Screen reader behavior has been improved in the launcher and notebook. Toolbar buttons now correctly reflect their pressed state via the &lt;code&gt;aria-pressed&lt;/code&gt; attribute.&lt;/p&gt;
&lt;p&gt;The Keyboard Shortcuts settings panel has been updated to improve accessibility, including better keyboard interaction and screen reader announcements within the shortcuts editor dialog.&lt;/p&gt;
&lt;p&gt;Focus indicators have been improved across the interface, including the status bar and other interactive components.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="keyboard-shortcuts"&gt;Keyboard shortcuts&lt;/h3&gt;
&lt;p&gt;Shortcuts can now be added from the UI shortcut editor for any command (previously this required writing JSON in Advanced Settings Editor).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/011-0_JYHGSldDZ4bsNCVk.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;“Find and Replace” has been added to the Edit menu with the keyboard shortcut Ctrl + H (Cmd + H on macOS).&lt;/p&gt;
&lt;p&gt;Ctrl + Y has been added as a redo shortcut on Windows and Linux.&lt;/p&gt;
&lt;p&gt;Pressing 1, 2, 3, 4, 5 and 6 will no longer convert a focused code or raw cell to Markdown to avoid accidental conversions. These shortcuts continue working on markdown cells, switching the heading level, as they did before.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="internationalization"&gt;Internationalization&lt;/h3&gt;
&lt;p&gt;Language packs can now be installed directly from within JupyterLab by selecting “Install more languages…” at the bottom of the Settings → Language menu. This opens the Extension Manager pre-filled with a search for available language pack extensions.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/012-0_IAY1NHv2eUZlhsoQ.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="terminal-enhancements"&gt;Terminal enhancements&lt;/h3&gt;
&lt;p&gt;Pressing Shift+Enter in the terminal now inserts a newline without executing the current line. This matches the behavior expected by certain terminal applications.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="inline-completion-enhancements"&gt;Inline completion enhancements&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/completer.html#inline-completer"&gt;Inline completion suggestions&lt;/a&gt; can now be rendered with syntax highlighting that matches the active editor language. This can be enabled in Settings → Inline Completer → “Ghost text syntax highlighting”.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/013-0_eUvIfOASnsZ0RTSH.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Ghost text is now also shown for all active cursors in a multi-cursor editing session.&lt;/p&gt;
&lt;h2 id="jupyterlab-specific-enhancements"&gt;JupyterLab-specific enhancements&lt;/h2&gt;
&lt;h3 id="layout-and-interface-customization"&gt;Layout and interface customization&lt;/h3&gt;
&lt;p&gt;The activity bar can now be positioned at the top or bottom of the interface, in addition to the default left and right placement. The setting is available under Settings → Interface → &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/interface_customization.html#activity-bar-position"&gt;Activity Bar Position&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/014-0_FZnWSzWq9TsSfnYH.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Sections of accordion sidebars can now be &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/interface_customization.html#move-accordion-sections-between-panels"&gt;moved between panels&lt;/a&gt; via a context menu. Right-clicking a section header shows a “Move To” menu. The placement and collapsed state of moved sections are persisted across sessions.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/015-0_EaVBoUQh5fMYTOCs.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;br&gt;
&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/016-0_cGeR3SdD_1GL4pcS.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;The sidebar panels themselves can be &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/interface_customization.html#move-open-widgets"&gt;moved between areas&lt;/a&gt;. Right-clicking a sidebar shows submenu with options to move it to the main area, a different sidebar, or the down area.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/017-0_vZPh7LgFw5VKY96R.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;br&gt;
&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/018-0_tqASYUG9UE6LoV2y.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Tabs can now be split in four directions using the “Split Tab” context menu item (or the command palette), which adds split left, right, up, and down options.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/019-0_7qxAk2wzTtYyiR7c.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Individual panels can be zoomed in or out using Ctrl + mouse wheel (when “Enable Ctrl+ Scroll Zoom” is turned on in Settings → Interface) or via the command palette, without affecting other panels.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/020-0_COyiDcTCqgm8mJcD.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="performance"&gt;Performance&lt;/h3&gt;
&lt;p&gt;Panel resizing is now more responsive; the width of individual widgets inside resized panels is frozen during the drag. This behaviour can be disabled by toggling “Optimize panel resize” in Settings → Application Shell.&lt;/p&gt;
&lt;h2 id="notebook-specific-enhancements"&gt;Notebook-specific enhancements&lt;/h2&gt;
&lt;h3 id="scratchpad-console"&gt;Scratchpad console&lt;/h3&gt;
&lt;p&gt;A scratchpad console can now be opened next to a notebook, sharing the same kernel. This makes it easy to run quick experiments or inspect variables without modifying the notebook itself.&lt;/p&gt;
&lt;p&gt;The scratchpad console can be opened from the &lt;code&gt;File&lt;/code&gt; -&amp;gt; &lt;code&gt;New&lt;/code&gt; -&amp;gt; &lt;code&gt;Scratchpad console&lt;/code&gt; menu, from the command palette, or with the Ctrl + B (or Cmd + B on macOS) keyboard shortcut, which toggles the console panel.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/021-1_cxBr835uxAtjpO9Tlqg7bw.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="confirmation-dialog-when-closing-and-shutting-down-a-notebook"&gt;Confirmation dialog when closing and shutting down a notebook&lt;/h3&gt;
&lt;p&gt;The “Close and Shut Down Notebook” command now asks for confirmation before closing the browser tab and shutting down the kernel. The confirmation prompt can be disabled in the Settings Editor with the “Prompt for confirmation before closing and shutting down” setting.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/jupyterlab-4-6-and-notebook-7-6-are-out/images/022-1_hWEaY7HfHBjzbajj9OIKtQ.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tab widths in JupyterLab are kept frozen while the mouse pointer hovers over them, making it easier to close multiple tabs with the mouse&lt;/li&gt;
&lt;li&gt;Autocompletion heuristics were improved; the autocompletion (which remains opt-in) should no longer trigger in unexpected scenarios&lt;/li&gt;
&lt;li&gt;The output scroll overlay collapse icon is now visible regardless of the output size and scroll state&lt;/li&gt;
&lt;li&gt;The fonts used across components were standardized and fonts specified by themes or overrides are respected in every component of the application&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="for-extension-authors"&gt;&lt;strong&gt;For extension authors&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Building extensions (and JupyterLab/Notebook themselves) is now ~5 times faster thanks to migration from webpack to Rspack. Building extensions no longer requires a full JupyterLab installation as the relevant machinery was extracted to &lt;a href="https://github.com/jupyterlab/jupyter-builder"&gt;jupyter-builder&lt;/a&gt; (see this &lt;a href="/posts/2026/announcing-jupyter-builder-a-standalone-build-system/"&gt;blog post&lt;/a&gt; for more details). This (among others) enables faster build environment setup on CI. Future improvements to the build system can now be released independently of the JupyterLab release cadence.&lt;/p&gt;
&lt;p&gt;Please refer to the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-5-to-4-6"&gt;Extension Migration Guide&lt;/a&gt; for more details on API changes and up-to-date advice.&lt;/p&gt;
&lt;h2 id="as-large-as-minor-releases-go"&gt;As large as minor releases go&lt;/h2&gt;
&lt;p&gt;This JupyterLab release includes 68 new features and enhancements, 97 bug fixes, and 38 documentation improvements. 95 people contributed to this release. Across record-breaking 171 maintenance tasks we kept the dependencies up-to-date, improved quality of code and reduced the time to PRs getting merged by improving the CI performance and robustness. These efforts were in part funded by &lt;a href="https://jupyterfoundation.org/"&gt;Jupyter Foundation&lt;/a&gt; &lt;a href="https://jupyterfoundation.org/community-funding-proposals/"&gt;Community Proposals&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While the size of minor releases fluctuated across years, this one is on the higher side, with only v3.1 featuring slightly more merged PRs. The reviewers worked hard to ensure no regressions are introduced, but if any slipped through, please open an issue in respective repository (&lt;a href="https://github.com/jupyterlab/jupyterlab/issues/new/choose"&gt;JupyterLab&lt;/a&gt; or &lt;a href="https://github.com/jupyter/notebook/issues/new/choose"&gt;Notebook&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thank you to all the new contributors, we hope to see you back!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab (39): @aarondr77, @Akshitguptaa, @altis0725, @amanparganiha, @anafontan, @autodots-AHassan, @aviu16, @bittoby, @boskodev790, @chenjiahan, @cursoragent, @dhgoal, @DTiming24, @github29tani, @GlassOfWhiskey, @harshaagrawal20, @hroncok, @jayaprajapatii, @JaYRaNa213, @jianyexi, @ktaletsk, @lin9long, @mfisher87, @MMesch, @moktamd, @nightcityblade, @nthiery, @raffaelemancuso, @RamiNoodle733, @reteps, @rodrigosf672, @Siddhazntx, @statxc, @TheChyeahhh, @tsharma-dev, @tubaman, @u-wlkjyy, @Yahiewi, @ZhYGuoL&lt;/li&gt;
&lt;li&gt;Notebook (9): @bodhisilberling, @Darshan808, @goelakash, @joaovml, @KH-Coder865, @Mirochill, @xlumzee, @yangsong97, @Yann-P&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And thank you to returning contributors for their continued work!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab (56): @aaron-seq, @afshin, @agriyakhetarpal, @AliMahmoudDev, @andrii-i, @apoorvdarshan, @arjxn-py, @arun-357, @bollwyvl, @brichet, @Carreau, @ceasermikes002, @cmarmo, @CrafterKolyan, @Darshan808, @davidbrochart, @DeborahOlaboye, @doshi-kevin, @erkin98, @fcollonval, @filipeoliveira05, @flaviomartins, @fleming79, @FoSuCloud, @frenzymadness, @HaudinFlorence, @i-aki-y, @ianhi, @ianthomas23, @IsabelParedes, @itsmejay80, @itsmevichu, @JamesWrigley, @jasongrout, @JasonWeill, @jimangel, @jtpio, @krassowski, @Krish-876, @linlol, @martinRenou, @Meriem-BenIsmail, @MUFFANUJ, @peytondmurray, @prajyot-porje, @pranshugupta01, @RRosio, @schmidi314, @soniya-malviy, @superlevure, @SylvainCorlay, @tmetzl, @utsav-develops, @xc2, @Yann-P, @Zsailer&lt;/li&gt;
&lt;li&gt;Notebook (9): @andrii-i, @brichet, @Carreau, @jtpio, @krassowski, @martinRenou, @minrk, @RamiNoodle733, @takluyver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you to all the people who tested and provided feedback for the pre-releases! Lastly, thank you to the weekly triage group for triaging JupyterLab and Notebook issues: @RRosio, @krassowski, @andrii-i, @rodrigosf672, @ktaletsk among others who attend.&lt;/p&gt;
&lt;h2 id="further-reading"&gt;Further reading&lt;/h2&gt;
&lt;p&gt;For more details, see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full Release Notes for &lt;a href="https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-6"&gt;JupyterLab 4.6&lt;/a&gt; and &lt;a href="https://jupyter-notebook.readthedocs.io/en/stable/changelog.html#id1"&gt;Notebook 7.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Full changelog on GitHub: &lt;a href="https://github.com/jupyterlab/jupyterlab/releases/tag/v4.6.0"&gt;JupyterLab&lt;/a&gt; and &lt;a href="https://github.com/jupyter/notebook/releases/tag/v7.6.0"&gt;Notebook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/></entry><entry><title>JupyterLab 4.5 and Notebook 7.5 are available!</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/" rel="alternate"/><published>2025-11-24T09:32:00+00:00</published><updated>2025-11-24T09:32:00+00:00</updated><author><name>Jeremy Tuloup</name></author><id>tag:jasongrout.github.io,2025-11-24:/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/</id><summary type="html">&lt;p&gt;JupyterLab 4.5 has been released! This new minor release of JupyterLab includes 51 new features and enhancements, 81 bug fixes, 44…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; 4.5 has been released! This new minor release of JupyterLab includes 51 new features and enhancements, 81 bug fixes, 44 maintenance tasks and 38 documentation improvements. There were 51 contributors to this release.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jupyter/notebook"&gt;Jupyter Notebook&lt;/a&gt; 7.5 has also been released, including many of the fixes and enhancements in this JupyterLab 4.5 release. While the releases on GitHub provide additional detail on the updates made to both &lt;a href="https://github.com/jupyterlab/jupyterlab/releases/tag/v4.5.0"&gt;JupyterLab 4.5&lt;/a&gt; and &lt;a href="https://github.com/jupyter/notebook/releases/tag/v7.5.0"&gt;Notebook 7.5&lt;/a&gt;, this article highlights some particularly notable changes.&lt;/p&gt;
&lt;p&gt;Extension authors can refer to the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-4-to-4-5"&gt;Extension Migration Guide&lt;/a&gt; for information on API updates and details regarding changes to core packages.&lt;/p&gt;
&lt;h2 id="performance-and-windowing"&gt;Performance and windowing&lt;/h2&gt;
&lt;p&gt;The default windowing mode is now &lt;code&gt;contentVisibility&lt;/code&gt; which improves cell rendering and alleviates previously reported issues. The minimap can be enabled for all windowing modes and all notebooks via the &lt;code&gt;Settings&lt;/code&gt; menu, or by toggling the minimap per notebook with the &lt;code&gt;View&lt;/code&gt; -&amp;gt; &lt;code&gt;Show Minimap&lt;/code&gt; option. Additional fixes improve layout containment and scrollbar behavior when working with long cells.&lt;/p&gt;
&lt;h2 id="notebook-improvements"&gt;Notebook improvements&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Saving large notebooks is now faster&lt;/strong&gt; and more responsive thanks to streamed uploads and users can now open notebooks without starting a kernel, via the &lt;code&gt;Open With&lt;/code&gt; context menu option.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Open a notebook without a kernel" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/images/001-0_zjjwutgF-mDuypaA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Open a notebook without a kernel&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Markdown support has been expanded&lt;/strong&gt; for using grid and flex based layouts and the Table of Contents has been significantly improved to better handle markdown headings, fixing issues with HTML tags, comments, and horizontal lines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copying and pasting cells across browser tabs is now supported&lt;/strong&gt; and the “Line Wrap” toggle in settings now correctly applies line wrapping to cells.&lt;/p&gt;
&lt;p&gt;Other improvements include: restored scrolling to in-notebook links, manual saving support in collaborative mode, and improved performance and memory usage when streaming text outputs.&lt;/p&gt;
&lt;h2 id="debugger-and-console-improvements"&gt;Debugger and Console improvements&lt;/h2&gt;
&lt;p&gt;The debugger’s evaluate dialog has been replaced with an interactive console with syntax highlighting and code completion, and the variables panel now preserves its contents when switching editors. Selected breakpoints are now visually highlighted and breakpoints correctly handle empty lines and duplicate clicks. A visual indicator is displayed when the debugger is paused.&lt;/p&gt;
&lt;p&gt;Debugger panels as well as console debugging panels now reference the cell execution count helping users relate breakpoints, call stacks and source code to the cells they originate from.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="JupyterLab 4.5 includes many improvements to the debugger" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/images/002-0_5p78_XdDJh5oSnci.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;JupyterLab 4.5 includes many improvements to the debugger&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;For the Log Console, users can now configure the default log level via settings, as well as customise the toolbar.&lt;/p&gt;
&lt;h2 id="new-search-functionality-inside-terminals"&gt;New search functionality inside terminals&lt;/h2&gt;
&lt;p&gt;The terminal now includes search functionality, with search highlights that adapt to theme changes.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Search is now compatible with terminals" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/images/003-0_cJt44woU3gYoMhHu.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Search is now compatible with terminals&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="media-and-content-support"&gt;Media and content support&lt;/h2&gt;
&lt;p&gt;JupyterLab now includes built-in audio and video viewers, allowing users to open audio and video files directly from within JupyterLab.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Open audio and video files in JupyterLab" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/images/004-0_Jd_3FHeg3saSiwRs.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Open audio and video files in JupyterLab&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="file-browser-enhancements"&gt;File browser enhancements&lt;/h2&gt;
&lt;p&gt;Uploaded files can auto-open, with controls for size limits and behavior, and a new &lt;code&gt;allowFileUploads&lt;/code&gt; setting provides control over upload permissions.&lt;/p&gt;
&lt;p&gt;There is now a menu option for creating new Python, R, or Julia files, and a “Select All” command has also been added, also accessible via the &lt;code&gt;Ctrl + A&lt;/code&gt; keyboard shortcut.&lt;/p&gt;
&lt;p&gt;Users can now configure file browser breadcrumbs through the settings editor options &lt;code&gt;breadcrumbsLeftItems&lt;/code&gt; and &lt;code&gt;breadcrumbsRightItems&lt;/code&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="JupyterLab 4.5 includes many improvements to the file browser" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-5-and-notebook-7-5-are-available/images/005-0_V05aZinAy9fytWaU.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;JupyterLab 4.5 includes many improvements to the file browser&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Updates to file dialogs and navigation have addressed column spacing, preferred-directory handling and double-click behavior.&lt;/p&gt;
&lt;h2 id="keyboard-shortcuts-and-commands"&gt;Keyboard shortcuts and commands&lt;/h2&gt;
&lt;p&gt;Code fold and unfold commands have been added and shortcuts for these can be set in the settings editor.&lt;/p&gt;
&lt;p&gt;The “Show Workspace Indicator” command has been added to the command palette and the “Send Code to Console” shortcut has been restored. The previous issue involving editing shortcuts on Safari loosing focus, has been resolved.&lt;/p&gt;
&lt;p&gt;With Jupyter Notebook 7.5.0, the &lt;code&gt;O&lt;/code&gt; key has been defined as the keyboard shortcut to toggle cell outputs, restoring this familiar functionality from the classic notebook.&lt;/p&gt;
&lt;h2 id="settings"&gt;Settings&lt;/h2&gt;
&lt;p&gt;The settings editor now supports a &lt;code&gt;toSkip&lt;/code&gt; configuration to hide specific plugins from view.&lt;/p&gt;
&lt;p&gt;A new setting, &lt;code&gt;addExtraLineOnCellMerge&lt;/code&gt;, allows to remove the extra line added when merging cells, which is expected behavior based on the classic notebook.&lt;/p&gt;
&lt;h2 id="user-interface-and-accessibility"&gt;User interface and accessibility&lt;/h2&gt;
&lt;p&gt;JupyterLab can now automatically switch between light and dark themes when “Synchronize with System Settings” is enabled.&lt;/p&gt;
&lt;p&gt;Dialog components display buttons and checkboxes on separate lines for better readability, and selections in the terminal under high-contrast themes have better visibility.&lt;/p&gt;
&lt;p&gt;Keyboard navigation and tab order in the status bar has also been improved.&lt;/p&gt;
&lt;h2 id="update-from-jupytercon"&gt;Update from JupyterCon&lt;/h2&gt;
&lt;p&gt;At JupyterCon 2025 in San Diego, the Jupyter Frontends team presented an update on features released since JupyterLab 4.0. This session covers the progress made since the previous conference in 2023. You can watch the full recording below.&lt;/p&gt;
&lt;iframe src="https://www.youtube-nocookie.com/embed/xiPJDIbUU0o" title="Lightning Talk: What&amp;#x27;s New in Jupyter Frontends - Jeremy Tuloup, QuantStack &amp;amp; Rosio Reyes, Anaconda" width="560" height="315" style="aspect-ratio: 560 / 315" loading="lazy" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thank you to all the new contributors, the Jupyter Frontends team hopes to see you back!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @Ankitaupadhaya, @CrafterKolyan, @EtiennePelletier, @Frank-Steiner, @Meriem-BenIsmail, @arjxn-py, @bnavigator, @bsundaram1, @dnlzrgz, @dotnetautor, @gjmooney&lt;/li&gt;
&lt;li&gt;Notebook: @honnix, @jchen1223, @sangampaudel530&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And thank you to returning contributors for their continued work!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @Darshan808, @DenisaCG, @HaudinFlorence, @MUFFANUJ, @RRosio, @SylvainCorlay, @achhina, @afshin, @andrii-i, @bollwyvl, @brichet, @choldgraf, @cmarmo, @davidbrochart, @ianthomas23, @isabela-pf, @itsmevichu, @jasongrout, @jrdnbradford, @jtpio, @kathatherine, @kr-2003, @krassowski, @mahendrapaipuri, @martinRenou, @minrk, @nkn2022, @peytondmurray, @ritzdevp, @robertstrauss, @rschroll, @shreve, @skapin, @trungleduc, @yacchin1205, @yukiiii04, @zanieb&lt;/li&gt;
&lt;li&gt;Notebook: @choldgraf, @itsmevichu, @jasongrout, @jtpio, @krassowski, @minrk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you to all the people who tested and provided feedback for the pre-releases! Lastly, thank you to the weekly triage group for triaging JupyterLab, Notebook and JupyterLab Desktop issues: @RRosio, @krassowski, @andrii-i, @danyeaw among others who attend.&lt;/p&gt;
</content><category term="AI"/><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/></entry><entry><title>JupyterLab 4.4 and Notebook 7.4 are available!</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/" rel="alternate"/><published>2025-05-21T09:54:00+00:00</published><updated>2025-05-21T09:54:00+00:00</updated><author><name>Jeremy Tuloup</name></author><id>tag:jasongrout.github.io,2025-05-21:/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/</id><summary type="html">&lt;p&gt;JupyterLab 4.4 has been released! This new minor release of JupyterLab includes many new features and bug fixes.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; 4.4 has been released! This new minor release of JupyterLab includes 28 new features and enhancements, 76 bug fixes, 63 maintenance tasks and 34 documentation improvements. There were 56 contributors to this release.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jupyter/notebook"&gt;Jupyter Notebook&lt;/a&gt; 7.4 has also been released, including many of the fixes and enhancements in this JupyterLab 4.4 release. While the releases on GitHub provide additional detail on the updates made to both &lt;a href="https://github.com/jupyterlab/jupyterlab/releases/tag/v4.4.0"&gt;JupyterLab 4.4&lt;/a&gt; and &lt;a href="https://github.com/jupyter/notebook/releases/tag/v7.4.0"&gt;Notebook 7.4&lt;/a&gt;, this article highlights some particularly notable changes.&lt;/p&gt;
&lt;p&gt;Extension authors can refer to the &lt;a href="https://jupyterlab.readthedocs.io/en/stable/extension/extension_migration.html#jupyterlab-4-3-to-4-4"&gt;Extension Migration Guide&lt;/a&gt; for information on API updates and details regarding changes to core packages.&lt;/p&gt;
&lt;h2 id="code-console-improvements"&gt;Code console improvements&lt;/h2&gt;
&lt;p&gt;The code console prompt can now be positioned on the top, left, or right side of the console, in addition to the default bottom placement. The placement is persisted in the Prompt Cell Position setting. The console toolbar now includes buttons to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Execute code&lt;/li&gt;
&lt;li&gt;Restart the kernel&lt;/li&gt;
&lt;li&gt;Clear the cells&lt;/li&gt;
&lt;li&gt;Switch the kernel&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="Changing the position of the prompt cell in JupyterLab code consoles" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/images/001-0_xR1yXwkrzFar51Rh.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Changing the position of the prompt cell in JupyterLab code consoles&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Additional settings for console behavior have been added:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear Code Content on Execute (enabled by default) — When disabled, the code submitted for execution remains in the code editor, allowing for further edits.&lt;/li&gt;
&lt;li&gt;Hide Code Input — When enabled, only the execution output is shown in the console.&lt;/li&gt;
&lt;li&gt;Clear Cells on Execute — When enabled, only the last cell is displayed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Toggling all the three new settings transforms the console into an interactive editor resembling an ephemeral notebook with a single cell.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="The code console configured as a single executable cell" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/images/002-0_yzStobKzh8gMimoc.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The code console configured as a single executable cell&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="settings-import-and-export"&gt;Settings import and export&lt;/h2&gt;
&lt;p&gt;Settings can now be exported to &lt;code&gt;overrides.json&lt;/code&gt; from the Settings Editor, which can be used to pre-configure defaults in deployments or to restore settings.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Import and export settings from the Settings Editor" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/images/003-0_MaZubqod8W1g-JHz.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Import and export settings from the Settings Editor&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="workspace-indicator"&gt;Workspace indicator&lt;/h2&gt;
&lt;p&gt;An opt-in workspace indicator is displayed on the top bar (next to the menu bar). It can be enabled in the &lt;code&gt;Settings → View → Appearance → Show Workspace Indicator&lt;/code&gt;:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="The workspace indicator" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/images/004-0_9RGYIRu0foogfJC-.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The workspace indicator&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="support-for-collaboration-without-rtc-drive"&gt;Support for collaboration without &lt;code&gt;RTC:&lt;/code&gt; drive&lt;/h2&gt;
&lt;p&gt;Real time collaboration in previous versions of JupyterLab (which can be enabled by installing jupyter-collaboration package) was implemented by swapping the default JupyterLab file system drive to a collaborative drive with the &lt;code&gt;RTC:&lt;/code&gt; prefix. This approach was incompatible with multiple extensions. JupyterLab 4.4 introduces the Content Providers API, which allows the next version of &lt;code&gt;jupyter-collaboration&lt;/code&gt; to work without changing the drive prefix. This improves compatibility with extensions that do not support arbitrary drives.&lt;/p&gt;
&lt;h2 id="kernel-subshells-support"&gt;Kernel subshells support&lt;/h2&gt;
&lt;p&gt;Kernel subshells, introduced in &lt;a href="https://jupyter.org/enhancement-proposals/91-kernel-subshells/kernel-subshells.html"&gt;JEP 91&lt;/a&gt;, enable concurrent code execution in kernels that support them. When performing long-running computations (such as training a model), subshells enable users to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;ipywidgets&lt;/code&gt; with updates displayed immediately&lt;/li&gt;
&lt;li&gt;Monitor kernel resource usage (e.g. memory usage)&lt;/li&gt;
&lt;li&gt;Invoke arbitrary commands (e.g., refine code for a subsequent cell) while maintaining live access to previously defined variables&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Subshells are supported by &lt;code&gt;ipykernel&lt;/code&gt; 7 (currently in alpha).&lt;/p&gt;
&lt;p&gt;To create a subshell, open context menu (right-click) over a notebook using a kernel supporting subshells and select “New Subshell Console for Notebook”. A new console panel will open allowing access to variables from the main session.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Creating a new subshell console for a notebook in JupyterLab 4.4" src="https://jasongrout.github.io/medium-archive/pelican/posts/2025/jupyterlab-4-4-and-notebook-7-4-are-available/images/005-0_Ivi-4TMFnn-lcz4S.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Creating a new subshell console for a notebook in JupyterLab 4.4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;JupyterLab can automatically create subshells for comm messages if kernels support this feature. This enables concurrent execution of &lt;code&gt;ipywidgets&lt;/code&gt; callbacks without requiring a user action. This behavior can be changed from the settings, with options to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;disable that feature to not use subshells for comms&lt;/li&gt;
&lt;li&gt;(default) automatically create one subshell per comm-target (e.g. one subshell for all &lt;code&gt;ipywidgets&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;automatically create one subshell per comm (this can lead to issues if creating many comms)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="context-menu-opt-out"&gt;Context menu opt-out&lt;/h2&gt;
&lt;p&gt;The context menu, available under right mouse click in browsers, can now be disabled globally by toggling the &lt;code&gt;Enable Context Menu&lt;/code&gt; option available in the Command Palette, or via the JSON Settings Editor in the Application Context Menu.&lt;/p&gt;
&lt;h2 id="slimmer-status-bar"&gt;Slimmer status bar&lt;/h2&gt;
&lt;p&gt;The terminals counter no longer appears in the status bar if no terminals are open. The kernels counter can be disabled by toggling the &lt;code&gt;Show the status bar item&lt;/code&gt; setting in &lt;code&gt;Running Terminals and Kernels&lt;/code&gt; (code name &lt;code&gt;showStatusBarItem&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="walkthrough-video"&gt;Walkthrough video&lt;/h2&gt;
&lt;p&gt;If you prefer a more interactive tour of the new features mentioned in the post, check out the video below:&lt;/p&gt;
&lt;iframe src="https://www.youtube-nocookie.com/embed/YhYor8LWeJY" title="What&amp;#x27;s new in JupyterLab 4.4 and Notebook 7.4" width="560" height="315" style="aspect-ratio: 560 / 315" loading="lazy" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thank you to all the contributors (list below is based on GitHub usernames):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @Adam-D-Lewis @afshin @ajbozarth @AmberArr @andrewfulton9 @andreytaboola @andrii-i @bollwyvl @brichet @Carreau @claytonparnell @cmarmo @Darshan808 @davidbrochart @deephbz @dlqqq @echarles @fcollonval @fleming79 @holzman @hxrshxz @ianthomas23 @iisakkirotko @itsmevichu @JasonWeill @jesuino @joaopalmeiro @jtpio @kellyrowland @krassowski @kuraga @maitreya2954 @martenrichter @martinRenou @mgeier @MUFFANUJ @nkn2022 @Nriver @pawel99k @pdarshane @peytondmurray @pre-commit-ci @Princekumarofficial @Rishab87 @rpwagner @RRosio @rsaditya01 @SamuelMarks @SatyajitRedekar @SylvainCorlay @trungleduc @Zsailer&lt;/li&gt;
&lt;li&gt;Notebook: @andrii-i @jdavid @jtpio @krassowski @RRosio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Special thank you to all the new contributors, the Jupyter Frontends team hopes to see you back!&lt;/p&gt;
&lt;p&gt;Thank you to all the people who tested and provided feedback for the pre-releases! Lastly, thank you to the weekly triage group for triaging JupyterLab, Notebook and JupyterLab Desktop issues: @krassowski, @RRosio, @andrii-i, @danyeaw among others who attend.&lt;/p&gt;
</content><category term="AI"/><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/></entry><entry><title>JupyterLab 4.3 and Notebook 7.3 are available!</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-3-and-notebook-7-3-are-available/" rel="alternate"/><published>2024-12-05T22:41:00+00:00</published><updated>2024-12-05T22:41:00+00:00</updated><author><name>Jeremy Tuloup</name></author><id>tag:jasongrout.github.io,2024-12-05:/medium-archive/pelican/posts/2024/jupyterlab-4-3-and-notebook-7-3-are-available/</id><summary type="html">&lt;p&gt;JupyterLab 4.3.0 and Notebook 7.3.0 have been released! These new minor releases include many enhancements and bug fixes.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; 4.3.0 has been released! This new minor release of JupyterLab includes 1 new feature, 42 enhancements, 62 bug fixes, 48 maintenance tasks and 35 documentation improvements. There were 38 contributors to this release including 18 new contributors to JupyterLab.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jupyter/notebook"&gt;Jupyter Notebook&lt;/a&gt; 7.3.0 has also been released, including many of the fixes and enhancements in this JupyterLab 4.3.0 release. While the releases on GitHub provide additional detail on the updates made to both &lt;a href="https://github.com/jupyterlab/jupyterlab/releases/tag/v4.3.0"&gt;JupyterLab 4.3&lt;/a&gt; and &lt;a href="https://github.com/jupyter/notebook/releases/tag/v7.3.0"&gt;Notebook 7.3&lt;/a&gt;, this article highlights some particularly notable changes.&lt;/p&gt;
&lt;p&gt;Extension authors can refer to the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-2-to-4-3"&gt;Extension Migration Guide&lt;/a&gt; for information on API updates and details regarding changes to core packages.&lt;/p&gt;
&lt;h2 id="minimap"&gt;Minimap&lt;/h2&gt;
&lt;p&gt;The virtual scrollbar now acts as a minimap and exposes information on whether a cell:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is running/scheduled (&lt;code&gt;[*]&lt;/code&gt;), idle (&lt;code&gt;[ ]&lt;/code&gt;) or was already run (e.g. &lt;code&gt;[1]&lt;/code&gt;),&lt;/li&gt;
&lt;li&gt;was modified since it was last executed (“dirty”) — orange background,&lt;/li&gt;
&lt;li&gt;has an output that contains an error — red background,&lt;/li&gt;
&lt;li&gt;is markdown/code (&lt;code&gt;[ ]&lt;/code&gt;/&lt;code&gt;[*]&lt;/code&gt;/&lt;code&gt;[1]&lt;/code&gt; for code, nothing for markdown),&lt;/li&gt;
&lt;li&gt;an how much text/code it contains.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To enable the minimap, click on the hamburger icon (≡) which appears in the notebook toolbar. If you do not see the hamburger icon, go to Settings → Notebook → Windowing mode and choose “full”.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="The notebook minimap in JupyterLab 4.3" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-3-and-notebook-7-3-are-available/images/001-0_ylz6jx3MOOD7NqFb.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The notebook minimap in JupyterLab 4.3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="fullscreen-mode"&gt;Fullscreen mode&lt;/h2&gt;
&lt;p&gt;JupyterLab now offers two ways to toggle the full screen mode from within the application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;using the View → Appearance → Fullscreen Mode menu entry,&lt;/li&gt;
&lt;li&gt;using a customizable shortcut, by default F11 (custom shortcuts are supported in Chrome, Safari and Edge).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="file-browser-enhancements"&gt;File browser enhancements&lt;/h2&gt;
&lt;p&gt;The file browser now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;supports resizing the columns and remembers the column sizes after reloading JupyterLab,&lt;/li&gt;
&lt;li&gt;supports uploading folders by drag-and-drop,&lt;/li&gt;
&lt;li&gt;supports navigation with a single click (opt-in in JupyterLab, default in Jupyter Notebook),&lt;/li&gt;
&lt;li&gt;has the file filter collapsed by default (funnel icon), increasing the space available.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="File browser enhancements in JupyterLab 4.3" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-3-and-notebook-7-3-are-available/images/002-0_vi_Hia43dNGLxQxD.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;File browser enhancements in JupyterLab 4.3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="server-side-execution-and-collaboration"&gt;Server-side execution and collaboration&lt;/h2&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;p&gt;You can try these features by installing extensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/datalayer/jupyter-server-nbmodel"&gt;jupyter-server-nbmodel&lt;/a&gt;* provides server-side execution for jupyter-server,&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyterlab/jupyter-collaboration"&gt;jupyter-collaboration&lt;/a&gt; provides the real-time collaboration features,&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyter-server/jupyverse"&gt;jupyverse&lt;/a&gt; is an alternative server (a replacement for jupyter-server) which supports server-side execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;* 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.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="improved-kernel-and-server-interactions"&gt;Improved kernel and server interactions&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;A new toolbar button was added in the kernel allowing to shut down unused kernels (kernels with no widget attached).&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Shut down unused kernels in JupyterLab 4.3" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-3-and-notebook-7-3-are-available/images/003-0_sZAliNNu3C2wamFo.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Shut down unused kernels in JupyterLab 4.3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="full-width-notebook"&gt;Full Width Notebook&lt;/h2&gt;
&lt;p&gt;In Jupyter Notebook 7.3, it is now possible to configure the notebook to take up the full width of the page via:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a setting that can be defined by a user via the Settings Editor&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;View &amp;gt; Enable Full Width Notebook&lt;/code&gt; menu entry&lt;/li&gt;
&lt;li&gt;the command palette, searching for &lt;code&gt;Enable Full Width Notebook&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="Full width notebook in Jupyter Notebook 7.3" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-3-and-notebook-7-3-are-available/images/004-0_6FYCiWSCRcxPNeVP.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Full width notebook in Jupyter Notebook 7.3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="jupyterlab-3-end-of-maintenance"&gt;JupyterLab 3 end of maintenance&lt;/h2&gt;
&lt;p&gt;As a reminder, &lt;strong&gt;JupyterLab 3 will reach its end of maintenance date on December 31, 2024, anywhere on Earth&lt;/strong&gt;. Users are highly encouraged to update to JupyterLab 4 as soon as possible.&lt;/p&gt;
&lt;p&gt;For more information, please refer to the &lt;a href="/posts/2024/jupyterlab-3-end-of-maintenance/"&gt;announcement post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thank you to all the new contributors, the Jupyter Frontends team hopes to see you back!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @jgoodson, @Wzixiao, @krishanbhasin-px, @hnben, @sanskriti2005, @achhina, @mahendrapaipuri, @Renegade334, @Nazeeh21, @pauldruce, @EdsterG, @gderocher, @dhysdrn, @algonell, @nekomeowww, @mjpsyapse, @kaushalaaditya99, @Nagidrop&lt;/li&gt;
&lt;li&gt;Notebook: @bluestealth, @andyscho, @algonell, @gjmooney&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And thank you to returning contributors for their continued work!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @afshin, @ajbozarth, @andrewfulton9, @andrii-i, @brichet, @cmarmo, @Darshan808, @davidbrochart, @fcollonval, @gabalafou, @HaudinFlorence, @itsmevichu, @JasonWeill, @joaopalmeiro, @jtpio, @krassowski, @maitreya2954, @Mehak261124, @NexVeridian, @RRosio&lt;/li&gt;
&lt;li&gt;Notebook: @JasonWeill, @jtpio, @krassowski, @martinRenou, @RRosio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you to all the people who tested and provided feedback for the pre-releases! Lastly, thank you to the weekly triage group for triaging JupyterLab, Notebook and JupyterLab Desktop issues: @JasonWeill, @krassowski, @RRosio, @andrii-i among others who attend.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/></entry><entry><title>JupyterLab 4.2 and Notebook 7.2 are available!</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-2-and-notebook-7-2-are-available/" rel="alternate"/><published>2024-05-22T21:00:00+00:00</published><updated>2024-05-22T21:03:00+00:00</updated><author><name>Rosio Reyes</name></author><id>tag:jasongrout.github.io,2024-05-22:/medium-archive/pelican/posts/2024/jupyterlab-4-2-and-notebook-7-2-are-available/</id><summary type="html">&lt;p&gt;JupyterLab 4.2.0 has been released! This new minor release of JupyterLab includes 3 new features, 20 enhancements, 33 bug fixes and 29…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; 4.2.0 has been released! This new minor release of JupyterLab includes 3 new features, 20 enhancements, 33 bug fixes and 29 maintenance tasks. There were 39 contributors to this release including 10 new contributors to JupyterLab.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/jupyter/notebook"&gt;Jupyter Notebook&lt;/a&gt; 7.2.0 has also been released, including many of the fixes and enhancements in this JupyterLab 4.2.0 release. While the releases on Github provide additional detail on the updates made to both &lt;a href="https://github.com/jupyterlab/jupyterlab/releases/tag/v4.2.0"&gt;JupyterLab 4.2&lt;/a&gt; and &lt;a href="https://github.com/jupyter/notebook/releases/tag/v7.2.0"&gt;Notebook 7.2&lt;/a&gt;, this article highlights some particularly notable changes.&lt;/p&gt;
&lt;p&gt;Extension authors can refer to the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-1-to-4-2"&gt;Extension Migration Guide&lt;/a&gt; for information on API updates and details regarding changes to core packages.&lt;/p&gt;
&lt;h2 id="easier-workspaces-management-with-gui"&gt;&lt;strong&gt;Easier Workspaces Management with GUI&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;It is now possible to manage workspaces from within JupyterLab with the workspaces graphical user interface. This &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/6944"&gt;long awaited feature&lt;/a&gt; offers users an additional way to interact with workspaces beyond the existing URL and CLI-based options, providing a more user-friendly and accessible alternative for some.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="JupyterLab 44.2 Workspaces Sidebar" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-2-and-notebook-7-2-are-available/images/001-1_vEiDh6zMT9nlBX3oNDK-pw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;JupyterLab 4.2.0 Workspaces UI&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="recently-openedclosed-files"&gt;&lt;strong&gt;Recently opened/closed files&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Jupyterlab-recents, an extension for tracking recent files and directories has now been integrated into core JupyterLab. This extension adds a main menu entry for recently opened/closed files. JupyterLab users now have this native functionality that provides a quick reference to files they have recently worked with. Further development work in JupyterLab core now also allows users to search for and access recently closed files and folders through a modal via the shortcut &lt;em&gt;Ctrl + Alt + A&lt;/em&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="JupyterLab 4.2.0 Recently Closed Submodal" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-2-and-notebook-7-2-are-available/images/002-1_0p77Tr6helRfOkwBIEt5Mg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;JupyterLab 4.2.0 Recently Closed Submodal&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="full-notebook-windowing-mode-by-default"&gt;&lt;strong&gt;Full notebook windowing mode by default&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The previously available full notebook windowing mode has now been made the default mode. This mode renders only the cells visible in the window, leading to improved performance. With this mode using the JupyterLab search function is recommended due to false negatives with the web browser’s native search functionality.&lt;/p&gt;
&lt;h2 id="improved-shortcuts-editor"&gt;&lt;strong&gt;Improved Shortcuts Editor&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Users can enjoy an improved experience when customizing shortcuts. Various improvements have been made to the shortcuts editor, namely: default shortcuts can be deleted, and shortcuts are sorted appropriately when using a language pack. Entries for shortcuts with varying arguments are also now accurately presented as separate items.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Delete shortcut key binding option in modal." src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-2-and-notebook-7-2-are-available/images/003-1_z8boqvL968A1NbhHbIDAdA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Modal option to delete shortcut key binding.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="dark-high-contrast-theme"&gt;&lt;strong&gt;Dark High Contrast Theme&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The JupyterLab Dark High Contrast Theme is now available for users who might benefit from higher contrast as outlined by the WCAG AAA accessibility standards for color contrast.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="JupyterLab 4.2 Dark High Contrast Theme" src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-2-and-notebook-7-2-are-available/images/004-1_A-q4OYlI3gptT2CyU_mzoA.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;JupyterLab 4.2.0 Dark High Contrast Theme&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="keyboard-shortcuts"&gt;&lt;strong&gt;Keyboard Shortcut&lt;/strong&gt;s&lt;/h2&gt;
&lt;p&gt;The shortcuts extension received some improvements based on user feedback. The &lt;em&gt;Ctrl + D&lt;/em&gt; shortcut has been restored to allow users to use to delete a line. In the interest of code editor compatibility the &lt;em&gt;Ctrl + Shift + K&lt;/em&gt; shortcut can still be used for deleting lines and multi-cursor selection is now available via the default shortcut: &lt;em&gt;Ctrl + Shift + D&lt;/em&gt;. Users are now able to toggle line comments with the shortcut &lt;em&gt;Ctrl + /&lt;/em&gt; and toggle block comments with &lt;em&gt;Alt + A&lt;/em&gt;, both of which are customizable via the Settings Editor. This release also addresses &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/15744"&gt;issues&lt;/a&gt; related to using various keys on international keyboards in macOS.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thank you to all the new contributors, we hope to see you back!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @linlol, @erkin98, @mdietz94, @UntitledError-09, @Susilkessav, @Tanmay-Deshmukh, @AnastasiaSliusar, @milinm, @Rob-P-Smith, @NexVeridian.&lt;/li&gt;
&lt;li&gt;Notebook: @afeld&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And thank you to returning contributors for their continued work!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @davidbrochart, @fcollonval, @FoSuCloud, @JasonWeill, @jtpio, @krassowski, @Alanhou1222, @divyansshhh, @itsmevichu, @kolibril13, @sawickid, @andrii-i, @bollwyvl, @brichet, @Mehak261124, @e218736, @echarles, @gabalafou, @m158261, @afshin, @minrk, @RRosio, @trungleduc, @blink1073, @diyoyo, @AllanChain, @ericsnekbytes, @HaudinFlorence&lt;/li&gt;
&lt;li&gt;Notebook: @jtpio, @krassowski&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you to all the people who tested and provided feedback for the pre-releases! Lastly, thank you to the weekly triage group for triaging JupyterLab, Notebook and JupyterLab Desktop issues: @JasonWeill, @krassowski, @RRosio among others who attend.&lt;/p&gt;
&lt;p&gt;Contributors to this blog post: @krassowski, @jtpio, @JasonWeill, @RRosio.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/></entry><entry><title>JupyterLab 4.1 and Notebook 7.1 are here 🎉</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/" rel="alternate"/><published>2024-02-26T22:57:00+00:00</published><updated>2024-02-28T17:47:00+00:00</updated><author><name>Project Jupyter</name></author><id>tag:jasongrout.github.io,2024-02-26:/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/</id><summary type="html">&lt;p&gt;JupyterLab 4.1 and Notebook 7.1 are now available! These releases include several new features, bug fixes, and enhancements for extension…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; 4.1 and &lt;a href="https://github.com/jupyter/notebook"&gt;Notebook&lt;/a&gt; 7.1 are now available! These releases include several new features, bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0 and Notebook 7.0.&lt;/p&gt;
&lt;p&gt;JupyterLab 4.1 is one of the largest minor releases of JupyterLab to date, bringing 6 new features, 39 enhancements, and 114 bug fixes to users, and addressing 140 maintenance tasks. Project Jupyter thanks the 70 contributors, including 13 new code/documentation contributors, who helped us build this new version.&lt;/p&gt;
&lt;p&gt;Jupyter Notebook 7.1 is the first minor release after &lt;a href="/posts/2023/announcing-jupyter-notebook-7/"&gt;the transition to the new codebase&lt;/a&gt;, which re-uses JupyterLab components. As such, Notebook 7.1 inherits many of the new features and fixes from JupyterLab 4.1. Feature parity with Notebook 6 was also improved in this release.&lt;/p&gt;
&lt;p&gt;JupyterLab Desktop was also upgraded to version 4.1, receiving additional bug fixes and enhancements. Thank you to Mehmet Bektas for your continuing work to improve JupyterLab Desktop!&lt;/p&gt;
&lt;p&gt;Extension authors should consult the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-0-to-4-1"&gt;Extension Migration Guide&lt;/a&gt;, which lists deprecations and changes to the public API.&lt;/p&gt;
&lt;h2 id="custom-css"&gt;Custom CSS&lt;/h2&gt;
&lt;p&gt;JupyterLab now supports automatic loading of custom CSS. &lt;a href="https://jupyterlab.readthedocs.io/en/latest/extension/extension_dev.html#theme-plugins"&gt;Themes&lt;/a&gt; are the recommended way for customizing the JupyterLab look and feel, while custom CSS is intended for minor personal adjustments.&lt;/p&gt;
&lt;p&gt;To opt in, start JupyterLab with the — custom-css flag. The location of the custom.css file is documented in the section on &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/interface_customization.html#custom-css"&gt;customizing the user interface&lt;/a&gt;. Please note that the CSS selectors may vary between versions and applications (JupyterLab vs Notebook).&lt;/p&gt;
&lt;h2 id="diagrams-in-markdown"&gt;Diagrams in Markdown&lt;/h2&gt;
&lt;p&gt;Matching GitHub-Flavoured Markdown, JupyterLab and Notebook now support &lt;a href="https://github.com/mermaid-js/mermaid"&gt;Mermaid&lt;/a&gt; diagrams. To create a Mermaid diagram, use the mermaid language specifier for a code block in a markdown cell or document, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;```mermaid
flowchart LR

A[Hard] --&amp;gt;|Text| B(Round)
B --&amp;gt; C{Decision}
C --&amp;gt;|One| D[Result 1]
C --&amp;gt;|Two| E[Result 2]
```
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;which renders as:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/images/001-0_PpZ4a6IMZOkvxz7W.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="inline-code-completion"&gt;Inline code completion&lt;/h2&gt;
&lt;p&gt;JupyterLab and Notebook now support automatic code (and text) 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 using the user’s kernel history is available.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/images/002-0_xMRyjiyaizpZ33vE.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;The suggestions can be invoked as-you-type or manually using a configurable shortcut (by default Alt + ). The default keyboard shortcuts are displayed in the small widget shown when hovering over the ghost suggestion.&lt;/p&gt;
&lt;p&gt;To enable the inline suggestions based on the kernel history, go to Settings → Settings Editor → Inline Completer → History provider → check the “enabled” checkbox.&lt;/p&gt;
&lt;p&gt;In addition to the built-in history suggestions, additional inline completion providers can be installed. For example, the &lt;a href="https://github.com/jupyterlab/jupyter-ai"&gt;jupyter-ai&lt;/a&gt; extension, version &lt;a href="https://github.com/jupyterlab/jupyter-ai/releases/tag/v2.10.0"&gt;2.10.0&lt;/a&gt; and newer, provides suggestions from compatible large language models.&lt;/p&gt;
&lt;p&gt;The Inline Completer API is still considered experimental and may be subject to change. Please share your feedback!&lt;/p&gt;
&lt;h2 id="keyboard-navigation-improvements"&gt;Keyboard navigation improvements&lt;/h2&gt;
&lt;p&gt;Numerous improvements to keyboard navigation with focus on accessibility and usability are included in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the notebook cells now retain focus&lt;/li&gt;
&lt;li&gt;the focus can now be moved beyond the active notebook&lt;/li&gt;
&lt;li&gt;the toolbars can now be navigated using arrow keys&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, see &lt;a href="/posts/2023/recent-keyboard-navigation-improvements-in-jupyter/"&gt;the post on the Jupyter Blog about keyboard navigation improvements&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="execution-history-in-notebook"&gt;Execution history in notebook&lt;/h2&gt;
&lt;p&gt;The code from previously executed cells can be used to populate empty cells, letting users iterate on code from previous cells or even previous sessions, depending on how a specific kernel stores its history.&lt;/p&gt;
&lt;p&gt;To cycle between history items, press Alt + Arrow Up and Alt + Arrow Down.&lt;/p&gt;
&lt;p&gt;To enable execution history, go to Settings Editor → Notebook → check the “Kernel history access” checkbox.&lt;/p&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;h2 id="opening-files-from-tracebacks"&gt;Opening files from tracebacks&lt;/h2&gt;
&lt;p&gt;Paths to code files detected in error tracebacks 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.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/images/003-0_9RAGHslzMNiejAyi.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="error-indicator-in-the-table-of-contents"&gt;Error indicator in the table of contents&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/images/004-0_LvMrjrwtXoQas0KA.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="plugin-manager"&gt;Plugin Manager&lt;/h2&gt;
&lt;p&gt;Individual plugins can now be disabled or enabled from a new Plugin Manager user interface. While the existing extension manager can enable/disable entire extensions, 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 in addition to the previously available extension manager.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/images/005-0_xFUeQMS4Ul12H5JG.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;This feature is intended for advanced users and is documented in depth in the &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/extensions.html#managing-plugins-with-plugin-manager"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Administrators may want to &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/extensions.html#locking-and-unlocking-plugins"&gt;lock specific plugins&lt;/a&gt; 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 &lt;a href="https://jupyterlab.readthedocs.io/en/latest/user/extensions.html#enabling-and-disabling-extensions"&gt;disabled using the CLI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="virtual-scrollbar-for-notebook-in-windowed-mode"&gt;Virtual scrollbar for notebook in windowed mode&lt;/h2&gt;
&lt;p&gt;The windowed notebook now has an optional scrollbar that shows the active cell and selected cells. Users can jump to a specific cell.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlab-4-1-and-notebook-7-1-are-here/images/006-0_XIIHUorBt2_HPYIh.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Virtual scrollbar is an experimental feature. Please share your feedback!&lt;/p&gt;
&lt;h2 id="notifications"&gt;Notifications&lt;/h2&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;when a user attempts to save a read-only document, a transient notification suggesting using “save as” is displayed&lt;/li&gt;
&lt;li&gt;when a user attempts to execute a cell before a slow-starting kernel has initialized, a notification is shown to indicate that the cell cannot be yet executed (this is opt-in and needs to be enabled in settings)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="full-notebook-windowing-mode-improvements"&gt;Full notebook windowing mode improvements&lt;/h2&gt;
&lt;p&gt;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 behavior (such as scrolling, search, rendering, and navigation) are included in this release (see the list of issues in &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/15258"&gt;#15258&lt;/a&gt; for details). Note: the windowing mode is still experimental and &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/15258"&gt;known issues&lt;/a&gt; remain to be solved.&lt;/p&gt;
&lt;h2 id="search-improvements"&gt;Search improvements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The search box will now grow automatically to accommodate longer text&lt;/li&gt;
&lt;li&gt;Search in selection can now be toggled using Alt + L and automatic search in selection can be configured in settings&lt;/li&gt;
&lt;li&gt;Tooltips with shortcuts were added to the buttons in the search box to improve discoverability of the shortcuts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Special shout out to new code/documentation contributors (hope to see you again!):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @alden-ilao @AllanChain @ashna1jain @brijsiyag @DcWire @DenisaCG @Deepali1211 @dhml @dolevf @eliaslma @emmanuel-ferdman @e4e @g547315 @jans-code @j264415 @kiliansinger @KiranmaiKalla @misterfads @mmichilot @mdengler @MFA-X-AI @m158261@nbowditch-einblick @nluetts @paolocarinci @pauky @paulkim3151 @phil-zxx @Rmarieta @RRosio @Sarthug99 @sinistersnare @t03857785 @Wh1isper&lt;/li&gt;
&lt;li&gt;Notebook: @Dilip-Jain @haok1402 @akx&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you to the returning contributors (please do feel invited to review pull requests as well!):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab: @afshin @akx @andrewfulton9 @andrii-i @bollwyvl @bikash30851 @brichet @davidbrochart @divyansshhh @dharmaquark @DonJayamanne @echarles @ericsnekbytes @fcollonval @firai @FoSuCloud @gabalafou @hbcarlos @JasonWeill @jtpio @krassowski @mctoohey @minrk @nishikantparmariam @parmentelat @skyetim @smacke @SylvainCorlay @telamonian @tibdex @timkpaine @trungleduc @yuvipanda&lt;/li&gt;
&lt;li&gt;Notebook: @brichet @jtpio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and everyone who tested the pre-releases!&lt;/p&gt;
&lt;p&gt;Additionally, we would like to thank our community triage leaders who helped sort issues for JupyterLab (@JasonWeill), Notebook (@RRosio) and JupyterLab Desktop during the course of &lt;a href="https://github.com/jupyterlab/team-compass?tab=readme-ov-file#weekly-jupyter-triage-meeting"&gt;weekly triage meetings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Contributors to this blog post: @JasonWeill @krassowski @gabalafou @jtpio&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/></entry><entry><title>Announcing Jupyter Notebook 7</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/" rel="alternate"/><published>2023-07-26T16:08:00+00:00</published><updated>2023-07-28T21:24:00+00:00</updated><author><name>Project Jupyter</name></author><id>tag:jasongrout.github.io,2023-07-26:/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/</id><summary type="html">&lt;p&gt;Jupyter Notebook 7 is the most significant release of the Jupyter Notebook in years. Some highlights of this release include real-time…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Jupyter Notebook 7 is the most significant release of the Jupyter Notebook in years. Some highlights of this release include real-time collaboration, interactive debugging, table of contents, theming and dark mode, internationalization, improved accessibility, compact view on mobile devices.&lt;/p&gt;
&lt;p&gt;Both Jupyter Notebook and JupyterLab are widely used across data science, machine learning, computational research, and education. With the release of &lt;a href="/posts/2023/jupyterlab-4-0-is-here/"&gt;JupyterLab 4&lt;/a&gt; and Jupyter Notebook 7, the two sibling applications offer a unified, flexible, and integrated experience that allows you to get the best of both, in whatever combination that makes sense for you.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Jupyter Notebook 7 with a running Python 3 notebook" src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/images/001-0_1RXUtbuPrEJC95ut.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Jupyter Notebook 7 with a running Python 3 notebook&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Since Notebook 7 is based on JupyterLab, it includes many of the new features and improvements that have been added to JupyterLab over the past few years.&lt;/p&gt;
&lt;p&gt;Here is a small glimpse of what users can expect when they upgrade from Jupyter Notebook version 6 to version 7.&lt;/p&gt;
&lt;h2 id="a-familiar-document-oriented-experience"&gt;A Familiar Document-Oriented Experience&lt;/h2&gt;
&lt;p&gt;Starting with what does not change, Notebook 7 still focuses on the &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/notebook_7_features.html#a-document-centric-user-experience"&gt;document-centric user experience&lt;/a&gt; that made the classic IPython and Jupyter Notebook application so popular.&lt;/p&gt;
&lt;p&gt;It keeps the clean and lean interface that users love, and it enables you to create and edit the same Jupyter notebook &lt;code&gt;.ipynb&lt;/code&gt; files that contain live code, equations, visualizations and narrative text.&lt;/p&gt;
&lt;h2 id="visual-debugger"&gt;Visual Debugger&lt;/h2&gt;
&lt;p&gt;Notebook 7 includes the &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/notebook_7_features.html#debugger"&gt;interactive debugger&lt;/a&gt; from JupyterLab, which enables you to step through your code cell by cell. You can also set breakpoints and inspect variables.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Visual debugging in Jupyter Notebook 7" src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/images/002-0_E7VuIsVkLGz_0qWM.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Visual debugging in Jupyter Notebook 7&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="real-time-collaboration"&gt;Real-Time Collaboration&lt;/h2&gt;
&lt;p&gt;Notebook 7 enables you to use the same &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/notebook_7_features.html#real-time-collaboration"&gt;real-time collaboration&lt;/a&gt; extension as JupyterLab so you can share your notebook with other users and edit it in real time. This even works across JupyterLab and Jupyter Notebook! To start using real-time collaboration, you will need to install the &lt;code&gt;jupyter-collaboration&lt;/code&gt; extension:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install jupyter-collaboration
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;figure&gt;
&lt;img alt="A side-by-side animated example of real-time collaboration in Jupyter Notebook 7" src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/images/003-0_aiZac10EROHCzjDH.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;A side-by-side animated example of real-time collaboration in Jupyter Notebook 7&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="theming-and-dark-mode"&gt;Theming and Dark Mode&lt;/h2&gt;
&lt;p&gt;A dark &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/notebook_7_features.html#theming-and-dark-mode"&gt;theme&lt;/a&gt; is now available in the Jupyter Notebook by default.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Jupyter Notebook 7 with JupyterLab Dark theme" src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/images/004-0_dB66sd0Lj_Tkj1zv.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Jupyter Notebook 7 with JupyterLab Dark theme&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;You can also install many other JupyterLab themes. For example to install the JupyterLab night theme:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install jupyterlab-night
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;figure&gt;
&lt;img alt="Jupyter Notebook 7 with JupyterLab Night theme" src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/announcing-jupyter-notebook-7/images/005-0_IpQyDee4zZ5VJAkM.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Jupyter Notebook 7 with JupyterLab Night theme&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="improved-integration-between-jupyterlab-and-notebook"&gt;Improved integration between JupyterLab and Notebook&lt;/h2&gt;
&lt;p&gt;We have built Notebook 7 and JupyterLab 4 to work well together. When you run either application using &lt;code&gt;jupyter lab&lt;/code&gt; or &lt;code&gt;jupyter notebook&lt;/code&gt;, we automatically detect if the other application is installed and enable its user experience as well. This is possible as both JupyterLab and Notebook use the same underlying server and extension system. From a user experience perspective, this allows you to easily open a notebook in the other application using the “JupyterLab” and “Notebook” buttons as the top of each notebook. This makes it seamless to move back and forth between the two applications to best match your work.&lt;/p&gt;
&lt;h2 id="more-features"&gt;More features&lt;/h2&gt;
&lt;p&gt;You can find a list of the new features in the &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/notebook_7_features.html"&gt;Jupyter Notebook documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="why-a-new-version"&gt;Why a new version?&lt;/h2&gt;
&lt;p&gt;Following feedback from the community, we decided in late 2021 to continue developing the Jupyter Notebook application and sunrise it as Notebook 7.&lt;/p&gt;
&lt;p&gt;The major change is building the Jupyter Notebook 7 interface with JupyterLab components so that the two applications share a common codebase and extension system. We have worked hard to ensure that the experience users know and love from Jupyter Notebook 6 is preserved, even as we have added many new features to Notebook 7. Let’s dive into those new features!&lt;/p&gt;
&lt;p&gt;You can find more details about the rationale behind this new release in &lt;a href="https://jupyter.org/enhancement-proposals/79-notebook-v7/notebook-v7.html"&gt;Jupyter Enhancement Proposal 79&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="migrating-to-notebook-7"&gt;Migrating to Notebook 7&lt;/h2&gt;
&lt;p&gt;The Jupyter Notebook Team has been working to make the transition from Notebook 6 to Notebook 7 as smooth as possible. The Notebook 7 release is a good opportunity to try out the new features and report any issues you may encounter.&lt;/p&gt;
&lt;p&gt;Because the architecture of Notebook 7 is rebuilt from the ground up, we recognize that some existing users might need a medium-term option for backward-compatibility with Notebook 6 using &lt;a href="https://nbclassic.readthedocs.io/en/latest/nbclassic.html"&gt;NbClassic&lt;/a&gt;, which delivers the same user experience and can be run on the same server as JupyterLab and Notebook 7. This means that the server hosting your Notebook can deliver those 3 difference user interfaces at the same time.&lt;/p&gt;
&lt;p&gt;There is also a &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html"&gt;migration guide&lt;/a&gt; to help you upgrade to the new version.&lt;/p&gt;
&lt;h2 id="try-it-on-binder"&gt;Try it on Binder&lt;/h2&gt;
&lt;p&gt;You can try Notebook 7 on Binder using &lt;a href="https://mybinder.org/v2/gist/jtpio/d368ab89cee5123ecee60683115e15f3/master?urlpath=/tree"&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;The work on Notebook 7 by Jeremy Tuloup was supported by &lt;a href="https://quantstack.net/"&gt;QuantStack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://anaconda.com/"&gt;Anaconda&lt;/a&gt; supported work on Notebook 6 and 7, NbClassic, documentation and maintenance.&lt;/p&gt;
&lt;h2 id="get-involved"&gt;Get Involved&lt;/h2&gt;
&lt;p&gt;There are many ways you can participate in the Notebook 7 effort. We welcome contributions from all members of the Jupyter community:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make your own extensions. You can also help the community by porting Classic Notebook extensions to Notebook 7.&lt;/li&gt;
&lt;li&gt;Contribute to the development, documentation, and design of Jupyter Notebook on GitHub. To get started with development, please see the Contributing Guide and Code of Conduct. Many issues are ideal for new contributors and are tagged as “good first issue” or “help wanted”.&lt;/li&gt;
&lt;li&gt;Connect with the community on GitHub or on Discourse. If you find a bug, have questions, or want to provide feedback, please join the conversation!&lt;/li&gt;
&lt;/ul&gt;
</content><category term="Jupyter Notebook"/><category term="releases"/></entry><entry><title>Jupyter Notebook format workshop outcomes</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/jupyter-notebook-format-workshop-outcomes/" rel="alternate"/><published>2023-04-12T17:40:00+00:00</published><updated>2023-04-12T17:40:00+00:00</updated><author><name>Frédéric Collonval</name></author><id>tag:jasongrout.github.io,2023-04-12:/medium-archive/pelican/posts/2023/jupyter-notebook-format-workshop-outcomes/</id><summary type="html">&lt;p&gt;The Jupyter Community Workshop on the notebook file format took place near Paris. Here are the great subjects we worked on.&lt;/p&gt;
</summary><content type="html">&lt;figure&gt;
&lt;img alt="Workshop Social Event challenging our senses" src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/jupyter-notebook-format-workshop-outcomes/images/001-1_OfVNHv8zp7Tn2I0hRIkN4Q.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Workshop Social Event challenging our senses&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The Jupyter Community Workshop on the notebook file format took place at the Safran Campus near Paris from February 28th to March 2nd. It was a great opportunity to gather various Jupyter stakeholders from private and public affiliations to bootstrap new features for the &lt;a href="https://nbformat.readthedocs.io/en/latest"&gt;Notebook file format&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="/posts/2022/jupyter-community-workshops/"&gt;Jupyter Community Workshops&lt;/a&gt; are a series of events designed to bring together small groups of Jupyter community members and core contributors for high-impact strategic work and community engagement on focused topics.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="community-discussions"&gt;Community discussions&lt;/h2&gt;
&lt;p&gt;The community has lots of &lt;a href="https://docs.google.com/document/d/1CZZ_EpMIeh3zDlqYEvUH4WLvjKrKGmDU6Afcz1NvMkg"&gt;ideas to improve the Notebook format&lt;/a&gt;. So we split in three smaller groups with the aim of drafting Jupyter Enhancement Proposal (JEP): the markdown group, the text-format group and the cell types group.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;markdown&lt;/strong&gt; group focused on backward compatible enhancement for the Markdown cells. The discussions focused on two subjects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The specification of the Markdown flavor (&lt;a href="https://github.com/jupyter/enhancement-proposals/issues/98"&gt;pre-proposal&lt;/a&gt;): the goals are to specify which Markdown flavor (e.g. GitHub, CommonMark, MyST,…) is used for the cell source, how to store rendered output for easier cross-compatibility and what is the default Markdown flavor.&lt;/li&gt;
&lt;li&gt;The persistence of user expression (&lt;a href="https://github.com/jupyter/enhancement-proposals/issues/94"&gt;pre-proposal&lt;/a&gt;): in order to display inline expressions within Markdown cells, the results obtained from the kernel should be stored in the notebook. This proposal aims to define the schema modification to store such information.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;strong&gt;text-format&lt;/strong&gt; group lays out a specification for an official Jupyter notebook textual format. The discussion went on after the meeting to prepare that &lt;a href="https://github.com/jupyter/enhancement-proposals/issues/102"&gt;proposal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally the &lt;strong&gt;cell-types&lt;/strong&gt; group took the hypothesis of starting from the blank page to create the best Jupyter notebook format building on top of 10-years of experience. The discussion will take time to settle down on a new specification. So if you are interested, join the weekly discussion (see &lt;a href="https://hackmd.io/hHW8k7mKS5qFBhxnFtVTCw"&gt;the meeting notes&lt;/a&gt; for all the details). In addition to the fully new specification, two backward compatible enhancements have been proposed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding &lt;em&gt;$schema&lt;/em&gt; to the notebook format and deprecate the nbformat version keys (see &lt;a href="https://github.com/jupyter/enhancement-proposals/pull/97"&gt;proposal&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Adding &lt;em&gt;extraSchema&lt;/em&gt; to the notebook format to optionally extend the schema to specify in particular metadata (see &lt;a href="https://github.com/jupyter/enhancement-proposals/issues/96"&gt;pre-proposal&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="follow-up"&gt;Follow-up&lt;/h2&gt;
&lt;p&gt;Six JEP’s are foreseen from the workshop discussions. But as mentioned earlier, the community has lots of great other ideas (like SQL cells, low-/no-code cells for inputs or visualization). So we would like to encourage anyone interested by any Jupyter enhancement to open issue on the &lt;a href="https://github.com/jupyter/enhancement-proposals"&gt;Jupyter Enhancement Proposals&lt;/a&gt; repository (see the &lt;a href="https://jupyter.org/enhancement-proposals/jupyter-enhancement-proposal-guidelines/jupyter-enhancement-proposal-guidelines.html"&gt;guidelines&lt;/a&gt; for more information).&lt;/p&gt;
&lt;p&gt;With the new &lt;a href="/posts/2023/announcing-a-new-jupyter-governance-model-and-our-first/"&gt;Jupyter governance&lt;/a&gt; in place, the new Software Steering Council is responsible for ensuring those proposals get reviewed and go through the approval process.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;I deeply want to thank all participants to the workshop that took the time (some of them despite time zone difference) to bring very constructive and thoughtful discussion.&lt;/p&gt;
&lt;p&gt;We are really grateful to Bloomberg and Amazon Web Services for their donations to the Jupyter Community Workshops program. This event would not have been possible without their generous support.&lt;/p&gt;
&lt;p&gt;We are also grateful to Safran Group for hosting this workshop and the NumFOCUS foundation for helping and mentoring this workshop organization.&lt;/p&gt;
</content><category term="community"/><category term="events"/><category term="Jupyter Notebook"/><category term="workshops"/></entry><entry><title>Jupyter Community Workshop: The notebook file format</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/jupyter-community-workshop-the-notebook-file-format/" rel="alternate"/><published>2022-12-08T16:09:00+00:00</published><updated>2022-12-08T16:09:00+00:00</updated><author><name>Frédéric Collonval</name></author><id>tag:jasongrout.github.io,2022-12-08:/medium-archive/pelican/posts/2022/jupyter-community-workshop-the-notebook-file-format/</id><summary type="html">&lt;p&gt;We are excited to announce the next in-person Jupyter Community Workshop! It will focus on the Notebook file format.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;We are excited to announce the next in-person Jupyter Community Workshop! It will focus on the &lt;a href="https://nbformat.readthedocs.io/en/latest"&gt;Notebook file format&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="/posts/2022/jupyter-community-workshops/"&gt;Jupyter Community Workshops&lt;/a&gt; are a series of events designed to bring together small groups of Jupyter community members and core contributors for high-impact strategic work and community engagement on focused topics.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Jupyter notebook file format has been around for 10 years. Its usage has grown in countless fields from teaching to data analysis in production pipelines. A great number of software applications and online services have added support for it.&lt;/p&gt;
&lt;p&gt;We want this workshop to be an opportunity for various stakeholders to push forward the format while preserving its reusability in as many applications as possible. We could for example prototype a syntax for injecting variable values in Markdown cells, specify an alternative more textual format like RMarkdown, define the Markdown variant we support,… the boundary is our imagination. By the end of the workshop, we will submit those new specifications as &lt;a href="https://jupyter.org/enhancement-proposals/README.html"&gt;Jupyter Enhancement Proposals&lt;/a&gt; to kick start the validation process for enhancing the official notebook format.&lt;/p&gt;
&lt;p&gt;The workshop will last three days, with hands-on discussions, hacking sessions, and technical presentations. The goal of this event is to foster collaboration and the sharing of knowledge between maintainers of various platforms supporting the file format, downstream library authors and power users.&lt;/p&gt;
&lt;p&gt;The workshop will be held at the Safran Campus in &lt;a href="https://www.safran-group.com/locations/france/safran-campus-2117707"&gt;Paris suburb, France&lt;/a&gt; from February 28th to March 2nd, 2023. Travel funding assistance is available for attendees from academia and those from groups which are not well-represented within the Jupyter and wider tech community!&lt;/p&gt;
&lt;p&gt;Application and all other details can be found in this &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfBQlor-UNtpGvyafefE9xEtBwd47q5ev5ju8wTYpP1Z9YRCA/viewform?usp=pp_url&amp;amp;entry.828738498=Tuesday,+February+28th&amp;amp;entry.828738498=Wednesday,+March+1st&amp;amp;entry.828738498=Thursday,+March+2nd&amp;amp;entry.541109147=No&amp;amp;entry.148929239=No"&gt;form&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We are grateful to Safran Group for sponsoring this event. We are also grateful to the sponsors of the Jupyter Community Workshop series, Bloomberg and Amazon Web Services.&lt;/em&gt;&lt;/p&gt;
</content><category term="events"/><category term="Jupyter Notebook"/><category term="workshops"/></entry><entry><title>Jupyter Notebook 6.5.0 Release Candidate</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/jupyter-notebook-6-5-0-release-candidate/" rel="alternate"/><published>2022-09-15T15:01:00+00:00</published><updated>2022-09-15T15:57:00+00:00</updated><author><name>Rosio Reyes</name></author><id>tag:jasongrout.github.io,2022-09-15:/medium-archive/pelican/posts/2022/jupyter-notebook-6-5-0-release-candidate/</id><summary type="html">&lt;p&gt;We’d like to announce the Notebook 6.5.0 release candidate which is available on PyPI.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;We’d like to announce the Notebook 6.5.0 release candidate which is available on PyPI.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Notebook 6.5.0rc0 on PyPI" src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/jupyter-notebook-6-5-0-release-candidate/images/001-1_xw3KHBE_XmDg72zKiZ-LZw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Notebook 6.5.0rc0 on PyPI&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Notebook 6 vs Notebook 7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jupyter Notebook is a longstanding project that has been loved by many for years. Even with the 2018 release of JupyterLab, a feature-full user interface with a more modern codebase, many people have continued to use Jupyter Notebook. In an effort to continue providing updates to the UI that people know and love, many developers have been working on Jupyter Notebook 7. This transition was outlined in the Jupyter Enhancement Proposal or &lt;a href="https://jupyter.org/enhancement-proposals/79-notebook-v7/notebook-v7.html"&gt;JEP 79&lt;/a&gt;, which highlights the motivation behind an updated codebase and the plans that are currently being carried out. Notebook 7 uses components from &lt;a href="https://github.com/jupyterlab/jupyterlab"&gt;JupyterLab&lt;/a&gt; and the Jupyter Server package as does JupyterLab, and the UI provides an experience much like the classic user interface that Jupyter Notebook users are familiar with. There are various new features which will be readily available, and improvements are to be made in Jupyter Notebook 7.&lt;/p&gt;
&lt;p&gt;Due to this upcoming release, there were some necessary changes that had to be made to Jupyter Notebook 6. Jupyter Notebook 6 has lived in the &lt;a href="https://github.com/jupyter/notebook"&gt;jupyter/notebook&lt;/a&gt; repository whose main branch reflects Notebook 7. Notebook 6 uses the same Python Tornado server architecture, and the NotebookApp class that has been present all through previous Notebook releases. However, as of Notebook 6.5 the static HTML/CSS/JS assets that constitute the user interface have been moved to a different repository, the &lt;a href="https://github.com/jupyter/nbclassic"&gt;jupyter/nbclassic&lt;/a&gt; repository. Notebook 6.5 aims to be end of life in a reasonable timeframe. With this in mind, Notebook 6.5 will focus on security and bug fixes rather than new features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NbClassic&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the more sustainable Notebook 7 in the horizon, and Notebook 6.5 being EOL, the NbClassic project is the repository through which enhancements and new features can be offered. NbClassic is a forked version of the 6.5.x branch of Notebook, refactored as a &lt;a href="https://jupyter-server.readthedocs.io/en/latest/developers/extensions.html"&gt;Jupyter Server extension&lt;/a&gt;. Through this, users can benefit from the updates to other parts of the ecosystem such as Jupyter Server. While the classic user interface will be available through both Notebook 6 and NbClassic, immediate updates to the classic Notebook UI will be provided through NbClassic.&lt;/p&gt;
&lt;p&gt;Since as of Notebook 6.5, the static assets for the UI have been removed from the Notebook repository and are made available to Notebook 6.5 through NbClassic, and the NbClassic repository is also where issues with the classic user interface should be reported. The NbClassic project aims to provide intermediary support to those users of Notebook 6 who for various reasons may not yet be able to upgrade to Notebook 7. As NbClassic can be seen as a drop-in replacement to Notebook 6, its support and lifecycle will follow the one defined for the Notebook 6 product line. For more details on the maintenance of Notebook projects please have a look at the Maintained versions section in the &lt;a href="https://github.com/jupyter/Notebook#readme"&gt;readme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As from version 0.4.0, NbClassic is a Jupyter Server extension that is backwards compatible with most extensions built for Notebook for version 6. If your extension does not work on NbClassic, we invite you to open an issue on the &lt;a href="https://github.com/jupyter/nbclassic/issues"&gt;NbClassic GitHub repository&lt;/a&gt; so we can help you resolve it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some Use Cases&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One reason a user might not be able to update may be due to a user toolset that incorporates an extension that has not yet been ported to Notebook 7 and JupyterLab. In these cases, it will be important for extension developers to place an upper bound in their Notebook dependencies so that only versions below Notebook 7 will be installed. There may also be users who have both JupyterLab extensions and Notebook extensions as a part of their toolset.&lt;/p&gt;
&lt;p&gt;Another scenario may include DevOps Engineers who may provide Notebook 6 or 7, NbClassic, and JupyterLab to users to account for the different needs of many teams. In that scenario, the user can choose his user interface that runs on the same server port. For example if both Notebook 7 and NbClassic are installed, the default interface will be Notebook 7 under &lt;code&gt;/tree&lt;/code&gt; URL while the NbClassic interface will be available under &lt;code&gt;nbclassic/tree&lt;/code&gt; URL&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the various use cases, we aim to foster the coexistence of these projects while users and developers begin adapting to Notebook 7. Jupyter Notebook 7, JupyterLab and NbClassic share the same server architecture, allowing users to more feasibly use them interchangeably. On the other hand, Jupyter Notebook 6 will only be tied to NbClassic for the static assets that it will use. Extensions that work with Notebook 6 will be compatible with NbClassic while extensions developed for JupyterLab will work with Notebook 7. If users wish to use the upcoming Notebook 7 but have the ability to occasionally work with extensions that have not been ported, NbClassic will provide this. You can use NbClassic with the CLI command &lt;code&gt;jupyter nbclassic&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;DevOps Engineers will have to use a slightly different command to enable the notebook extension on NbClassic. For example, they will have to use &lt;code&gt;jupyter nbclassic-extension&lt;/code&gt; instead of &lt;code&gt;jupyter nbextension&lt;/code&gt;. We are working on updating the documentation to reflect those changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the release of Jupyter Notebook 6.5.0rc0, we hope to reach those who continue to use Notebook 6 and hear about your experience. The Jupyter Notebook 6.5.0 release candidate can be installed with pip: &lt;code&gt;pip install notebook==6.5.0rc0&lt;/code&gt;. For those who wish to continue using a user interface much like the classic Notebook that is familiar, Notebook 7 has an alpha release and will provide a well supported and evolving user interface. Alongside working to release Notebook 6.5 and the upcoming Notebook 7 release, we will be continuing to work on preparing NbClassic to be used with the various other Jupyter projects and gearing up for the first major release.&lt;/p&gt;
&lt;p&gt;We would be happy to hear about your experience using Notebook 6.5.0rc0. For any questions, feedback, or bug reports, we invite you to &lt;a href="https://github.com/jupyter/nbclassic/issues"&gt;open an issue&lt;/a&gt; in the NbClassic repository.&lt;/p&gt;
&lt;p&gt;Sincerely,&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jupyter.org/"&gt;Project Jupyter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Rosio Reyes&lt;/strong&gt; is a Software Engineer at Anaconda working as a part of the OSS Jupyter team. She is a Jupyter Notebook Steering Council Member and contributes to the Notebook and NbClassic projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thank You to Contributors to this blog&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Eric Charles&lt;/strong&gt; is a Software Engineer at Anaconda, Datalayer and Quansight working as a Tech Lead on the OSS Jupyter team. He is a Jupyter contributor and a member of the Jupyter Notebook Steering Council. He contributes to many Jupyter Projects and provided an outline for the blog as well as many edits and additions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eric Gentry&lt;/strong&gt;, a Software Engineer at Anaconda working on the OSS Jupyter team. He is a Jupyter Notebook Steering Council Member and contributes to the Notebook and NbClassic projects. He also provided many edits for the blog.&lt;/p&gt;
&lt;p&gt;Special thanks to the Jupyter Notebook Meeting Group for their feedback.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="releases"/></entry><entry><title>CVE-2021–32797 and CVE-2021–32798 Remote Code execution in JupyterLab and Jupyter Notebook</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2021/cve-2021-32797-and-cve-2021-32798-remote-code-execution/" rel="alternate"/><published>2021-08-09T20:05:00+00:00</published><updated>2021-08-09T20:19:00+00:00</updated><author><name>M Bussonnier</name></author><id>tag:jasongrout.github.io,2021-08-09:/medium-archive/pelican/posts/2021/cve-2021-32797-and-cve-2021-32798-remote-code-execution/</id><summary type="html">&lt;p&gt;TL:DR; All recent JupyterLab and Notebook versions are susceptible to a attack where a maliciously crafted notebook can trigger arbitrary…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;TL:DR; All recent JupyterLab and Notebook versions are susceptible to a attack where a maliciously crafted notebook can trigger arbitrary code execution when a user views these malicious files.&lt;/p&gt;
&lt;p&gt;We strongly advise all users to deploy the new version of JupyterLab and Jupyter Notebook.&lt;/p&gt;
&lt;p&gt;Jupyter Notebook 6.4.1 or above, 5.7.11 or above.&lt;/p&gt;
&lt;p&gt;Jupyter Lab 3.1.4 or above, 3.0.17 or above, 2.3.2 or above, 2.2.10 or above , 1.2.21 or above&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This blog post will be updated with links to the various patches, exploit and disclosure later once the final links are available&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="jupyter-security-model"&gt;Jupyter Security Model&lt;/h2&gt;
&lt;p&gt;Jupyter Notebook act as a REPL (Read Eval Print Loop) in a browser, our main goal is to expose as many functionalities to our users, with the least restrictions. We also want users to be able to share their results with other, and let everyone be capable of reproducing the result.&lt;/p&gt;
&lt;p&gt;When receiving an untrusted notebook from a potentially malicious source we still want users to be able to inspect a notebook without risks, our approach is that an untrusted notebook has restrictive capabilities until all cells have been manually inspected and explicitly run by a user, or the notebook is explicitly marked as trusted. If one finds a way to bypass this trust mechanism, a notebook might be able to execute code in the browser at at a time where a user is not expecting execution to occur.&lt;/p&gt;
&lt;p&gt;This is what happen in these particular CVEs, where some content of a notebook were improperly handled.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[This part of the blog post will be updated with links to actual reports, and proof of concept once the patched version have reached enough package repositories]&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="cve-timeline"&gt;&lt;strong&gt;CVE Timeline&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;We want to thanks Guillaume Jeanne (Google), and Timo Schmid (Google) for the vulnerability report and helping us through the fixing process.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thursday, 15 Jul 2021 07:11:13 -0700 (PDT): Initial question about security issue disclosure on security@ipython.org (no specific on the vulnerability)&lt;/li&gt;
&lt;li&gt;Tuesday, 20 Jul 2021 05:52:09 -0700 (PDT): Actual Vulnerability Report.&lt;/li&gt;
&lt;li&gt;Tuesday, 20 Jul 2021 : Open relevant GitHub security advisory on &lt;a href="https://github.com/jupyter/notebook/security/advisories/GHSA-hwvq-6gjx-j797"&gt;Notebook&lt;/a&gt; and &lt;a href="https://github.com/jupyterlab/jupyterlab/security/advisories/GHSA-4952-p58q-6crx"&gt;JupyterLab&lt;/a&gt; Repositories&lt;/li&gt;
&lt;li&gt;Thursday, 5 August 2021 : First releases with patched version on PyPI.&lt;/li&gt;
&lt;li&gt;Monday, 9 August : publication of this blog post and publish security advisory on GitHub.&lt;/li&gt;
&lt;li&gt;[Further item may be added to list publication by downstream repositories, like conda, conda-forge, debian…, contact us to add an item]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-we-learned"&gt;&lt;strong&gt;What we learned&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Dealing with Security vulnerability in Jupyter and more generally in Open-Source is far from easy. We initially thought about treating the Notebook and Lab CVE separately but they are/were too similar and the cross discussion too revealing to treat both independently.&lt;/p&gt;
&lt;p&gt;As Jupyter is mostly a volunteer based organisation, there is often no contributor responsible to replying to security issues, and when someone steps up they might not be a expert, nor available all the time. I want to give special thanks to &lt;a href="https://github.com/blink1073"&gt;Steve Silvester&lt;/a&gt; (Apple) , &lt;a href="https://github.com/afshin"&gt;Afshin Darian&lt;/a&gt; (Two Sigma), and &lt;a href="https://github.com/Zsailer"&gt;Zach Sailer&lt;/a&gt; (Apple), and &lt;a href="https://github.com/Carreau"&gt;Matthias Bussonnier&lt;/a&gt; (Quansight) for writing the fixes, planning through the release and notifying stakeholders.&lt;/p&gt;
&lt;p&gt;Advance notice to stakeholder is complicated, we know of a few large deployment and have personal connections to a couple organisation, and were able to reached out to let them know critical release would be published. There is an inherent tension between publicly warning our user base that security release would be published, which might push malicious actor to closely survey the codebase changes and re-derive the attack vectors, and publishing the release first, with the details later. Especially since we are trying to be transparent in our communication, security fixes are the opposite of our normal communication workflow.&lt;/p&gt;
&lt;p&gt;Our communication process is imperfect. We have 2 mailing list for security-related discussion. The first one – security@ipython.org – has only a couple of members all core contributors and can receive email from the outside, it is used for triage. It receive a high number of spam as this is public email. As it has only a few members and we are all busy, mail can slip through. The second mailing list is slightly larger, and used for internal announcement for stakeholder. It has a fairly open membership model, (ask a Jupyter developer if you can be on it, and the reason why and we’ll likely add you), though it’s content seem to be ignored (it even lands on my spam folder, not sure why).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we’ll do better&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In order to attempt to better react and be proactive with respect to security we &lt;a href="https://github.com/jupyter/governance/issues/111"&gt;are&lt;/a&gt; attempting &lt;a href="https://discourse.jupyter.org/t/project-jupyter-security-subproject/10175/6"&gt;to form&lt;/a&gt; and new &lt;a href="https://github.com/jupyter/security"&gt;security-focused&lt;/a&gt; subproject/workgroup to educate and have procedure for everything security related. We welcome your involvement and feedback in how to improve Jupyter security and how to better involve the community.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterLab"/><category term="releases"/><category term="security"/></entry><entry><title>RetroLab — A JupyterLab distribution with a retro look and feel</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/" rel="alternate"/><published>2021-05-27T11:31:00+00:00</published><updated>2021-05-28T21:29:00+00:00</updated><author><name>Jeremy Tuloup</name></author><id>tag:jasongrout.github.io,2021-05-27:/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/</id><summary type="html">&lt;p&gt;RetroLab is an alternative JupyterLab distribution, built from the ground-up, providing a notebook interface with a retro look and feel.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;RetroLab is an alternative JupyterLab distribution, built from the ground-up, providing a notebook interface with a &lt;em&gt;retro&lt;/em&gt; look and feel.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="RetroLab in action" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/001-0_31HHZ6ZIsx8T9CMe.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;RetroLab in action&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Currently at version 3.0, JupyterLab provides an advanced computational environment that can be compared to traditional IDEs and text editors like VS Code and PyCharm.&lt;/p&gt;
&lt;p&gt;However in some cases, having a leaner, simpler, and more focused interface to work on a notebook is really useful. For example when presenting an analysis to colleagues over a video call. Or teaching a topic and make sure the audience focuses on the content of the notebook.&lt;/p&gt;
&lt;p&gt;The goal of the RetroLab project is to offer an interface with a retro look and feel, similar to the Classic Notebook, while leveraging the efforts put in the development of JupyterLab itself and its extension system.&lt;/p&gt;
&lt;p&gt;Technically speaking RetroLab &lt;strong&gt;remixes&lt;/strong&gt; many of the existing plugins for JupyterLab (notebook, toolbar, terminals) and reassembles them in a different way. It also supports &lt;em&gt;prebuilt&lt;/em&gt; third-party extensions using the new distribution system added in JupyterLab 3.0. That way, many extensions built for JupyterLab will also be compatible with RetroLab.&lt;/p&gt;
&lt;p&gt;JupyterLab itself is also built as a set of extensions and plugins. The JupyterLab extension system makes it very convenient to create new distributions from a subset of plugins.&lt;/p&gt;
&lt;p&gt;Let’s have a look at some of features available in RetroLab.&lt;/p&gt;
&lt;h2 id="notebooks-files-and-terminal"&gt;Notebooks, Files and Terminal&lt;/h2&gt;
&lt;p&gt;RetroLab supports Notebooks, Files and Terminals.&lt;/p&gt;
&lt;p&gt;Notebooks can be created using the File Browser, the menu items and the command palette.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Working in a notebook with RetroLab" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/002-1_YNXP-hnVMyrpRjDwMyFBtA.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Working in a notebook with RetroLab&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The File Browser provides convenient buttons to quickly create new notebooks, files and terminals.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Creating a new Terminal" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/003-1_BZPRD5veN5Fwm81rCD2ZNQ.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Creating a new Terminal&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Long time users of the Classic Notebook will already have noticed that activities are opened in new browser tabs by default. This provides an alternative way to manage workflows. Users who prefer to manage everything within a single browser tab might want to stick to the JupyterLab default interface.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Open in a new Browser Tab by default" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/004-1_KejsZJ1Vq82_ncEGjN6zdA.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Open in a new Browser Tab by default&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="zen-mode"&gt;Zen Mode&lt;/h2&gt;
&lt;p&gt;RetroLab also offers a zen mode to quickly switch to full screen and hide the top area. Very useful to focus on a single notebook, and also during presentations or screen sharing sessions!&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Zen Mode" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/005-1_Q-cGj8z0kw7sbMl_D6y34Q.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Zen Mode&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="support-for-existing-jupyterlab-prebuilt-extensions"&gt;Support for existing JupyterLab prebuilt extensions&lt;/h2&gt;
&lt;p&gt;One of the main features in JupyterLab 3.0 is the new extension distribution system, which makes it possible to distribute extensions as &lt;em&gt;prebuilt extensions.&lt;/em&gt; Prebuilt extensions do not require users to rebuild JupyterLab or have &lt;a href="https://nodejs.org"&gt;Node.js&lt;/a&gt; installed.&lt;/p&gt;
&lt;p&gt;Since prebuilt extensions are loaded dynamically, they can also be leveraged in RetroLab without any extra step!&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Installing a new JupyterLab extension and using it in RetroLab" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/006-1_Kdj9uNSXmZVOzDVM_qKjxQ.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Installing a new JupyterLab extension and using it in RetroLab&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Note to developers: most of the time your extension will be compatible with RetroLab without changing anything. However it is good practice to think about the different types of JupyterLab distributions when developing the extension. For example some services and shell areas are not available in RetroLab: no left, right and bottom area, the main area supports adding only one widget…&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="command-palette"&gt;Command Palette&lt;/h2&gt;
&lt;p&gt;RetroLab includes a command palette, just like in JupyterLab.&lt;/p&gt;
&lt;p&gt;Hit &lt;code&gt;Ctrl-Shift-C&lt;/code&gt; or &lt;code&gt;Accel-Shift-C&lt;/code&gt; to activate it. Or via the menu with &lt;code&gt;View &amp;gt; Activate Command Palette.&lt;/code&gt;&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Using the command palette to restart the kernel" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/007-1_7k57aBOevLbtRDvCBWEWkw.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Using the command palette to restart the kernel&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="themes"&gt;Themes&lt;/h2&gt;
&lt;p&gt;RetroLab also supports Dark Mode! 🕶️&lt;/p&gt;
&lt;p&gt;In fact, it supports any other themes distributed as prebuilt extensions for JupyterLab 3.0.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Switching between the light and dark built-in themes" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/008-1_RlEcR2gqeFdzM-0Vbrrm1g.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Switching between the light and dark built-in themes&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;For an even more retro look, you might want to start &lt;code&gt;retrolab&lt;/code&gt; with the &lt;code&gt;--retro-logo&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;jupyter retro --retro-logo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;figure&gt;
&lt;img alt="The RetroLab logo with the JupyterLab Miami Nights Theme" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/009-0_GMPUEw-wPbSgc_3q.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The RetroLab logo with the JupyterLab Miami Nights Theme&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="compact-view-on-mobile-devices"&gt;Compact View on Mobile Devices&lt;/h2&gt;
&lt;p&gt;RetroLab automatically switches to a more compact layout on mobile devices, making it convenient to run code on the go.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Compact layout by default on mobile devices" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/010-1_w5BYbWktaFxHWKd-stlQGg.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Compact layout by default on mobile devices&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="next-gen-jupyterlab-features"&gt;Next-gen JupyterLab features&lt;/h2&gt;
&lt;p&gt;Since RetroLab reuses many components from JupyterLab as-is, it automatically inherits many of the improvements and cool new features being developed upstream.&lt;/p&gt;
&lt;p&gt;With the latest &lt;a href="https://github.com/jupyterlab/retrolab/releases/tag/0.3.0a0"&gt;prerelease&lt;/a&gt; for RetroLab, folks can collaborate using RetroLab, JupyterLab or even JupyterLab in Simple Mode.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Real Time Collaboration with RetroLab and JupyterLab" src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/011-1_jJQM60b76hELGDQxWcRbNA.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Real Time Collaboration with RetroLab and JupyterLab&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;To install RetroLab with &lt;code&gt;pip&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install retrolab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With &lt;a href="https://github.com/mamba-org/mamba"&gt;&lt;code&gt;mamba&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mamba install -c conda-forge retrolab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With &lt;a href="https://docs.conda.io/"&gt;&lt;code&gt;conda&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda install -c conda-forge retrolab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To try the prerelease with support for real time collaboration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install --pre retrolab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Development is happening is the following repository: &lt;a href="https://github.com/jupyterlab/retrolab"&gt;https://github.com/jupyterlab/retrolab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feedback, issues and pull requests are welcome!&lt;/p&gt;
&lt;h2 id="try-it-out-on-binder"&gt;Try it out on Binder&lt;/h2&gt;
&lt;p&gt;It is also possible to try RetroLab on &lt;a href="https://mybinder.org"&gt;Binder&lt;/a&gt; using the following link:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gist.github.com/jtpio/77c82c512f6779a1a05ab59d915dfc36"&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/012-0_4itEMxUk39fqVdJj.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="next-steps"&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;With RetroLab, we hope to inspire the development of distributions and applications built using JupyterLab components.&lt;/p&gt;
&lt;p&gt;A couple of other initiatives have already started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gator: &lt;a href="https://github.com/mamba-org/gator"&gt;https://github.com/mamba-org/gator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Quetz Frontend: &lt;a href="https://github.com/mamba-org/quetz-frontend"&gt;https://github.com/mamba-org/quetz-frontend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are also plans to &lt;a href="https://github.com/jupyterlab/retrolab#133"&gt;create a cookiecutter&lt;/a&gt; that can serve as a template to quickly bootstrap new lab-based projects from scratch.&lt;/p&gt;
&lt;h2 id="prior-art"&gt;Prior Art&lt;/h2&gt;
&lt;p&gt;This project is mostly a reboot of the two previous attempts at making something similar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/yuvipanda/simplest-notebook"&gt;The Simplest Notebook&lt;/a&gt; by &lt;a href="https://github.com/yuvipanda"&gt;Yuvi Panda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jupytercalpoly/jupyterlab-clarity-mode"&gt;JupyterLab Clarity Mode&lt;/a&gt; by &lt;a href="https://github.com/jupytercalpoly"&gt;Jupyter Cal Poly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These projects really expressed the need for a stripped down, minimal version of the Jupyter Notebook UI, and were a huge source of inspiration for RetroLab. Many thanks to the contributors!&lt;/p&gt;
&lt;h2 id="about-the-author"&gt;About the author&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://twitter.com/jtpio"&gt;Jeremy Tuloup&lt;/a&gt; is a Scientific Software Developer at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt; and a Jupyter Distinguished Contributor. Maintainer and contributor of JupyterLab, Voilà, and many projects within the Jupyter ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/013-0__yqb6gJ-JbnECfs7.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;br&gt;
&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/retrolab-a-jupyterlab-distribution-with-a-retro-look/images/014-1_n9MydI9CDW9vlav1gMlo0Q.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterLab"/></entry><entry><title>nbterm: Jupyter Notebooks in the terminal</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2021/nbterm-jupyter-notebooks-in-the-terminal/" rel="alternate"/><published>2021-04-26T16:42:00+00:00</published><updated>2021-04-26T16:42:00+00:00</updated><author><name>David Brochart</name></author><id>tag:jasongrout.github.io,2021-04-26:/medium-archive/pelican/posts/2021/nbterm-jupyter-notebooks-in-the-terminal/</id><summary type="html">&lt;p&gt;Jupyter notebooks are mostly known for their web-based user interface, such as JupyterLab or the Classic Notebook. They offer a great user…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Jupyter notebooks are mostly known for their web-based user interface, such as JupyterLab or the Classic Notebook. They offer a great user experience, allow for rich output rendering, provide interactivity through e.g. widgets, and make possible working with remote kernels.&lt;/p&gt;
&lt;p&gt;If just like me you tend to never leave the terminal in your workflow, you may be missing a tool to interact with Jupyter notebooks without switching to a web browser. While the &lt;a href="https://github.com/jupyter/jupyter_console"&gt;Jupyter Console&lt;/a&gt; already allows you to interact with a Jupyter kernel in the terminal, it is more comparable to a shell than a notebook.&lt;/p&gt;
&lt;p&gt;The notebook differs from the console in that it’s bound to a document, interleaving rich text and executable code. This makes the code representation more structured, while allowing for interactivity. Well, until recently this wasn’t possible in the terminal. But today, we are proud to announce &lt;strong&gt;nbterm&lt;/strong&gt;!&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Side-by-side comparison of the JupyterLab web notebook and nbterm." src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/nbterm-jupyter-notebooks-in-the-terminal/images/001-1_jZFC3kPJqxMSUeCGd7PHxw.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Side-by-side comparison of the JupyterLab web notebook and nbterm.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="getting-started-with-nbterm"&gt;Getting started with nbterm&lt;/h2&gt;
&lt;p&gt;Launching a notebook is as easy as entering:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;nbterm&lt;span class="w"&gt; &lt;/span&gt;my_notebook.ipynb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also create a new one if you don’t pass a notebook argument. Almost immediately, you will get a full-screen application that looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2021/nbterm-jupyter-notebooks-in-the-terminal/images/002-1_s6BRdEgITBGOR0y1Ec7GSQ.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;nbterm has other command line options:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nbterm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--help&lt;/span&gt;
&lt;span class="k"&gt;Usage&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nbterm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;OPTIONS&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NOTEBOOK_PATH&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="nl"&gt;Arguments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NOTEBOOK_PATH&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;notebook&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;default: &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="nl"&gt;Options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;--no-kernel                     Don&amp;#39;t launch a kernel.&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;--run                           Run the notebook.&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;--save-path TEXT                Path to save the notebook.&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;--version                       Show the version and exit.&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;--help                          Show this message and exit.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For example, it is possible to run all cells of a notebook in batch mode, using:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;nbterm&lt;span class="w"&gt; &lt;/span&gt;--run&lt;span class="w"&gt; &lt;/span&gt;my_notebook.ipynb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you didn’t specify a new name with &lt;code&gt;--save-path&lt;/code&gt;, a new notebook named &lt;code&gt;my_notebook_run.ipynb&lt;/code&gt; will be created, with all cell outputs populated. This mode of execution is similar to the &lt;a href="https://github.com/jupyter/nbclient"&gt;nbclient&lt;/a&gt; library, but accessible in the command line.&lt;/p&gt;
&lt;h2 id="embedding-nbterm"&gt;Embedding nbterm&lt;/h2&gt;
&lt;p&gt;It is also possible to use it as a library and embed it in your own application. Besides, all user interactions can be scripted. For instance, you can rearrange the cells and then run all cells like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;nbterm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Notebook&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nb = Notebook(&amp;quot;my_notebook.ipynb&amp;quot;)
nb.cut_cell(3)
nb.paste_cell(1)
asyncio.run(nb.run_all())
nb.save()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="a-lightweight-jupyter-stack"&gt;A lightweight Jupyter stack&lt;/h2&gt;
&lt;p&gt;While you probably can’t tell the difference, nbterm doesn’t reuse the base Jupyter components such as &lt;a href="https://github.com/jupyter/jupyter_client"&gt;jupyter-client&lt;/a&gt; and &lt;a href="https://github.com/jupyter/nbformat"&gt;nbformat&lt;/a&gt; (respectively implementing the Jupyter kernel protocol and the Jupyter Notebook format). The reason is that nbterm was started as a toy project to see how hard it would be to have a minimalist notebook client.&lt;/p&gt;
&lt;p&gt;As a Jupyter contributor, I am mostly involved in the maintenance and modernization of these packages. I wanted to experiment with a new project without the backward-compatibility constraints. This resulted in a rather lean code base, and its simplicity makes it suitable to serve as a reference for other language implementations.&lt;/p&gt;
&lt;h2 id="the-roadmap"&gt;The roadmap&lt;/h2&gt;
&lt;p&gt;While nbterm is obviously more limited than the Notebook, there are several potential improvement directions. Having rich(er) outputs is one of them. The terminal is pretty much limited to showing characters, but people have done great things with ASCII art. An attempt has been made a while ago with an &lt;a href="https://github.com/domitry/matascii"&gt;ASCII back-end for matplotlib&lt;/a&gt;. And although it’s only on macOS for now, some terminals are capable of showing real pictures, and there exists &lt;a href="https://github.com/daleroberts/itermplot"&gt;a Matplotlib back-end for iTerm2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another nice feature would be to add some interactivity. In the Notebook, this is typically achieved using widgets, but they are inherently web-based, so this is not an option. Maybe we could imagine something similar to &lt;a href="https://github.com/jupyter-widgets/ipywidgets"&gt;ipywidgets&lt;/a&gt; for the terminal, and have simple things like sliders, buttons, menus and such. I am keeping an eye on the awesome &lt;a href="https://github.com/willmcgugan/rich"&gt;Rich library&lt;/a&gt;, with which you can already create dashboards, and GUI applications in the future.&lt;/p&gt;
&lt;h2 id="try-it"&gt;Try it!&lt;/h2&gt;
&lt;p&gt;nbterm really has the look and feel of the Notebook you already know and love, with (almost) the same key bindings, so you won’t be lost. As coders, we love the terminal, and libraries like &lt;a href="https://github.com/prompt-toolkit/python-prompt-toolkit"&gt;prompt-toolkit&lt;/a&gt; and &lt;a href="https://github.com/willmcgugan/rich"&gt;Rich&lt;/a&gt; in Python, or &lt;a href="https://github.com/jupyter-xeus/cpp-terminal/"&gt;cpp-terminal&lt;/a&gt; in C++, make it possible to build beautiful applications. You can install nbterm today using your favorite package manager:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;nbterm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;mamba&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;nbterm&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;conda-forge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Be sure to update frequently, as it is improving every day. And if you want to contribute, please get in touch on the &lt;a href="https://github.com/davidbrochart/nbterm"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;The development of nbterm is sponsored by &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="about-the-author"&gt;About the author&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://twitter.com/davidbrochart"&gt;David Brochart&lt;/a&gt; is a scientific software developer at QuantStack. He is a contributor to several libraries in the Jupyter ecosystem, such as &lt;a href="https://github.com/jupyter/nbclient"&gt;nbclient&lt;/a&gt;, &lt;a href="https://github.com/jupyter/jupyter_client"&gt;jupyter-client&lt;/a&gt;, &lt;a href="https://github.com/jupyter-server/jupyter_server"&gt;jupyter-server&lt;/a&gt;, &lt;a href="https://github.com/ipython/ipykernel"&gt;ipykernel&lt;/a&gt;, and &lt;a href="https://github.com/jupyter-widgets/ipywidgets"&gt;ipywidgets&lt;/a&gt;.&lt;/p&gt;
</content><category term="Jupyter Notebook"/></entry><entry><title>Open Redirect Vulnerability in Jupyter notebook, JupyterHub</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2019/open-redirect-vulnerability-in-jupyter-jupyterhub/" rel="alternate"/><published>2019-03-28T14:03:00+00:00</published><updated>2019-04-01T11:20:00+00:00</updated><author><name>Min RK</name></author><id>tag:jasongrout.github.io,2019-03-28:/medium-archive/pelican/posts/2019/open-redirect-vulnerability-in-jupyter-jupyterhub/</id><summary type="html">&lt;p&gt;JupyterHub ≤ 0.9.4 and Notebook ≤ 5.7.6 are affected. Versions 0.9.5 and 5.7.7 are released today with fixes. Upgrade with pip or conda:&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Update: notebook 5.7.7 and JupyterHub 0.9.5 contained incomplete fixes for this issue. 5.7.8 and 0.9.6 are released with more complete fixes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;JupyterHub ≤ 0.9.5 and Notebook ≤ 5.7.8 are affected. Versions 0.9.6 and 5.7.8 are released with fixes. Upgrade with pip or conda:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install --upgrade &amp;#39;notebook&amp;gt;=5.7.8&amp;#39;
pip install --upgrade &amp;#39;jupyterhub&amp;gt;=0.9.6&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda install -c conda-forge &amp;#39;notebook&amp;gt;=5.7.8&amp;#39;
conda install -c conda-forge &amp;#39;jupyterhub&amp;gt;=0.9.6&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;notebook 5.7.8 also fixes some compatibility issues and regressions introduced in 5.7.5 and 5.7.6, especially on some Windows systems. If you use the &lt;a href="https://zero-to-jupyterhub.readthedocs.io"&gt;jupyterhub helm chart&lt;/a&gt;, version 0.8.2 upgrades JupyterHub to 0.9.6.&lt;/p&gt;
&lt;h2 id="what-is-an-open-redirect-vulnerability"&gt;What is an Open Redirect Vulnerability?&lt;/h2&gt;
&lt;p&gt;Login pages tend to take a parameter for redirecting back to a page after successful login, e.g. &lt;code&gt;/login?next=/notebooks/mynotebook.ipynb&lt;/code&gt;, so that you aren’t disrupted too much if you try to visit a page, but have to authenticate first. An &lt;a href="https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md"&gt;Open Redirect Vulnerability&lt;/a&gt; is when a malicious person crafts a link pointing to the login page of a trusted site, but setting the “redirect after successful login” parameter to send the user to their own site, instead of a page on the authenticated site (the notebook or JupyterHub server), e.g. &lt;code&gt;/login?next=http://badwebsite.biz&lt;/code&gt;. This doesn’t necessarily compromise anything immediately, but it enables phishing if users don’t notice that the domain has changed, e.g. by showing a fake “re-enter your password” page. Servers generally have to validate the redirect URL to avoid this. Both JupyterHub and Notebook already do this, but the validation didn’t take into account all possible ways to redirect to other sites, so some malicious URLs could still be crafted to redirect away from the server (the above example does not work in any recent version of either package). Only certain browsers (Chrome and Firefox, not Safari) could be redirected from the JupyterHub login page, but all browsers could be redirected away from a standalone notebook server.&lt;/p&gt;
&lt;p&gt;This vulnerability has been assigned CVE-2019–10255. This post will be updated when it has been assigned. Thanks to Ronak Odhaviya for reporting the issue. You can report security issues by emailing &lt;a href="mailto:ipython-security@googlegroups.com"&gt;ipython-security@googlegroups.com&lt;/a&gt;.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="JupyterHub"/><category term="security"/></entry><entry><title>Jupyter notebook XSSI security fix</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2019/jupyter-notebook-xssi-security-fix/" rel="alternate"/><published>2019-03-09T20:46:00+00:00</published><updated>2019-03-09T20:46:00+00:00</updated><author><name>Min RK</name></author><id>tag:jasongrout.github.io,2019-03-09:/medium-archive/pelican/posts/2019/jupyter-notebook-xssi-security-fix/</id><summary type="html">&lt;p&gt;We have just released Jupyter notebook 5.7.6 with a security fix for a cross-site inclusion (XSSI) vulnerability, where content from a…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;We have just released Jupyter notebook 5.7.6 with a security fix for a cross-site inclusion (&lt;a href="https://www.scip.ch/en/?labs.20160414"&gt;XSSI&lt;/a&gt;) vulnerability, where content from a Jupyter server could be included in another page if the visitor is logged in to the Jupyter server and the author of the page knows the URL of the server and the path within the server’s notebook directory that they would like to include. Further, it has been demonstrated with the Internet Explorer browser that some content from the accessed file can be retrieved by the attacking page. This has not yet been demonstrated with other browsers, however.&lt;/p&gt;
&lt;p&gt;To upgrade:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install --upgrade &amp;#39;notebook&amp;gt;=5.7.6&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or conda:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda install &amp;#39;notebook&amp;gt;=5.7.6&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This vulnerability was reported by the HackerOne hacker Abhishek Bundela, via Jonathan Kamens at Quantopian. The patch was developed by Min Ragan-Kelley with help from Devdatta Akhawe. Jupyter is grateful to Quantopian’s bug bounty program, which has found and reported this and other security flaws in Jupyter.&lt;/p&gt;
&lt;p&gt;This vulnerability has been assigned CVE-2019–9644.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="security"/></entry><entry><title>Jupyter Notebook security fixes</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2018/jupyter-notebook-security-fixes/" rel="alternate"/><published>2018-11-19T22:20:00+00:00</published><updated>2018-11-19T22:20:00+00:00</updated><author><name>Min RK</name></author><id>tag:jasongrout.github.io,2018-11-19:/medium-archive/pelican/posts/2018/jupyter-notebook-security-fixes/</id><summary type="html">&lt;p&gt;Two security issues have been found and fixed this week, where untrusted javascript could be executed if malicious files could be…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Two security issues have been found and fixed this week, where untrusted javascript could be executed if malicious files could be delivered to the users system and the user takes specific actions with those malicious files.&lt;/p&gt;
&lt;p&gt;The first allowed nbconvert endpoints (such as Print Preview) to render untrusted HTML and javascript with access to the notebook server. This is fixed in notebook 5.7.1. All notebook versions prior to 5.7.1 are affected. Thanks to Jonathan Kamens of Quantopian for reporting. This issue has been assigned CVE-2018–19351.&lt;/p&gt;
&lt;p&gt;The second issue allowed maliciously crafted directory names to execute javascript when opened in the tree view. This is fixed in notebook 5.7.2. All versions of notebook from 5.3.0 to 5.7.1 are affected. Thanks to Marvin Solano Quesada for reporting. This issue has been assigned CVE-2018–19352.&lt;/p&gt;
&lt;p&gt;You can check your version of the notebook package by issuing the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;jupyter notebook --version&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Whether you are using classic notebook, JupyterLab or any other notebook server extensions, we recommend that you update the &lt;code&gt;notebook&lt;/code&gt; package with :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install --upgrade notebook&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or if you are using conda-forge&lt;/p&gt;
&lt;p&gt;&lt;code&gt;conda upgrade notebook&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Thanks especially to Jonathan and Marvin for reporting these issues! If you find a security issue in a Jupyter project, please report it to &lt;code&gt;security@ipython.org&lt;/code&gt;.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="security"/></entry><entry><title>Security fix for Jupyter Notebook</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2018/security-fix-for-jupyter-notebook/" rel="alternate"/><published>2018-07-18T04:31:00+00:00</published><updated>2018-08-16T17:33:00+00:00</updated><author><name>Min RK</name></author><id>tag:jasongrout.github.io,2018-07-18:/medium-archive/pelican/posts/2018/security-fix-for-jupyter-notebook/</id><summary type="html">&lt;p&gt;We have just released Jupyter Notebook 5.6.0. This release fixes a vulnerability that could allow a maliciously crafted notebook to execute…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;We have just released Jupyter Notebook 5.6.0. This release fixes a vulnerability that could allow a maliciously crafted notebook to execute JavaScript when it is opened, bypassing the trusted-notebook mechanism.&lt;/p&gt;
&lt;p&gt;We recommend updating the notebook immediately, via pip:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install notebook&amp;gt;=5.6.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or conda:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;conda install notebook&amp;gt;=5.6.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected versions&lt;/strong&gt;: all releases prior to 5.6.0&lt;/p&gt;
&lt;p&gt;JupyterLab users are affected, independent of the version of JupyterLab itself. Upgrading the notebook package to 5.6.0 resolves the issue for users of both JupyterLab and the classic notebook.&lt;/p&gt;
&lt;p&gt;A CVE has been requested for the vulnerability. Release notes for 5.6.0 and this post will be updated as the CVE is assigned. More details of the vulnerability will be released in 30 days, on August 16, 2018.&lt;/p&gt;
&lt;p&gt;Security reports for Jupyter are greatly appreciated. You can &lt;a href="http://jupyter-notebook.readthedocs.io/en/stable/security.html#reporting-security-issues"&gt;report security issues&lt;/a&gt; to security@ipython.org.&lt;/p&gt;
&lt;p&gt;Thanks to Jonathan Kamens for reporting this issue to the security list.&lt;/p&gt;
&lt;p&gt;[Update July 28] The vulnerability have been assigned number CVE-2018–1999024.&lt;/p&gt;
&lt;p&gt;[Update August 16] MathJax versions prior to version 2.7.4 contains a Cross Site Scripting (XSS) vulnerability in the \unicode{} macro that can result in potentially untrusted Javascript running within a web browser, for example at notebook load. Notebook 5.6.0 ships with an updated mathjax version 2.7.4 which fixes this vulnerability.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="security"/></entry><entry><title>Jupyter Notebook 5.5.0</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2018/jupyter-notebook-5-5-0/" rel="alternate"/><published>2018-05-25T00:11:00+00:00</published><updated>2018-05-27T16:59:00+00:00</updated><author><name>Grant Nestor</name></author><id>tag:jasongrout.github.io,2018-05-25:/medium-archive/pelican/posts/2018/jupyter-notebook-5-5-0/</id><summary type="html">&lt;p&gt;We are pleased to announce the release of Jupyter Notebook 5.5.0. This is a minor release that introduces some new features such as:&lt;/p&gt;
</summary><content type="html">&lt;p&gt;We are pleased to announce the release of Jupyter Notebook 5.5.0. This is a minor release that introduces some new features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dynamic &lt;em&gt;Download as…&lt;/em&gt; menu for &lt;a href="http://nbconvert.readthedocs.io/en/latest/external_exporters.html"&gt;nbconvert exporters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Download as Reveal.js slides&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Quit&lt;/em&gt; button for stopping the notebook server from the dashboard&lt;/li&gt;
&lt;li&gt;&lt;em&gt;File size&lt;/em&gt; for files in the dashboard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This release also includes many bug fixes and enhancements as well as improvements to our documentation and testing infrastructure.&lt;/p&gt;
&lt;p&gt;You can install the new version of the notebook now using pip:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install --upgrade notebook&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Or conda:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;conda upgrade notebook&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="changelog"&gt;Changelog&lt;/h2&gt;
&lt;h3 id="new-features"&gt;New features:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The files list now shows file sizes (&lt;a href="https://github.com/jupyter/notebook/pull/3539/"&gt;PR #3539&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add a quit button in the dashboard (&lt;a href="https://github.com/jupyter/notebook/pull/3004/"&gt;PR #3004&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Display hostname in the terminal when running remotely (&lt;a href="https://github.com/jupyter/notebook/pull/3356/"&gt;PR #3356&lt;/a&gt;, &lt;a href="https://github.com/jupyter/notebook/pull/3593/"&gt;PR #3593&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add slides exportation/download to the menu (&lt;a href="https://github.com/jupyter/notebook/pull/3287/"&gt;PR #3287&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add any extra installed nbconvert exporters to the “Download as” menu (&lt;a href="https://github.com/jupyter/notebook/pull/3323/"&gt;PR #3323&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Editor: warning when overwriting a file that is modified on disk (&lt;a href="https://github.com/jupyter/notebook/pull/2783/"&gt;PR #2783&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Display a warning message if cookies are not enabled (&lt;a href="https://github.com/jupyter/notebook/pull/3511/"&gt;PR #3511&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Basic &lt;code&gt;__version__&lt;/code&gt; reporting for extensions (&lt;a href="https://github.com/jupyter/notebook/pull/3541/"&gt;PR #3541&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;NotebookApp.terminals_enabled&lt;/code&gt; config option (&lt;a href="https://github.com/jupyter/notebook/pull/3478/"&gt;PR #3478&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Make buffer time between last modified on disk and last modified on last save configurable (&lt;a href="https://github.com/jupyter/notebook/pull/3273/"&gt;PR #3273&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Allow binding custom shortcuts for ‘close and halt’ (&lt;a href="https://github.com/jupyter/notebook/pull/3314/"&gt;PR #3314&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add description for ‘Trusted’ notification (&lt;a href="https://github.com/jupyter/notebook/pull/3386/"&gt;PR #3386&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;settings['activity_sources']&lt;/code&gt; (&lt;a href="https://github.com/jupyter/notebook/pull/3401/"&gt;PR #3401&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add an &lt;code&gt;output_updated.OutputArea&lt;/code&gt; event (&lt;a href="https://github.com/jupyter/notebook/pull/3560/"&gt;PR #3560&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="bug-fixes"&gt;Bug fixes:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fixes to improve web accessibility (&lt;a href="https://github.com/jupyter/notebook/pull/3507/"&gt;PR #3507&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;There is more to do on this! See &lt;a href="https://github.com/jupyter/notebook/issues/1801/"&gt;#1801&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed color contrast issue in tree.less (&lt;a href="https://github.com/jupyter/notebook/pull/3336/"&gt;PR #3336&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Allow cancelling upload of large files (&lt;a href="https://github.com/jupyter/notebook/pull/3373/"&gt;PR #3373&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Don’t clear login cookie on requests without cookie (&lt;a href="https://github.com/jupyter/notebook/pull/3380/"&gt;PR #3380&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Don’t trash files on different device to home dir on Linux (&lt;a href="https://github.com/jupyter/notebook/pull/3304/"&gt;PR #3304&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Clear waiting asterisks when restarting kernel (&lt;a href="https://github.com/jupyter/notebook/pull/3494/"&gt;PR #3494&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix output prompt when &lt;code&gt;execution_count&lt;/code&gt; missing (&lt;a href="https://github.com/jupyter/notebook/pull/3236/"&gt;PR #3236&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Make the ‘changed on disk’ dialog work when displayed twice (&lt;a href="https://github.com/jupyter/notebook/pull/3589/"&gt;PR #3589&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix going back to root directory with history in notebook list (&lt;a href="https://github.com/jupyter/notebook/pull/3411/"&gt;PR #3411&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Allow defining keyboard shortcuts for missing actions (&lt;a href="https://github.com/jupyter/notebook/pull/3561/"&gt;PR #3561&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Prevent default on pageup/pagedown when completer is active (&lt;a href="https://github.com/jupyter/notebook/pull/3500/"&gt;PR #3500&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Prevent default event handling on new terminal (&lt;a href="https://github.com/jupyter/notebook/pull/3497/"&gt;PR #3497&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ConfigManager should not write out default values found in the .d directory (&lt;a href="https://github.com/jupyter/notebook/pull/3485/"&gt;PR #3485&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix leak of iopub object in activity monitoring (&lt;a href="https://github.com/jupyter/notebook/pull/3424/"&gt;PR #3424&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Javascript lint in notebooklist.js (&lt;a href="https://github.com/jupyter/notebook/pull/3409/"&gt;PR #3409&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Some Javascript syntax fixes (&lt;a href="https://github.com/jupyter/notebook/pull/3294/"&gt;PR #3294&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Convert native for loop to &lt;code&gt;Array.forEach()&lt;/code&gt; (&lt;a href="https://github.com/jupyter/notebook/pull/3477/"&gt;PR #3477&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Disable cache when downloading nbconvert output (&lt;a href="https://github.com/jupyter/notebook/pull/3484/"&gt;PR #3484&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add missing digestmod arg to HMAC (&lt;a href="https://github.com/jupyter/notebook/pull/3399/"&gt;PR #3399&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Log OSErrors failing to create less-critical files during startup (&lt;a href="https://github.com/jupyter/notebook/pull/3384/"&gt;PR #3384&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use powershell on Windows (&lt;a href="https://github.com/jupyter/notebook/pull/3379/"&gt;PR #3379&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;API spec improvements, API handler improvements (&lt;a href="https://github.com/jupyter/notebook/pull/3368/"&gt;PR #3368&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Set notebook to dirty state after change to kernel metadata (&lt;a href="https://github.com/jupyter/notebook/pull/3350/"&gt;PR #3350&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use CSP header to treat served files as belonging to a separate origin (&lt;a href="https://github.com/jupyter/notebook/pull/3341/"&gt;PR #3341&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Don’t install gettext into builtins (&lt;a href="https://github.com/jupyter/notebook/pull/3330/"&gt;PR #3330&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add missing &lt;code&gt;import _&lt;/code&gt; (&lt;a href="https://github.com/jupyter/notebook/pull/3316/"&gt;PR #3316&lt;/a&gt;, &lt;a href="https://github.com/jupyter/notebook/pull/3326/"&gt;PR #3326&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Write &lt;code&gt;notebook.json&lt;/code&gt; file atomically (&lt;a href="https://github.com/jupyter/notebook/pull/3305/"&gt;PR #3305&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix clicking with modifiers, page title updates (&lt;a href="https://github.com/jupyter/notebook/pull/3282/"&gt;PR #3282&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrade jQuery to version 2.2 (&lt;a href="https://github.com/jupyter/notebook/pull/3428/"&gt;PR #3428&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrade xterm.js to 3.1.0 (&lt;a href="https://github.com/jupyter/notebook/pull/3189/"&gt;PR #3189&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrade moment.js to 2.19.3 (&lt;a href="https://github.com/jupyter/notebook/pull/3562/"&gt;PR #3562&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrade CodeMirror to 5.35 (&lt;a href="https://github.com/jupyter/notebook/pull/3372/"&gt;PR #3372&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;“Require” pyzmq&amp;gt;=17 (&lt;a href="https://github.com/jupyter/notebook/pull/3586/"&gt;PR #3586&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="documentation"&gt;Documentation:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Documentation updates and organisation (&lt;a href="https://github.com/jupyter/notebook/pull/3584/"&gt;PR #3584&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add section in docs about privacy (&lt;a href="https://github.com/jupyter/notebook/pull/3571/"&gt;PR #3571&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add explanation on how to change the type of a cell to Markdown (&lt;a href="https://github.com/jupyter/notebook/pull/3377/"&gt;PR #3377&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update docs with confd implementation details (&lt;a href="https://github.com/jupyter/notebook/pull/3520/"&gt;PR #3520&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add more information for where &lt;code&gt;jupyter_notebook_config.py&lt;/code&gt; is located (&lt;a href="https://github.com/jupyter/notebook/pull/3346/"&gt;PR #3346&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Document options to enable nbextensions in specific sections (&lt;a href="https://github.com/jupyter/notebook/pull/3525/"&gt;PR #3525&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;jQuery attribute selector value MUST be surrounded by quotes (&lt;a href="https://github.com/jupyter/notebook/pull/3527/"&gt;PR #3527&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Do not execute special notebooks with nbsphinx (&lt;a href="https://github.com/jupyter/notebook/pull/3360/"&gt;PR #3360&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Other minor fixes in &lt;a href="https://github.com/jupyter/notebook/pull/3288/"&gt;PR #3288&lt;/a&gt;, &lt;a href="https://github.com/jupyter/notebook/pull/3528/"&gt;PR #3528&lt;/a&gt;, &lt;a href="https://github.com/jupyter/notebook/pull/3293/"&gt;PR #3293&lt;/a&gt;, &lt;a href="https://github.com/jupyter/notebook/pull/3367/"&gt;PR #3367&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="testing"&gt;Testing:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Testing with Selenium &amp;amp; Sauce labs (&lt;a href="https://github.com/jupyter/notebook/pull/3321/"&gt;PR #3321&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Selenium utils + markdown rendering tests (&lt;a href="https://github.com/jupyter/notebook/pull/3458/"&gt;PR #3458&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Convert insert cell tests to Selenium (&lt;a href="https://github.com/jupyter/notebook/pull/3508/"&gt;PR #3508&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Convert prompt numbers tests to Selenium (&lt;a href="https://github.com/jupyter/notebook/pull/3554/"&gt;PR #3554&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Convert delete cells tests to Selenium (&lt;a href="https://github.com/jupyter/notebook/pull/3465/"&gt;PR #3465&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Convert undelete cell tests to Selenium (&lt;a href="https://github.com/jupyter/notebook/pull/3475/"&gt;PR #3475&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;More selenium testing utilities (&lt;a href="https://github.com/jupyter/notebook/pull/3412/"&gt;PR #3412&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Only check links when build is trigger by Travis Cron job (&lt;a href="https://github.com/jupyter/notebook/pull/3493/"&gt;PR #3493&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix Appveyor build errors (&lt;a href="https://github.com/jupyter/notebook/pull/3430/"&gt;PR #3430&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Undo patches in teardown before attempting to delete files (&lt;a href="https://github.com/jupyter/notebook/pull/3459/"&gt;PR #3459&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Get tests running with tornado 5 (&lt;a href="https://github.com/jupyter/notebook/pull/3398/"&gt;PR #3398&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Unpin ipykernel version on Travis (&lt;a href="https://github.com/jupyter/notebook/pull/3223/"&gt;PR #3223&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="credits"&gt;Credits&lt;/h2&gt;
&lt;p&gt;This release has been a team effort and we would like to thank the following 36 people who contributed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arovit Narula (&lt;a href="https://github.com/arovit"&gt;arovit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ashley Teoh (&lt;a href="https://github.com/ashleytqy"&gt;ashleytqy&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Nicholas Bollweg (&lt;a href="https://github.com/bollwyvl"&gt;bollwyvl&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Alex Rothberg (&lt;a href="https://github.com/cancan101"&gt;cancan101&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Celina Kilcrease (&lt;a href="https://github.com/ckilcrease"&gt;ckilcrease&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dabuside (&lt;a href="https://github.com/dabuside"&gt;dabuside&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Damian Avila (&lt;a href="https://github.com/damianavila"&gt;damianavila&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Dana Lee (&lt;a href="https://github.com/danagilliann"&gt;danagilliann&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Dave Hirschfeld (&lt;a href="https://github.com/dhirschfeld"&gt;dhirschfeld&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Heng GAO (&lt;a href="https://github.com/ehengao"&gt;ehengao&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Leo Gallucci (&lt;a href="https://github.com/elgalu"&gt;elgalu&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Evan Van Dam (&lt;a href="https://github.com/evandam"&gt;evandam&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;forbxy (&lt;a href="https://github.com/forbxy"&gt;forbxy&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Grant Nestor (&lt;a href="https://github.com/gnestor"&gt;gnestor&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ethan T. Hendrix (&lt;a href="https://github.com/hendrixet"&gt;hendrixet&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Miro Hrončok (&lt;a href="https://github.com/hroncok"&gt;hroncok&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Paul Ivanov (&lt;a href="https://github.com/ivanov"&gt;ivanov&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Darío Hereñú (&lt;a href="https://github.com/kant"&gt;kant&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kevin Bates (&lt;a href="https://github.com/kevin-bates"&gt;kevin-bates&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Maarten Breddels (&lt;a href="https://github.com/maartenbreddels"&gt;maartenbreddels&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Michael Droettboom (&lt;a href="https://github.com/mdboom"&gt;mdboom&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Min RK (&lt;a href="https://github.com/minrk"&gt;minrk&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;M Pacer (&lt;a href="https://github.com/mpacer"&gt;mpacer&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Peter Parente (&lt;a href="https://github.com/parente"&gt;parente&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Paul Masson (&lt;a href="https://github.com/paulmasson"&gt;paulmasson&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Philipp Rudiger (&lt;a href="https://github.com/philippjfr"&gt;philippjfr&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mac Knight (&lt;a href="https://github.com/Shels1909"&gt;Shels1909&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Hisham Elsheshtawy (&lt;a href="https://github.com/Sheshtawy"&gt;Sheshtawy&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Simon Biggs (&lt;a href="https://github.com/SimonBiggs"&gt;SimonBiggs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Sunil Hari (&lt;a href="https://github.com/sunilhari"&gt;sunilhari&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Thomas Kluyver (&lt;a href="https://github.com/takluyver"&gt;takluyver&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tim Klever (&lt;a href="https://github.com/tklever"&gt;tklever&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Gabriel Ruiz (&lt;a href="https://github.com/unnamedplay-r"&gt;unnamedplay-r&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Vaibhav Sagar (&lt;a href="https://github.com/vaibhavsagar"&gt;vaibhavsagar&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;William Hosford (&lt;a href="https://github.com/whosford"&gt;whosford&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Hong (&lt;a href="https://github.com/xuhdev"&gt;xuhdev&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We look forward to your feedback and contributions!&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="releases"/></entry><entry><title>Jupyter Notebook 5.3.0</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2018/jupyter-notebook-5-3-0/" rel="alternate"/><published>2018-01-17T15:59:00+00:00</published><updated>2018-01-18T02:06:00+00:00</updated><author><name>Grant Nestor</name></author><id>tag:jasongrout.github.io,2018-01-17:/medium-archive/pelican/posts/2018/jupyter-notebook-5-3-0/</id><summary type="html">&lt;p&gt;We are pleased to announce the release of Jupyter Notebook 5.3.0. This is a minor release that introduces some notable improvements, such…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;We are pleased to announce the release of Jupyter Notebook 5.3.0. This is a minor release that introduces some notable improvements, such as terminal support for Windows and support for operating system trash (files deleted from the notebook dashboard are moved to the trash vs. deleted permanently), as well as many bug fixes and enhancements&lt;/p&gt;
&lt;p&gt;You can install the new version of the notebook now using pip:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install --upgrade notebook&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Or conda (it may be a few days before packages are available):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;conda upgrade notebook&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="changelog"&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Add support for terminals on windows (&lt;a href="https://github.com/jupyter/notebook/pull/3087"&gt;#3087&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add a “restart and run all” button to the toolbar (&lt;a href="https://github.com/jupyter/notebook/pull/2965"&gt;#2965&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Send files to os trash mechanism on delete (&lt;a href="https://github.com/jupyter/notebook/pull/1968"&gt;#1968&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Allow programmatic copy to clipboard (&lt;a href="https://github.com/jupyter/notebook/pull/3088"&gt;#3088&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Use DOM History API for navigating between directories in the file browser (&lt;a href="https://github.com/jupyter/notebook/pull/3115"&gt;#3115&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add translated files to folder(docs-translations) (&lt;a href="https://github.com/jupyter/notebook/pull/3065"&gt;#3065&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Allow non empty dirs to be deleted (&lt;a href="https://github.com/jupyter/notebook/pull/3108"&gt;#3108&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Set cookie on base_url (&lt;a href="https://github.com/jupyter/notebook/pull/2959"&gt;#2959&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Allow token-authenticated requests cross-origin by default (&lt;a href="https://github.com/jupyter/notebook/pull/2920"&gt;#2920&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Change cull_idle_timeout_minimum to 1 from 300 (&lt;a href="https://github.com/jupyter/notebook/pull/2910"&gt;#2910&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Config option to shut down server after n seconds with no kernels (&lt;a href="https://github.com/jupyter/notebook/pull/2963"&gt;#2963&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Display a “close” button on load notebook error (&lt;a href="https://github.com/jupyter/notebook/pull/3176"&gt;#3176&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add action to command pallette to run CodeMirror’s “indentAuto” on selection (&lt;a href="https://github.com/jupyter/notebook/pull/3175"&gt;#3175&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add option to specify extra services (&lt;a href="https://github.com/jupyter/notebook/pull/3158"&gt;#3158&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Warn_bad_name should not use global name (&lt;a href="https://github.com/jupyter/notebook/pull/3160"&gt;#3160&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Avoid overflow of hidden form (&lt;a href="https://github.com/jupyter/notebook/pull/3148"&gt;#3148&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix shutdown trans loss (&lt;a href="https://github.com/jupyter/notebook/pull/3147"&gt;#3147&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Find available kernelspecs more efficiently (&lt;a href="https://github.com/jupyter/notebook/pull/3136"&gt;#3136&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Don’t try to translate missing help strings (&lt;a href="https://github.com/jupyter/notebook/pull/3122"&gt;#3122&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Frontend/extension-config: allow default json files in a .d directory (&lt;a href="https://github.com/jupyter/notebook/pull/3116"&gt;#3116&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;requirejs&lt;/code&gt; vs. &lt;code&gt;require&lt;/code&gt; (&lt;a href="https://github.com/jupyter/notebook/pull/3097"&gt;#3097&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fixes some ui bugs in firefox &lt;a href="https://github.com/jupyter/notebook/issues/3044"&gt;#3044&lt;/a&gt; (&lt;a href="https://github.com/jupyter/notebook/pull/3058"&gt;#3058&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Compare non-specific language code when choosing to use arabic numerals (&lt;a href="https://github.com/jupyter/notebook/pull/3055"&gt;#3055&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix save-script deprecation (&lt;a href="https://github.com/jupyter/notebook/pull/3053"&gt;#3053&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Include moment locales in package_data (&lt;a href="https://github.com/jupyter/notebook/pull/3051"&gt;#3051&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix moment locale loading in bidi support (&lt;a href="https://github.com/jupyter/notebook/pull/3048"&gt;#3048&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Tornado 5: periodiccallback loop arg will be removed (&lt;a href="https://github.com/jupyter/notebook/pull/3034"&gt;#3034&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;/files&lt;/code&gt; prefix for pdf-like files (&lt;a href="https://github.com/jupyter/notebook/pull/3031"&gt;#3031&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add folder for document translation (&lt;a href="https://github.com/jupyter/notebook/pull/3022"&gt;#3022&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;When login-in via token, let a chance for user to set the password (&lt;a href="https://github.com/jupyter/notebook/pull/3008"&gt;#3008&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Switch to jupyter_core implementation of ensure_dir_exists (&lt;a href="https://github.com/jupyter/notebook/pull/3002"&gt;#3002&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Send http shutdown request on ‘stop’ subcommand (&lt;a href="https://github.com/jupyter/notebook/pull/3000"&gt;#3000&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Work on loading ui translations (&lt;a href="https://github.com/jupyter/notebook/pull/2969"&gt;#2969&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix ansi inverse (&lt;a href="https://github.com/jupyter/notebook/pull/2967"&gt;#2967&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add send2trash to requirements for building docs (&lt;a href="https://github.com/jupyter/notebook/pull/2964"&gt;#2964&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;I18n readme.md improvement (&lt;a href="https://github.com/jupyter/notebook/pull/2962"&gt;#2962&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add ‘reason’ field to json error responses (&lt;a href="https://github.com/jupyter/notebook/pull/2958"&gt;#2958&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add some padding for stream outputs (&lt;a href="https://github.com/jupyter/notebook/pull/3194"&gt;#3194&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Always use setuptools in &lt;code&gt;setup.py&lt;/code&gt; (&lt;a href="https://github.com/jupyter/notebook/pull/3206"&gt;#3206&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix clearing cookies on logout when &lt;code&gt;base_url&lt;/code&gt; is configured (&lt;a href="https://github.com/jupyter/notebook/pull/3207"&gt;#3207&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="credits"&gt;Credits&lt;/h2&gt;
&lt;p&gt;This release has been a team effort and we would like to thank the following 21 people who contributed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bacboc (&lt;a href="https://github.com/bacboc"&gt;bacboc&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Steven Silvester (&lt;a href="https://github.com/blink1073"&gt;blink1073&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Matthias Bussonnier (&lt;a href="https://github.com/Carreau"&gt;Carreau&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ChungJooHo (&lt;a href="https://github.com/ChungJooHo"&gt;ChungJooHo&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;edida (&lt;a href="https://github.com/edida"&gt;edida&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Francesco Franchina (&lt;a href="https://github.com/ferdas"&gt;ferdas&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;forbxy (&lt;a href="https://github.com/forbxy"&gt;forbxy&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Grant Nestor (&lt;a href="https://github.com/gnestor"&gt;gnestor&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Josh Barnes (&lt;a href="https://github.com/jcb91"&gt;jcb91&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JocelynDelalande (&lt;a href="https://github.com/JocelynDelalande"&gt;JocelynDelalande&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Karthik Balakrishnan (&lt;a href="https://github.com/karthikb351"&gt;karthikb351&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kevin Bates (&lt;a href="https://github.com/kevin-bates"&gt;kevin-bates&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kirit Thadaka (&lt;a href="https://github.com/kirit93"&gt;kirit93&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Maarten Breddels (&lt;a href="https://github.com/maartenbreddels"&gt;maartenbreddels&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Madhu94 (&lt;a href="https://github.com/Madhu94"&gt;Madhu94&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Matthias Geier (&lt;a href="https://github.com/mgeier"&gt;mgeier&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Michael Heilman (&lt;a href="https://github.com/mheilman"&gt;mheilman&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Min RK (&lt;a href="https://github.com/minrk"&gt;minrk&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PHaeJin (&lt;a href="https://github.com/PHaeJin"&gt;PHaeJin&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Sukneet (&lt;a href="https://github.com/Sukneet"&gt;Sukneet&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Thomas Kluyver (&lt;a href="https://github.com/takluyver"&gt;takluyver&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We look forward to your feedback and contributions!&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="releases"/></entry><entry><title>Public Notebooks and Security</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2017/public-notebooks-and-security/" rel="alternate"/><published>2017-11-28T19:33:00+00:00</published><updated>2017-11-28T19:33:00+00:00</updated><author><name>Min RK</name></author><id>tag:jasongrout.github.io,2017-11-28:/medium-archive/pelican/posts/2017/public-notebooks-and-security/</id><summary type="html">&lt;p&gt;tl;dr: don’t disable notebook authentication!&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;tl;dr: don’t disable notebook authentication!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Let’s chat a little bit about public Jupyter notebook servers and security. A lot of folks run notebook servers that are publicly accessible, whether they are the access point to a cloud server or remote access to their home or office computer. This is great! It is important to keep in mind that, since arbitrary code execution is the main point of IPython and Jupyter, running a publicly accessible server without authentication or encryption is a very bad idea indeed. Prior to notebook 4.3, this was the &lt;em&gt;default&lt;/em&gt; behavior of Jupyter, which has led to a lot of insecure notebook servers running on cloud services. One aspect that may not be apparent is that &lt;strong&gt;people can find your public notebook server&lt;/strong&gt;, especially if it is on one of the popular cloud providers. Systematic port scans will turn up notebook servers, especially for those running on the default port of 8888. And Jupyter has become popular enough (🎉) that we know people are doing this (😠). &lt;strong&gt;Running a publicly accessible notebook server without authentication is making your computing resources free for the world to use.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The highlights to keep in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Always enable a password or token for publicly accessible notebook servers (this includes shared computers)&lt;/li&gt;
&lt;li&gt;Use HTTPS for authenticated notebooks over the Internet&lt;/li&gt;
&lt;li&gt;Unsecured public notebook servers are discoverable&lt;/li&gt;
&lt;li&gt;Running on a cloud service should be treated as if it’s publicly accessible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first two points shouldn’t be new information, and anyone &lt;a href="https://jupyter-notebook.readthedocs.io/en/latest/public_server.html#running-a-public-notebook-server"&gt;following the documentation&lt;/a&gt; should be adding basic authentication when exposing a server to the public. If you are already accessing a notebook server over https with a password or token, you have nothing to worry about. However, if you are running unsecured notebook servers on the Internet, please stop and &lt;a href="http://jupyter-notebook.readthedocs.io/en/latest/public_server.html#securing-a-notebook-server"&gt;enable a password&lt;/a&gt;. The latter points are important and may not be obvious, but the gist is: don’t disable notebook authentication, even if you think your bases are covered via other means.&lt;/p&gt;
&lt;p&gt;In notebook 4.3, a token is enabled by default, making it a little bit more inconvenient to run a totally insecure notebook server. We can’t feasibly require HTTPS by default, but free, trusted HTTPS has never been easier, thanks to &lt;a href="https://letsencrypt.org/"&gt;LetsEncrypt&lt;/a&gt;. If you can’t assign a domain name to your server, self-signed certificates &lt;a href="http://jupyter-notebook.readthedocs.io/en/latest/public_server.html#using-ssl-for-encrypted-communication"&gt;can be used&lt;/a&gt;, with some caveats (notably: Safari requires self-signed certificates be trusted at the system level before it will allow websocket connections). For shared deployments, you can also use &lt;a href="https://jupyterhub.readthedocs.io"&gt;JupyterHub&lt;/a&gt;, which allows you to authenticate notebooks via the system (PAM) or OAuth providers such as GitHub, Google, etc.&lt;/p&gt;
&lt;p&gt;Be safe out there.&lt;/p&gt;
</content><category term="Jupyter Notebook"/><category term="security"/></entry></feed>