jupyterhub 5.4.4


pip install jupyterhub

  Latest version

Released: Mar 26, 2026


Meta
Author: Jupyter Development Team
Requires Python: >=3.8

Classifiers

Development Status
  • 5 - Production/Stable

Intended Audience
  • Developers
  • System Administrators
  • Science/Research

License
  • OSI Approved :: BSD License

Programming Language
  • Python
  • Python :: 3

Operating System
  • POSIX

Framework
  • Jupyter

Technical Overview | Installation | Configuration | Docker | Contributing | License | Help and Resources


JupyterHub

Latest PyPI version Latest conda-forge version Documentation build status GitHub Workflow Status - Test Test coverage of code GitHub Discourse Gitter

With JupyterHub you can create a multi-user Hub that spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server.

Project Jupyter created JupyterHub to support many users. The Hub can offer notebook servers to a class of students, a corporate data science workgroup, a scientific research project, or a high-performance computing group.

Technical overview

Three main actors make up JupyterHub:

  • multi-user Hub (tornado process)
  • configurable http proxy (node-http-proxy)
  • multiple single-user Jupyter notebook servers (Python/Jupyter/tornado)

Basic principles for operation are:

  • Hub launches a proxy.
  • The Proxy forwards all requests to Hub by default.
  • Hub handles login and spawns single-user servers on demand.
  • Hub configures proxy to forward URL prefixes to the single-user notebook servers.

JupyterHub also provides a REST API for administration of the Hub and its users.

Installation

Check prerequisites

  • A Linux/Unix based system

  • Python 3.8 or greater

  • nodejs/npm

    • If you are using conda, the nodejs and npm dependencies will be installed for you by conda.

    • If you are using pip, install a recent version (at least 12.0) of nodejs/npm.

  • If using the default PAM Authenticator, a pluggable authentication module (PAM).

  • TLS certificate and key for HTTPS communication

  • Domain name

Install packages

Using conda

To install JupyterHub along with its dependencies including nodejs/npm:

conda install -c conda-forge jupyterhub

If you plan to run notebook servers locally, install JupyterLab or Jupyter notebook:

conda install jupyterlab
conda install notebook

Using pip

JupyterHub can be installed with pip, and the proxy with npm:

npm install -g configurable-http-proxy
python3 -m pip install jupyterhub

If you plan to run notebook servers locally, you will need to install JupyterLab or Jupyter notebook:

python3 -m pip install --upgrade jupyterlab
python3 -m pip install --upgrade notebook

Run the Hub server

To start the Hub server, run the command:

jupyterhub

Visit http://localhost:8000 in your browser, and sign in with your system username and password.

Note: To allow multiple users to sign in to the server, you will need to run the jupyterhub command as a privileged user, such as root. The documentation describes how to run the server as a less privileged user, which requires more configuration of the system.

Configuration

The Getting Started section of the documentation explains the common steps in setting up JupyterHub.

The JupyterHub tutorial provides an in-depth video and sample configurations of JupyterHub.

Create a configuration file

To generate a default config file with settings and descriptions:

jupyterhub --generate-config

Start the Hub

To start the Hub on a specific url and port 10.0.1.2:443 with https:

jupyterhub --ip 10.0.1.2 --port 443 --ssl-key my_ssl.key --ssl-cert my_ssl.cert

Authenticators

Authenticator Description
PAMAuthenticator Default, built-in authenticator
OAuthenticator OAuth + JupyterHub Authenticator = OAuthenticator
ldapauthenticator Simple LDAP Authenticator Plugin for JupyterHub
kerberosauthenticator Kerberos Authenticator Plugin for JupyterHub

Spawners

Spawner Description
LocalProcessSpawner Default, built-in spawner starts single-user servers as local processes
dockerspawner Spawn single-user servers in Docker containers
kubespawner Kubernetes spawner for JupyterHub
sudospawner Spawn single-user servers without being root
systemdspawner Spawn single-user notebook servers using systemd
batchspawner Designed for clusters using batch scheduling software
yarnspawner Spawn single-user notebook servers distributed on a Hadoop cluster
wrapspawner WrapSpawner and ProfilesSpawner enabling runtime configuration of spawners

Docker

A starter docker image for JupyterHub gives a baseline deployment of JupyterHub using Docker.

Important: This quay.io/jupyterhub/jupyterhub image contains only the Hub itself, with no configuration. In general, one needs to make a derivative image, with at least a jupyterhub_config.py setting up an Authenticator and/or a Spawner. To run the single-user servers, which may be on the same system as the Hub or not, Jupyter Notebook version 4 or greater must be installed.

The JupyterHub docker image can be started with the following command:

docker run -p 8000:8000 -d --name jupyterhub quay.io/jupyterhub/jupyterhub jupyterhub

This command will create a container named jupyterhub that you can stop and resume with docker stop/start.

The Hub service will be listening on all interfaces at port 8000, which makes this a good choice for testing JupyterHub on your desktop or laptop.

If you want to run docker on a computer that has a public IP then you should (as in MUST) secure it with ssl by adding ssl options to your docker configuration or by using an ssl enabled proxy.

Mounting volumes will allow you to store data outside the docker image (host system) so it will be persistent, even when you start a new image.

