JupyterHub 1.0 was released last week as the first major update since 2015. JupyterHub allows multiple users to use Jupyter notebook. JupyterHub 1.0 comes with UI support for managing named servers, and TLS encryption and authentication support, among others.
What’s new in JupyterHub 1.0?
UI for named servers
JupyterHub 1.0 comes with full UI support for managing named servers. Named servers allow each Jupyterhub user to have access to more than one named server. JupyterHub 1.0 introduces a new UI for managing these servers. Users can now create/start/stop/delete their servers from the hub home page.
Source: Jupyter blog
TLS encryption and authentication
JupyterHub 1.0 supports TLS encryption and authentication of all internal communication. Spawners must implement .move_certs method to make certificates available to the notebook server if it is not local to the Hub. Currently, local spawners and DockerSpawner support internal ssl.
Checking and refreshing authentication
JupyterHub. 1.0 introduces three new configurations to refresh or expire authentication information.
- c.Authenticator.auth_refresh_age allows authentication to expire after a number of seconds.
- c.Authenticator.refresh_pre_spawn forces a refresh of authentication prior to spawning a server, effectively requiring a user to have up-to-date authentication when they start their server.
- Authenticator.refresh_auth defines what it means to refresh authentication and can be customized by Authenticator implementations.
- A new API is added in JupyterHub 1.0 for registering user activity. Activity is now tracked by pushing it to the Hub from user servers instead of polling the proxy API.
- Dynamic options_form callables may now return an empty string which will result in no options form being rendered.
- Spawner.user_options is persisted to the database to be re-used so that a server spawned once via the form can be re-spawned via the API with the same options.
- c.PAMAuthenticator.pam_normalize_username, option is added for round-tripping usernames through PAM to retrieve the normalized form.
- c.JupyterHub.named_server_limit_per_user configuration is added to limit the number of named servers each user can have. The default is 0, for no limit.
- API requests to HubAuthenticated services (e.g. single-user servers) may pass a token in the Authorization header, matching authentication with the Hub API itself.
- Authenticator.is_admin(handler, authentication) method and Authenticator.admin_groups configuration is added for automatically determining that a member of a group should be considered an admin.
These are just a select few updates. For the full list of new features and improvements in JupyterHub 1.0, visit the changelog.
You can upgrade jupyterhub with conda or pip:
conda install -c conda-forge jupyterhub==1.0.*
pip install –upgrade jupyterhub==1.0.*
Users were quite excited about the release. Here are some comments from a Hacker News thread.
“This is really cool and I’m impressed by the jupyter team. My favorite part is that it’s such a good product that beats the commercial products because it’s hard to figure out, I think, commercial models that support this wide range of collaborators (people who view once a month to people who author every day).”
“Congratulations! JupyterHub is a great project with high-quality code and docs. Looking forward to trying the named servers feature as I run a JupyterHub instance that spawns servers inside containers based on a single image which inevitably tends to grow as I add libraries. Being able to manage multiple servers should allow me to split the image into smaller specialized images.”