# Extensions JupyterLab extensions add functionality to the JupyterLab application. They can provide new file viewer types, launcher activities, and output renderers for example. JupyterLab extensions are [NPM](https://www.npmjs.com/) packages. ## Installing Node.js Installing JupyterLab extensions requires Node.js version 4+. If you use ``conda``, you can get them with: ```bash conda -c conda-forge install nodejs ``` If you use [Homebrew](http://brew.sh/) on Mac OS X: ```bash brew install node ``` ## Installing Extensions The base JupyterLab application includes a core set of extensions, which provide the features described in this User Guide (Notebook, Terminal, Text Editor, etc.) New extensions can be installed into the application using the command: ``` jupyter labextension install ``` Where `` is a valid JupyterLab extension specifier. This specifier is defined by the extension author in their installation instructions. We are encouraging extension authors to add the `jupyterlab-extensions` GitHub topic to any repository with a JupyterLab extension. You can see a list of extensions by [searching Github for the juputerlab-extensions topic](https://github.com/search?utf8=%E2%9C%93&q=topic%3Ajupyterlab-extensions&type=Repositories) List the currently installed extensions by running the command: ``` jupyter labextension list ``` Uninstalled an extension by running the command: ``` jupyter labextension uninstall ``` Where `` is the name of the extension, as printed in the extension list. Core extensions can also be uninstalled this way (and can later be re-installed). Disable an extension (without unistalilng it) by running the command: ``` jupyter labextension disable ``` Where `` is the name of the extension. This will prevent the extension from loading on the front end, but does not require a rebuild. Re-enabled the extension later using the command: ``` jupyter labextension enable ``` Core plugins can also be disabled (and then re-enabled). ## Advanced usage The JupyterLab application directory (where the application assets are built and the settings reside) can be overridden using `--app-dir` in any of the JupyterLab commands, or by setting the `JUPYTERLAB_DIR` environment variable. If not specified, it will default to ``, as well as core extensions that have been explicitly uninstalled. e.g. ```bash $ cat settings/build_config.json { "uninstalled_core_extensions": [ "@jupyterlab/markdownwidget-extension" ], "linked_packages": { "@jupyterlab/python-tests": "/path/to/my/extension" } } ``` The other folders in the app directory are: `extensions`, `static`, and `staging`. The `extensions` folder has the packed tarballs for each of the installed extensions for the app. If the application directory is not the same as the `sys-prefix` directory, the extensions installed in the `sys-prefix` directory will be used in the app directory. If an extension is installed in the app directory that exists in the `sys-prefix` directory, it will shadow the `sys-prefix` version. Uninstalling an extension will first uninstall the shadowed extension, and then attempt to uninstall the `sys-prefix` version if called again. If the `sys-prefix` version cannot be uninstalled, its plugins can still be ignored using `ignoredPackages` metadata in `settings`. The `static` folder contains the assets that will be loaded by the JuptyerLab application. The `staging` folder is used to create the build and then populate the `static` folder. Running `jupyter lab` will attempt to run the `static` assets in the application folder if they exist. You can run `jupyter lab --core-mode` to load the core JupyterLab application instead.