What component serves Jupyterlab / notebook to an authentificated user and where is that code?


I’m trying to understand the general architecture of JupyterHub and how it’s various components
interact. I’m having trouble understanding the exact responsibilities of JupyterHub single-user server.
The documentation singleuser.md states that :
" jupyterhub-singleuser , launches jupyter-server , the same program used when you run jupyter lab on your laptop"
Except that when running just jupyter-server on my laptop and going to the url provided in the console, there is no front-end, just a simple page that says a server is indeed running. We still need a jupyterlab / jupyter notebook front end, that JupyterHub does provide once a user connects. So necessarily, jupyterhub-singleuser must at some point run an instance of jupyterlab / jupyter notebook. I’m just having trouble understanding where this happens, in the source code of the hub it’s unclear exactly what’s really happening.

My question then is just : who is in charge of serving the frontend to an authentificated user
and where is that code ?

Many Thanks,


Currently the default is to launch JupyterLab (which sits on top of Jupyter Server)

but it’s best to be explicit by setting the JUPYTERHUB_SINGLEUSER_APP environment variable.

JupyterHub is intentionally decoupled from the singleuser server, so for example you can implement your own from scratch, an example is


Thank you for your reply, it’s clearer now !

1 Like