Summary of changes in JupyterHub

See git log for a more detailed summary.



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


  • 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


  • 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.



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


  • 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.


  • 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


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


First preview release