New 'Dashboard Publishing' extension for JupyterHub

Data scientists using JupyterHub to build dashboards or visualisations for non-technical decision makers may be interested in my new ‘Dashboards’ project.

This extends JupyterHub so a Notebook server can be cloned into a user-friendly Voila dashboard version which can be immediately and securely viewed by other authenticated users.

How it works, in screenshots:

Having built my notebook on my JupyterHub server, click on the new Dashboards menu in JupyterHub to create a Dashboard. Pick the Jupyter server I’ve been working on as the ‘source server’:

In the Dashboards screen I can see a list of my own dashboards. I can also see other JupyterHub users’ dashboards, and they can see all of mine too:

If they click on my new dashboard, they can authenticate into the dashboard:

The dashboard is really just a new server running Voila instead of Jupyter Notebook. So it is user-friendly and safe since the user can’t run any arbitrary code:

You can find out more and try it out from GitHub: ContainDS Dashboards.

Basic requirements:

  • JupyterHub 1.0+
  • DockerSpawner 0.11.0+
  • Python 3.6+

The Docker image used in your JupyterHub has some required packages to be installed (Voila and jhsingle-native-proxy) - I have published Docker Hub examples.

In principle, this framework can be used to present non-Jupyter sources (e.g. Streamlit, Dash, Flask from a Git repo), leveraging JupyterHub’s security and hosting framework.

I would also like to support configurations other than just DockerSpawner, e.g. Kubernetes and maybe even LocalSpawners could work.

I would really appreciate any feedback from anyone interested in trying it out (and I’m very happy to help with installation and deployment planning for free:


This is really cool! Thank you for sharing!

1 Like

Thanks for your encouragement! :slight_smile:

This is great! Its a missing piece in the emerging Voila ecosystem.

I wonder what is needed to run it with Systemd-Spawner, I guess that is not a simple task?

Great to hear you like this idea!

It would need a separate version of the ‘cloning’ mechanism to work with SystemdSpawner (similarly for LocalProcessSpawner etc), compared to the one existing component that works with DockerSpawner.

That’s designed in a way that’s supposed to be interchangeable, just like the Spawner component is in JupyterHub.

It would be really useful to understand more about your use case and configuration.

I’ve written up about using ContainDS Dashboards on JupyterHub (The Littlest JupyterHub, in particular):

1 Like

ContainDS Dashboards now works with SystemdSpawner and LocalProcessSpawner.

This means if a user has a Jupyter notebook on their home folder area in JupyterHub, they can convert it instantly into a separate user-friendly (Voila) server to share with any other users in the JupyterHub as a dashboard.

@Jan It would be great if you get a chance to try it out - please get in touch to let me know!

Dashboards can now be deployed on Kubernetes JupyterHubs (Zero To JupyterHub).

This means a user can create Jupyter notebooks (or Streamlit / Plotly Dash scripts) on their usual Jupyter server, then instantly convert them into a new user-friendly server to share with non-technical colleagues. Jupyter notebooks are displayed using Voila.

It depends on your configuration to some extent, so please get in touch to talk through your setup.

More installation details are here.