General Codebase Orientation¶
jupyterlab repository is a monorepo: it contains code for many
packages that are versioned and published independently.
In particular, there are many TypeScript packages and a single Python package. The Python package contains server-side code, and also distributes the bundled-and-compiled TypeScript code.
See the Contributing Guidelines for detailed developer installation instructions.
The repository contains a number of top-level directories, the contents of which are described here.
This, along with the
setup.py, comprises the Python code for the project.
This includes the notebook server extension, JupyterLab’s command line interface,
entrypoints, and Python tests.
This contains the many TypeScript sub-packages which are independently versioned
and published to
the Python package.
The bulk of JupyterLab’s codebase resides in these packages.
A common pattern for the various components in JupyterLab is to have one package
that implements the component, and a second package postfixed with
that integrates that component with the rest of the application.
Inspection of the contents of this directory shows many such packages.
You can build these packages by running
This contains an environment specification for
repo2docker which allows
the repository to be tested on mybinder.org.
This specification is developer focused.
For a more user-focused binder see the
The binder instance adds two endpoints in addition to
lab-dev endpoint is the equivalent of checking out the repo locally and running
jupyter lab --dev-mode.
lab-spliced endpoint is the equivalent of building JupyterLab in spliced mode and running
See the Development workflow for source extensions for more information on spliced mode.
npm package that contains several utility scripts for managing
the JupyterLab build process.
You can build this package by running
A directory containing a series of design documents motivating various choices made in the course of building JupyterLab.
when developing the TypeScript sources. If you are running JupyterLab
dev-mode, you are serving the application out of this directory.
This directory contains the Sphinx project for this documentation.
You can create an environment to build the documentation using
conda create -f environment.yml,
and you can build the documentation by running
The entry point to the built docs will then be in
examples/ directory contains stand-alone examples of components,
such as a simple notebook on a page, a console, terminal, and a
file browser. The
app example illustrates a simplified combination of
several of the components used in JupyterLab.
Jupyter Server Configuration:
This directory contains metadata distributed with the Python package that allows it to automatically enable the Jupyter server extension upon installation.
This directory contains a series of utility scripts which are primarily used in continuous integration testing for JupyterLab.
Tests for the TypeScript packages in the
These test directories are themselves small
npm packages which pull in the
TypeScript sources and exercise their APIs.
npm package which is aids in running the tests in
A small theme used to help render our TypeDoc documentation.