# General Codebase Orientation

The `jupyter/jupyterlab` repository contains two packages:

- an npm package indicated by a `package.json` file in the repo's root directory
- a Python package indicated by a `setup.py` file in the repo's root directory

Th npm package and the Python package are both named `jupyterlab`.

## Directories

### NPM package: `src/`, `lib/`, `typings/`, `scripts/`

* `src/`: the source typescript files.
    - `npm run build` builds the source files into javascript files in `lib/`.
    - `npm run clean` deletes the `lib/` directory.
* `typings/`: type definitions for external libraries that typescript needs.
* `scripts/`: various scripts that the npm commands invoke.

### Examples: `examples/`

The `examples/` directory contains stand-alone examples of components,
such as a simple notebook on a page, a console, terminal, and a filebrowser.
The `lab` example illustrates a simplified combination of components used in
JupyterLab. This example shows multiple stand-alone components combined to
create a more complex application.

### Testing: `test/`

The tests are stored and run in the `test/` directory. The source files are in
`test/src/`.

### Notebook extension: `jupyterlab/`

The `jupyterlab/` directory contains the Jupyter server extension.

The server extension includes a private npm package in order to build the
**webpack bundle** which the extension serves. The private npm package depends
on the `jupyterlab` npm package found in the repo's root directory.

### Git hooks: `git-hooks/`

The `git-hooks/` directory stores some convenience git hooks that automatically
rebuild the npm package and server extension every time you check out or merge
(via pull request or direct push to master) in the git repo.

### Documentation: `docs/`

After building the docs (`npm run docs`), `docs/index.html` is the entry
point to the documentation.

## Development Quickstart

*Note: See the README for the most up to date instructions as well as added details.*

All the instructions below assume you are in the root directory of the repository.

### Build, install and run the development version

To build and install a development version of the server extension, do:

    pip install -e .

 This command will build the npm package, build and webpack the server
 extension javascript, and install the appropriate links into your python
 environment.

 To enable the server extension, do:

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

 after installation. Then start up JupyterLab with:

    jupyter lab

### Rebuild JavaScript
To rebuild the javascript for both the JupyterLab source and the server extension, run:

    npm run build:all

To rebuild JupyterLab source only, run:

    npm run build:src

To have the system rebuild the JupyterLab source automatically after every
change to the typescript source files, run:

    npm run watch:src

To rebuild the javascript for only the server extension, run:

    npm run build:serverextension


To have the system do both automatically after every change to the typescript
source files, run:

    npm run watch

and refresh your browser after each successful update.

### Build npm package

To build just the `jupyterlab` npm package, run:

	npm install
	npm run build

### Run tests

To run the tests, build the npm package and run tests:

    npm install
    npm run build
    npm test

### Build documentation

To build the docs:

    npm run docs

and go to `docs/index.html`. An automatically-generated version of the docs is
hosted at http://jupyter.org/jupyterlab/.
