JupyterLab computational environment. https://jupyterlab.readthedocs.io/
  • TypeScript 87.6%
  • Python 4.3%
  • CSS 4.2%
  • JavaScript 2%
  • Jupyter Notebook 1.4%
  • Other 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
ANUJ KUMAR SINGH 1b9f5c301e
Fix Shift-click cell selection after editor text selection (#19243)
## References

Closes #19242 

## Code changes

Fixes notebook multi-cell selection after selecting text in a code
editor. The mouse handler now ignores browser selections anchored inside
cell editors when deciding whether Shift-click should extend cell
selection, while preserving the existing behavior that selected output
text blocks cell selection.

## User-facing changes

Yes. It fixes a visible notebook interaction bug: Shift-click range
selection works again after selecting editor text.

## Backwards-incompatible changes

None

## AI usage

- **YES**: Some or all of the content of this PR was generated by AI.
- **YES**: The human author has carefully reviewed this PR and run this
code (keep this PR "draft" until the answer is YES)
- AI tools and models used: ChatGPT 5.5

---------

Co-authored-by: Michał Krassowski <5832902+krassowski@users.noreply.github.com>
2026-08-10 18:15:45 +01:00
.devcontainer Fixed Missing Comma in devcontainer.json to Enable Functional Configuration (#17150) 2025-01-09 19:02:34 +01:00
.github [pre-commit.ci] pre-commit autoupdate (#19236) 2026-08-06 09:13:01 +02:00
.vscode Adds recommendation to install Prettier extension (#11363) 2021-11-04 17:23:20 +01:00
binder Use resolvePath API for traceback path resolution (#18876) 2026-06-04 09:46:41 +01:00
buildutils [ci skip] Publish 4.7.0a1 2026-07-21 13:11:16 +00:00
design Baseline spelling cleanup for docs and README files (#19025) 2026-06-15 15:48:01 +01:00
dev_mode [ci skip] Publish 4.7.0a1 2026-07-21 13:11:16 +00:00
docker Update to Rspack 2.0 (#18467) 2026-05-13 10:59:09 +01:00
docs [pre-commit.ci] pre-commit autoupdate (#19236) 2026-08-06 09:13:01 +02:00
examples Add Python typing enforcement (#19164) 2026-07-23 12:48:58 +01:00
galata Fix Shift-click cell selection after editor text selection (#19243) 2026-08-10 18:15:45 +01:00
jupyter-config enable jupyterlab to work as a classic notebook extension and fix handling of binder 2020-09-08 15:11:17 -05:00
jupyterlab Fix issues exposed by mypy in build & error handlers, extension upgrade & debug logger (#19231) 2026-08-07 10:55:18 +01:00
packages Fix Shift-click cell selection after editor text selection (#19243) 2026-08-10 18:15:45 +01:00
scripts Add mypy enforcement (#19198) 2026-07-29 12:19:42 +01:00
testutils [ci skip] Publish 4.7.0a1 2026-07-21 13:11:16 +00:00
.bumpversion.cfg [ci skip] Publish 4.7.0a1 2026-07-21 13:11:16 +00:00
.cleanignore implemented fallback arg for LabIcon.resolveX methods 2020-01-29 03:15:54 -05:00
.codespellignore Add automated spell check for documentation (#18398) 2026-06-10 10:10:57 +01:00
.dockerignore [docker] Allow non-unique GID (#15699) 2024-02-19 20:27:27 +00:00
.git-blame-ignore-revs Update .git-blame-ignore-revs (#16333) 2024-05-16 11:03:44 +01:00
.gitattributes Remove vendored yarn.js (#18823) 2026-05-21 18:40:55 +01:00
.gitignore Update prettier, use cache and parallel CLI options (#18420) 2026-02-06 00:58:47 +01:00
.licenserc.yaml Add Python typing enforcement (#19164) 2026-07-23 12:48:58 +01:00
.meeseeksdev.yml Use pre-commit (#12279) 2022-03-28 11:50:01 -05:00
.pre-commit-config.yaml [pre-commit.ci] pre-commit autoupdate (#19236) 2026-08-06 09:13:01 +02:00
.prettierignore Remove vendored yarn.js (#18823) 2026-05-21 18:40:55 +01:00
.prettierrc Use pre-commit (#12279) 2022-03-28 11:50:01 -05:00
.readthedocs.yml Make docs dependencies a dependency group (#19024) 2026-06-16 21:26:36 +01:00
.stylelintignore Update to typedoc 0.27.4 (#17070) 2024-12-12 08:43:50 +00:00
.stylelintrc.yaml Enforce that certain CSS rules use variables (#18614) 2026-04-27 16:23:33 +01:00
.yarnrc.yml Do not disable immutable installs (#18940) 2026-06-24 21:08:00 +02:00
AGENTS.md Add AI rules (#18322) 2026-01-27 10:16:20 +00:00
buildapi.py Add Python typing enforcement (#19164) 2026-07-23 12:48:58 +01:00
CHANGELOG.md Update JEP 91 link to the new MyST docs URL (#19212) 2026-07-29 12:55:59 +01:00
CLAUDE.md Add AI rules (#18322) 2026-01-27 10:16:20 +00:00
clean.py Add Python typing enforcement (#19164) 2026-07-23 12:48:58 +01:00
conftest.py Add Python typing enforcement (#19164) 2026-07-23 12:48:58 +01:00
CONTRIBUTING.md Copy edits in CONTRIBUTING.md (#17078) 2024-12-12 10:12:13 +00:00
CORPORATE.md Update zoom link for weekly meetings (#17789) 2025-08-18 10:42:43 +02:00
eslint.config.mjs Add flaky-test guardrails to Galata tests via eslint-plugin-playwright (#19106) 2026-08-07 14:18:00 +01:00
eslint.config.typecheck.mjs Enable nullable-number strict boolean linting (#19133) 2026-08-03 08:40:39 +01:00
jupyterlab.desktop Add desktop file and icon for it (#14277) 2023-03-29 04:30:12 -04:00
jupyterlab.svg Add desktop file and icon for it (#14277) 2023-03-29 04:30:12 -04:00
lerna.json Fix integration tests (#14886) 2023-08-03 13:40:31 +02:00
LICENSE Remove @jupyterlab/builder package and all references to it (#18841) 2026-05-06 17:07:03 +01:00
package.json Add flaky-test guardrails to Galata tests via eslint-plugin-playwright (#19106) 2026-08-07 14:18:00 +01:00
postcss.config.js Migrate ESLint to v9 (#18434) 2026-03-02 10:05:05 +00:00
pyproject.toml Fix issues exposed by mypy in build & error handlers, extension upgrade & debug logger (#19231) 2026-08-07 10:55:18 +01:00
README.md Baseline spelling cleanup for docs and README files (#19025) 2026-06-15 15:48:01 +01:00
RELEASE.md [pre-commit.ci] pre-commit autoupdate (#19236) 2026-08-06 09:13:01 +02:00
tsconfig.eslint.json Remove @jupyterlab/builder package and all references to it (#18841) 2026-05-06 17:07:03 +01:00
tsconfigbase.json Turn on verbatimModuleSyntax (#18446) 2026-05-21 15:23:22 +01:00
tsconfigbase.test.json Remove skipLibCheck from the test tsconfig (#17143) 2025-01-07 09:27:22 +01:00
typedoc.base.json Improve API documentation (#16140) 2024-04-12 14:59:14 +01:00
typedoc.js Add TypeDoc validation gate and TSDoc linting (#18859) 2026-05-27 19:17:43 +01:00
yarn.lock Bump mermaid from 11.15.0 to 11.16.1 (#19248) 2026-08-10 10:32:51 +01:00

Installation | Documentation | Contributing | License | Team | Getting help |

JupyterLab

PyPI version PyPI Downloads Build Status Build Status Documentation Status Crowdin OpenSSF Best Practices OpenSSF Scorecard GitHub Discourse Zulip

Binder

An extensible environment for interactive and reproducible computing, based on the Jupyter Notebook and Architecture.

JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar building blocks of the classic Jupyter Notebook (notebook, terminal, text editor, file browser, rich outputs, etc.) in a flexible and powerful user interface.

JupyterLab can be extended using npm packages that use our public APIs. The prebuilt extensions can be distributed via PyPI, conda, and other package managers. The source extensions can be installed directly from npm (search for jupyterlab-extension) but require an additional build step. You can also find JupyterLab extensions exploring GitHub topic jupyterlab-extension. To learn more about extensions, see the user documentation.

Read the current JupyterLab documentation on ReadTheDocs.

Important

JupyterLab 3 reached its end of maintenance date on May 15, 2024. Fixes for critical issues were backported until December 31, 2024. If you are still running JupyterLab 3, we strongly encourage you to upgrade to JupyterLab 4 as soon as possible. For more information, see JupyterLab 3 end of maintenance on the Jupyter Blog.


Getting started

Installation

If you use conda, mamba, or pip, you can install JupyterLab with one of the following commands.

  • If you use conda:
    conda install -c conda-forge jupyterlab
    
  • If you use mamba:
    mamba install -c conda-forge jupyterlab
    
  • If you use pip:
    pip install jupyterlab
    
    If installing using pip install --user, you must add the user-level bin directory to your PATH environment variable in order to launch jupyter lab. If you are using a Unix derivative (e.g., FreeBSD, GNU/Linux, macOS), you can do this by running export PATH="$HOME/.local/bin:$PATH".

For more detailed instructions, consult the installation guide. Project installation instructions from the git sources are available in the contributor documentation.

Installing with Previous Versions of Jupyter Notebook

When using a version of Jupyter Notebook earlier than 5.3, the following command must be run after installing JupyterLab to enable the JupyterLab server extension:

jupyter serverextension enable --py jupyterlab --sys-prefix

Running

Start up JupyterLab using:

jupyter lab

JupyterLab will open automatically in the browser. See the documentation for additional details.

If you encounter an error like "Command 'jupyter' not found", please make sure PATH environment variable is set correctly. Alternatively, you can start up JupyterLab using ~/.local/bin/jupyter lab without changing the PATH environment variable.

Prerequisites and Supported Browsers

The latest versions of the following browsers are currently known to work:

  • Firefox
  • Chrome
  • Safari

See our documentation for additional details.


Getting help

We encourage you to ask questions on the Discourse forum. A question answered there can become a useful resource for others.

Bug report

To report a bug please read the guidelines and then open a Github issue. To keep resolved issues self-contained, the lock bot will lock closed issues as resolved after a period of inactivity. If a related discussion is still needed after an issue is locked, please open a new issue and reference the old issue.

Feature request

We also welcome suggestions for new features as they help make the project more useful for everyone. To request a feature please use the feature request template.


Development

Extending JupyterLab

To start developing an extension for JupyterLab, see the developer documentation and the API docs.

Contributing

To contribute code or documentation to JupyterLab itself, please read the contributor documentation.

JupyterLab follows the Jupyter Community Guides.

License

JupyterLab uses a shared copyright model that enables all contributors to maintain the copyright on their contributions. All code is licensed under the terms of the revised BSD license.

Team

JupyterLab is part of Project Jupyter and is developed by an open community. The maintenance team is assisted by a much larger group of contributors to JupyterLab and Project Jupyter as a whole. JupyterLab falls under the Jupyter Frontends Council.

The team of maintainers includes:

Archival list of maintainers

Prior to transition to the new governance model with the JupyterLab and then Frontends council, these people contributed to and maintained JupyterLab:

  • Mehmet Bektas, Netflix (general development, extensions).
  • Alex Bozarth, IBM (general development, extensions).
  • Eric Charles, Datalayer, (general development, extensions).
  • Frédéric Collonval, WebScIT (general development, extensions).
  • Martha Cryan, Mito (general development, extensions).
  • Afshin Darian, QuantStack (co-creator, application/high-level architecture, prolific contributions throughout the code base).
  • Vidar T. Fauske, JPMorgan Chase (general development, extensions).
  • Brian Granger, AWS (co-creator, strategy, vision, management, UI/UX design, architecture).
  • Jason Grout, Databricks (co-creator, vision, general development).
  • Michał Krassowski, Quansight (general development, extensions).
  • Max Klein, JPMorgan Chase (UI Package, build system, general development, extensions).
  • Gonzalo Peña-Castellanos, QuanSight (general development, i18n, extensions).
  • Fernando Perez, UC Berkeley (co-creator, vision).
  • Steven Silvester, MongoDB (co-creator, release management, packaging, prolific contributions throughout the code base).
  • Jeremy Tuloup, QuantStack (general development, extensions)
  • Chris Colbert, Project Jupyter (co-creator, application/low-level architecture, technical leadership, vision, PhosphorJS)
  • Jessica Forde, Project Jupyter (demo, documentation)
  • Tim George, Cal Poly (UI/UX design, strategy, management, user needs analysis).
  • Cameron Oelsen, Cal Poly (UI/UX design).
  • Isabela Presedo-Floyd, QuanSight Labs (design/UX).
  • Ian Rose, Quansight/City of LA (general core development, extensions).
  • Andrew Schlaepfer, Bloomberg (general development, extensions).
  • Saul Shanabrook, Quansight (general development, extensions)

Weekly Dev Meeting

We have video conference meetings every week where we discuss what we have been working on and get feedback from one another.

Anyone is welcome to attend, if they would like to discuss a topic or just listen in.

Notes are archived on GitHub Jupyter Frontends team compass.