The command docker exec -it jupyterhub bash will spawn a root shell in your docker container. You can use the root shell to create system users in the container. These accounts will be used for authentication in JupyterHub's default configuration.

Contributing

If you would like to contribute to the project, please read our contributor documentation and the CONTRIBUTING.md. The CONTRIBUTING.md file explains how to set up a development installation, how to run the test suite, and how to contribute to documentation.

For a high-level view of the vision and next directions of the project, see the JupyterHub community roadmap.

A note about platform support

JupyterHub is supported on Linux/Unix based systems.

JupyterHub officially does not support Windows. You may be able to use JupyterHub on Windows if you use a Spawner and Authenticator that work on Windows, but the JupyterHub defaults will not. Bugs reported on Windows will not be accepted, and the test suite will not run on Windows. Small patches that fix minor Windows compatibility issues (such as basic installation) may be accepted, however. For Windows-based systems, we would recommend running JupyterHub in a docker container or Linux VM.

Additional Reference: Tornado's documentation on Windows platform support

License

We use 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.

Help and resources

We encourage you to ask questions and share ideas on the Jupyter community forum. You can also talk with us on our JupyterHub Gitter channel.

JupyterHub follows the Jupyter Community Guides.


Technical Overview | Installation | Configuration | Docker | Contributing | License | Help and Resources

5.4.4 Mar 26, 2026
5.4.3 Dec 12, 2025
5.4.2 Oct 24, 2025
5.4.1 Oct 17, 2025
5.4.0 Oct 06, 2025
5.3.0 Apr 15, 2025
5.3.0rc0 Apr 07, 2025
5.2.1 Oct 21, 2024
5.2.0 Oct 01, 2024
5.1.0 Jul 31, 2024
5.0.0 May 24, 2024
5.0.0b2 May 09, 2024
5.0.0b1 Apr 22, 2024
4.1.6 Jul 31, 2024
4.1.5 Apr 04, 2024
4.1.4 Mar 30, 2024
4.1.3 Mar 26, 2024
4.1.2 Mar 25, 2024
4.1.1 Mar 23, 2024
4.1.0 Mar 20, 2024
4.0.2 Aug 10, 2023
4.0.1 Jun 08, 2023
4.0.0 Apr 20, 2023
4.0.0b2 Mar 15, 2023
4.0.0b1 Mar 01, 2023
3.1.1 Jan 27, 2023
3.1.0 Dec 05, 2022
3.0.0 Sep 09, 2022
3.0.0b1 Aug 02, 2022
2.3.1 Jun 06, 2022
2.3.0 May 06, 2022
2.2.2 Mar 14, 2022
2.2.1 Mar 11, 2022
2.2.0 Mar 07, 2022
2.1.1 Jan 25, 2022
2.1.0 Jan 21, 2022
2.0.2 Jan 10, 2022
2.0.1 Dec 22, 2021
2.0.0 Dec 01, 2021
2.0.0rc5 Nov 26, 2021
2.0.0rc4 Nov 18, 2021
2.0.0rc3 Nov 04, 2021
2.0.0rc2 Oct 30, 2021
2.0.0rc1 Oct 30, 2021
2.0.0b3 Oct 14, 2021
2.0.0b2 Sep 29, 2021
2.0.0b1 Sep 17, 2021
1.5.1 Dec 05, 2022
1.5.0 Nov 04, 2021
1.4.2 Jul 16, 2021
1.4.1 May 12, 2021
1.4.0 Apr 19, 2021
1.3.0 Dec 11, 2020
1.2.2 Nov 27, 2020
1.2.1 Oct 30, 2020
1.2.0 Oct 29, 2020
1.2.0b1 Oct 16, 2020
1.1.0 Jan 17, 2020
1.1.0b1 Dec 26, 2019
1.0.0 May 03, 2019
1.0.0b2 Apr 09, 2019
1.0.0b1 Mar 27, 2019
0.9.6 Apr 01, 2019
0.9.5 Mar 28, 2019
0.9.4 Sep 24, 2018
0.9.3 Sep 12, 2018
0.9.2 Aug 11, 2018
0.9.1 Jul 04, 2018
0.9.0 Jun 15, 2018
0.9.0rc1 Jun 12, 2018
0.9.0b3 May 23, 2018
0.9.0b2 May 15, 2018
0.9.0b1 May 07, 2018
0.8.1 Nov 07, 2017
0.8.0 Oct 03, 2017
0.8.0rc2 Sep 25, 2017
0.8.0rc1 Sep 19, 2017
0.8.0b5 Sep 08, 2017
0.8.0b4 Aug 31, 2017
0.8.0b3 Aug 26, 2017
0.8.0b2 Aug 20, 2017
0.8.0b1 Aug 15, 2017
0.7.2 Jan 10, 2017
0.7.1 Jan 02, 2017
0.7.0 Dec 02, 2016
0.7.0b1 Nov 13, 2016
0.6.1 May 04, 2016
0.6.0 Apr 25, 2016
0.5.0 Mar 08, 2016
0.4.1 Feb 03, 2016
0.4.0 Feb 01, 2016
0.3.0 Nov 04, 2015
0.2.0 Jul 12, 2015
0.1.0 Mar 08, 2015

Wheel compatibility matrix

Platform Python 3
any

Files in release