JupyterLab builds on the classic Jupyter Notebook with a more flexible, extensible interface that's ideal for complex workflows in data science, research, and development. As of version 4.4 (released in May 2025), it includes enhanced tools for layout customization, concurrent execution, collaboration, and more. This tutorial dives into advanced features, assuming familiarity with basics from our previous guide. We'll cover customization, execution tools, extensions, and recent updates.
1. Customizable Layout and WorkspacesJupyterLab's interface is a modular workspace with a main work area, sidebars, and an activity bar for seamless multitasking.
5. Search, Shortcuts, and Configuration
- Resizable Panels and Tabs: Drag files (notebooks, scripts) or activities (consoles, terminals) into panels. Subdivide by dragging to panel edges. Tabs highlight the active one with a colored border (customizable). Use the Tabs panel (left sidebar) to manage all open items.
- Workspaces: Save and restore entire sessions (open files, layouts, kernel states) via File > Save Workspace As (or named URLs). Switch between profiles easily with the new Workspace Indicator (View > Appearance > Show Workspace Indicator) in 4.4. Import/export workspaces via CLI: jupyter lab workspaces export/import.
- Simple Interface Mode: Toggle (View menu) to focus on one document while keeping others loaded—great for presentations or focused editing.
- Code Consoles: Attach a console to a notebook's kernel for live variable inspection. In 4.4, enhancements include:
- Toolbar buttons: Execute code, restart kernel, clear cells, switch kernels.
- Repositionable prompt (top/bottom/left/right).
- Settings: Auto-clear code on execute, hide input (show only output), or keep only the last cell for a "single-cell editor" feel.
- Kernel Subshells (New in 4.4): For kernels like ipykernel 7+, create parallel subshells for concurrent tasks without blocking the main notebook. Right-click a notebook > "New Subshell Console for Notebook." Use cases:
- Run long computations while inspecting variables.
- Auto-create subshells for ipywidgets callbacks (configurable: one per comm-target).
- Monitor kernel resources (e.g., memory usage).
- Terminals: Embed shell access in the work area; manage via the Running Terminals panel.
- Integrated Debugger: Right sidebar panel for breakpoints, step-through execution, and variable watches in notebooks or consoles. Supports Python (via ipykernel) and other languages with extensions.
- Property Inspector: Right sidebar shows cell metadata, outputs, and editable properties for notebooks.
- Variable Inspector Extension: Install @jupyterlab/variableinspector for a dedicated panel to browse kernel variables in real-time.
- Installation: Use jupyter labextension install <extension> (federated/prebuilt for speed). Examples:
- @jupyterlab/git: Built-in Git integration for commits, diffs, branches.
- jupyterlab-lsp: Language Server Protocol for autocompletion, linting (e.g., Python with Jedi/Pylance).
- jupyter-ai: Generative AI chat in notebooks (e.g., query models like GPT).
- Management: Disable/defer via page_config.json (e.g., "disabledExtensions": ["@jupyterlab/extension-name"]). Shadow sys-prefix versions in app directory. Rebuild with jupyter lab build after changes.
- Advanced Settings Editor: Settings > Advanced Settings Editor to tweak JSON schemas for extensions (e.g., themes, keymaps). Export/import settings in 4.4 for backups across envs.
Extension Category | Examples | Use Case |
|---|---|---|
Productivity | Variable Inspector, Outline (table of contents) | Quick navigation and inspection |
Visualization | JupyterLab Draw (diagrams), Vega (interactive plots) | Embed charts and sketches |
Collaboration | jupyter-collaboration | Real-time editing without RTC drives (new API in 4.4) |
Themes/Keymaps | Dark theme, Vim/Emacs mode | Customize UI and editing |
- Advanced Search: Ctrl+F for full-document search (bypasses browser limits). Disable windowed rendering in settings for broader browser integration (trade-off: performance).
- Keyboard Shortcuts: View/customize in Advanced Settings Editor. Chain commands (e.g., run multiple actions sequentially). Supports keymaps like Vim: Settings > Text Editor > Key Map.
- Directory and Config Management: Use jupyter lab path to inspect locations (app dir, user settings, workspaces). Override defaults in overrides.json (e.g., force dark theme). Environment vars like JUPYTERLAB_SETTINGS_DIR for isolation.
- Build and Core Mode: Launch with --core-mode for a minimal, pinned build without extensions. Disable auto-rebuild checks in jupyter_server_config.py.
- Subshells and console upgrades (as above).
- Collaboration API for seamless real-time edits.
- Settings export for portability.
- Workspace switching indicator.
- Security: Run untrusted notebooks in isolated envs; extensions can execute code.
- Performance: Use federated extensions to avoid full rebuilds; monitor with subshells.
- Integration: Pairs well with VS Code's Jupyter extension for hybrid workflows.