Metadata-Version: 2.4
Name: jupyverse
Version: 0.14.4
Summary: A set of FPS plugins implementing a Jupyter server
Keywords: jupyter,server,fastapi,plugins
Author: Jupyter Development Team
Author-email: Jupyter Development Team <jupyter@googlegroups.com>
License-Expression: BSD-3-Clause
License-File: COPYING.md
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Dist: fps[click,fastapi,anycorn]>=0.6.0,<0.7.0
Requires-Dist: fps-contents>=0.11.0,<0.12.0
Requires-Dist: fps-file-watcher>=0.2.0,<0.3.0
Requires-Dist: fps-kernel-subprocess>=0.2.0,<0.3.0
Requires-Dist: fps-kernels>=0.11.1,<0.12.0
Requires-Dist: fps-terminals>=0.10.0,<0.11.0
Requires-Dist: fps-nbconvert>=0.10.0,<0.11.0
Requires-Dist: fps-lab>=0.11.1,<0.12.0
Requires-Dist: fps-frontend>=0.10.0,<0.11.0
Requires-Dist: rich-click>=1.6.1,<2
Requires-Dist: fps-auth>=0.10.0,<0.11.0 ; extra == 'auth'
Requires-Dist: fps-login>=0.10.0,<0.11.0 ; extra == 'auth'
Requires-Dist: fps-auth-fief>=0.10.0,<0.11.0 ; extra == 'auth-fief'
Requires-Dist: fps-auth-jupyterhub>=0.10.0,<0.11.0 ; extra == 'auth-jupyterhub'
Requires-Dist: jupyter-collaboration-ui ; extra == 'collaboration'
Requires-Dist: jupyter-docprovider ; extra == 'collaboration'
Requires-Dist: fps-file-id>=0.4.1,<0.5.0 ; extra == 'collaboration'
Requires-Dist: fps-yjs>=0.14.1,<0.15.0 ; extra == 'collaboration'
Requires-Dist: fps-ystore-sqlite>=0.2.0,<0.3.0 ; extra == 'collaboration'
Requires-Dist: fps-yrooms>=0.2.1,<0.3.0 ; extra == 'collaboration'
Requires-Dist: fps-file-watcher-poll>=0.2.0,<0.3.0 ; extra == 'file-watcher-poll'
Requires-Dist: fps-jupyterlab>=0.11.1,<0.12.0 ; extra == 'jupyterlab'
Requires-Dist: fps-jupyterlab-git>=0.2.0,<0.3.0 ; extra == 'jupyterlab-git'
Requires-Dist: fps-jupyterlab-lsp>=0.2.0,<0.3.0 ; extra == 'jupyterlab-lsp'
Requires-Dist: fps-kernel-web-worker>=0.2.0,<0.3.0 ; extra == 'kernel-web-worker'
Requires-Dist: fps-noauth>=0.10.0,<0.11.0 ; extra == 'noauth'
Requires-Dist: fps-notebook>=0.10.2,<0.11.0 ; extra == 'notebook'
Requires-Dist: fps-resource-usage>=0.10.0,<0.11.0 ; extra == 'resource-usage'
Requires-Dist: fps-webdav>=0.10.0,<0.11.0 ; extra == 'webdav'
Requires-Python: >=3.10
Project-URL: Homepage, https://jupyter.org
Provides-Extra: auth
Provides-Extra: auth-fief
Provides-Extra: auth-jupyterhub
Provides-Extra: collaboration
Provides-Extra: file-watcher-poll
Provides-Extra: jupyterlab
Provides-Extra: jupyterlab-git
Provides-Extra: jupyterlab-lsp
Provides-Extra: kernel-web-worker
Provides-Extra: noauth
Provides-Extra: notebook
Provides-Extra: resource-usage
Provides-Extra: webdav
Description-Content-Type: text/markdown

[![Build Status](https://github.com/jupyter-server/jupyverse/workflows/test/badge.svg)](https://github.com/jupyter-server/jupyverse/actions)

# Jupyverse

A set of [FPS](https://github.com/jupyter-server/fps) modules implementing a Jupyter server.

Try it online:
- JupyterLab frontend: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-jupyterlab)
- Jupyter Notebook frontend: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-notebook)

Documentation is available [here](https://jupyter-server.github.io/jupyverse).

## Install

### From PyPI

Jupyverse can be installed with `pip`, for instance the following:

```bash
pip install "jupyverse[jupyterlab,auth]"
```

will install jupyverse with the JupyterLab frontend and the [auth](https://github.com/jupyter-server/jupyverse/tree/main/plugins/auth) plugin.

### From conda-forge

Jupyverse can be installed with `micromamba`:

```bash
micromamba create -n jupyverse
micromamba activate jupyverse
micromamba install jupyverse fps-jupyterlab fps-auth
```

### Development install

Clone or fork this repository:

```bash
git clone https://github.com/jupyter-server/jupyverse.git
cd jupyverse
```

Then either use `uv` or `pip` to install in development mode.

#### Using `uv`

Install all plugins in editable mode:

```bash
uv venv
for dir in ./api/*; do dirname=$(basename "$dir"); uv pip install -e "jupyverse-$dirname @ ./api/$dirname"; done
for dir in ./plugins/*; do dirname=$(basename "$dir"); uv pip install -e "fps-$dirname @ ./plugins/$dirname"; done
uv pip install --group test -e .
```

Run tests with:

```bash
uv run pytest -v
```

For testing, all the plugins are installed in the same environment. Jupyverse will automatically start all plugins
registered in the `jupyverse.modules` entry point. Some of them should be disabled, for instance there should be only
one authentication plugin:

```bash
uv run jupyverse \
    --disable auth_fief \
    --disable auth_jupyterhub \
    --disable noauth \
    --disable file_watcher_poll \
    --disable notebook
```

#### Using `pip`

Using `pip` sometimes gives more control, for instance if you want to install third-party libraries
in development mode too. It is recommended to create a virtual environment before running the
following commands:

```bash
for dir in ./api/*; do dirname=$(basename "$dir"); pip install -e "jupyverse-$dirname @ ./api/$dirname"; done
for dir in ./plugins/*; do dirname=$(basename "$dir"); pip install -e "fps-$dirname @ ./plugins/$dirname"; done
pip install --group test -e .
```

Run tests with:

```bash
pytest -v
```

Run jupyverse with:

```bash
jupyverse \
    --disable auth_fief \
    --disable auth_jupyterhub \
    --disable noauth \
    --disable file_watcher_poll \
    --disable notebook
```
