Change log summary

For detailed changes from the prior release, click on the version number, and its link will bring up a GitHub listing of changes. Use git log on the command line for details.


[0.7.2] - 2017-01-09


  • Support service environment variables and defaults in jupyterhub-singleuser for easier deployment of notebook servers as a Service.
  • Add --group parameter for deploying jupyterhub-singleuser as a Service with group authentication.
  • Include URL parameters when redirecting through /user-redirect/


  • Fix group authentication for HubAuthenticated services

0.7.1 - 2017-01-02


  • Spawner.will_resume for signaling that a single-user server is paused instead of stopped. This is needed for cases like DockerSpawner.remove_containers = False, where the first API token is re-used for subsequent spawns.
  • Warning on startup about single-character usernames, caused by common set('string') typo in config.


  • Removed spurious warning about empty next_url, which is AOK.

0.7.0 - 2016-12-2


  • Implement Services API #705
  • Add /api/ and /api/info endpoints #675
  • Add documentation for JupyterLab, pySpark configuration, troubleshooting, and more.
  • Add logging of error if adding users already in database. #689
  • Add HubAuth class for authenticating with JupyterHub. This class can be used by any application, even outside tornado.
  • Add user groups.
  • Add /hub/user-redirect/... URL for redirecting users to a file on their own server.


  • Always install with setuptools but not eggs (effectively require pip install .) #722
  • Updated formatting of changelog. #711
  • Single-user server is provided by JupyterHub package, so single-user servers depend on JupyterHub now.


  • Fix docker repository location #719
  • Fix swagger spec conformance and timestamp type in API spec
  • Various redirect-loop-causing bugs have been fixed.


  • Deprecate --no-ssl command line option. It has no meaning and warns if used. #789
  • Deprecate %U username substitution in favor of {username}. #748
  • Removed deprecated SwarmSpawner link. #699


0.6.1 - 2016-05-04

Bugfixes on 0.6:

  • statsd is an optional dependency, only needed if in use
  • Notice more quickly when servers have crashed
  • Better error pages for proxy errors
  • Add Stop All button to admin panel for stopping all servers at once

0.6.0 - 2016-04-25

  • JupyterHub has moved to a new jupyterhub namespace on GitHub and Docker. What was juptyer/jupyterhub is now jupyterhub/jupyterhub, etc.
  • jupyterhub/jupyterhub image on DockerHub no longer loads the in an ONBUILD step. A new jupyterhub/jupyterhub-onbuild image does this
  • Add statsd support, via c.JupyterHub.statsd_{host,port,prefix}
  • Update to traitlets 4.1 @default, @observe APIs for traits
  • Allow disabling PAM sessions via c.PAMAuthenticator.open_sessions = False. This may be needed on SELinux-enabled systems, where our PAM session logic often does not work properly
  • Add Spawner.environment configurable, for defining extra environment variables to load for single-user servers
  • JupyterHub API tokens can be pregenerated and loaded via JupyterHub.api_tokens, a dict of token: username.
  • JupyterHub API tokens can be requested via the REST API, with a POST request to /api/authorizations/token. This can only be used if the Authenticator has a username and password.
  • Various fixes for user URLs and redirects

0.5 - 2016-03-07

  • Single-user server must be run with Jupyter Notebook ≥ 4.0
  • Require --no-ssl confirmation to allow the Hub to be run without SSL (e.g. behind SSL termination in nginx)
  • Add lengths to text fields for MySQL support
  • Add Spawner.disable_user_config for preventing user-owned configuration from modifying single-user servers.
  • Fixes for MySQL support.
  • Add ability to run each user's server on its own subdomain. Requires wildcard DNS and wildcard SSL to be feasible. Enable subdomains by setting JupyterHub.subdomain_host = 'https://jupyterhub.domain.tld[:port]'.
  • Use for local communication instead of localhost, avoiding issues with DNS on some systems.
  • Fix race that could add users to proxy prematurely if spawning is slow.


0.4.1 - 2016-02-03

Fix removal of /login page in 0.4.0, breaking some OAuth providers.

0.4.0 - 2016-02-01

  • Add Spawner.user_options_form for specifying an HTML form to present to users, allowing users to influence the spawning of their own servers.
  • Add Authenticator.pre_spawn_start and Authenticator.post_spawn_stop hooks, so that Authenticators can do setup or teardown (e.g. passing credentials to Spawner, mounting data sources, etc.). These methods are typically used with custom Authenticator+Spawner pairs.
  • 0.4 will be the last JupyterHub release where single-user servers running IPython 3 is supported instead of Notebook ≥ 4.0.

0.3 - 2015-11-04

  • No longer make the user starting the Hub an admin
  • start PAM sessions on login
  • hooks for Authenticators to fire before spawners start and after they stop, allowing deeper interaction between Spawner/Authenticator pairs.
  • login redirect fixes

0.2 - 2015-07-12

  • Based on standalone traitlets instead of IPython.utils.traitlets
  • multiple users in admin panel
  • Fixes for usernames that require escaping

0.1 - 2015-03-07

First preview release