# Jupyterlab server extension on JupyterHub

**URL:** <https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531>\
**Category:** JupyterHub\
**Tags:** jupyterlab, jupyterhub, help-wanted\
**Created:** [November 3, 2021, 4:36pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531 "2021-11-03T16:36:08Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![eshwarne](https://avatars.discourse-cdn.com/v4/letter/e/f6c823/32.png) [@eshwarne](https://discourse.jupyter.org/u/eshwarne)\
**Post date:** [November 3, 2021, 4:36pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/1 "2021-11-03T16:36:09Z")

</div>

Hey all!  
I developed a jupyterlab extension which includes front end and server extension.  
I tried to deploy this on Jupyterhub.  
I ran  
Jlpm run build  
Jupyter labextension install .

However, im able to see only the UI element and the server api results in 404 not found. If I run jupyter server extension list, it shows the extension and enabled.

What am I missing here?  
What is the best way to install a jupyterlab server extension on jupyterhub?

---

<div class="post-metadata">

**Author:** ![manics](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/manics/32/85_2.png) [@manics](https://discourse.jupyter.org/u/manics)\
**Post date:** [November 3, 2021, 6:06pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/2 "2021-11-03T18:06:14Z")

</div>

In general JupyterHub spawns a singleuser-server (JupyterLab), but after that it’s up to the application how it behaves. Configuration is usually in the singleuser-server’s environment rather than JupyterHub’s. For example, if you’re using DockerSpawner JupyterLab is configured inside the Docker singleuser image, there’s nothing to be done on the JupyterHub side.

---

<div class="post-metadata">

**Author:** ![eshwarne](https://avatars.discourse-cdn.com/v4/letter/e/f6c823/32.png) [@eshwarne](https://discourse.jupyter.org/u/eshwarne)\
**Post date:** [November 3, 2021, 6:23pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/3 "2021-11-03T18:23:27Z")

</div>

Thanks for the information.  
I have an environment where 100+ users use the Hub.  
How do I install a server extension for every user globally ? Is there any way to achieve this?

---

<div class="post-metadata">

**Author:** ![krassowski](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/krassowski/32/1685_2.png) [@krassowski](https://discourse.jupyter.org/u/krassowski)\
**Post date:** [November 4, 2021, 6:09pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/4 "2021-11-04T18:09:21Z")

</div>

What does `jupyter serverextension list` show (please note no space), as in contrast to `jupyter server extension list` (with space)?

---

<div class="post-metadata">

**Author:** ![eshwarne](https://avatars.discourse-cdn.com/v4/letter/e/f6c823/32.png) [@eshwarne](https://discourse.jupyter.org/u/eshwarne)\
**Post date:** [November 5, 2021, 11:33am UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/5 "2021-11-05T11:33:57Z")

</div>

ah! jupyter serverextension list without the space does not list the extension, whereas with the space lists the extension!

how are these two different? and in the git repo with examples it includes the space to install. Am I missing something?

And, thanks for enlightening me that both are different commands

---

<div class="post-metadata">

**Author:** ![krassowski](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/krassowski/32/1685_2.png) [@krassowski](https://discourse.jupyter.org/u/krassowski)\
**Post date:** [November 5, 2021, 9:41pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/6 "2021-11-05T21:41:50Z")

</div>

Long story short: `jupyter serverextension list` (no space) shows extensions enabled for the old `notebook` server, while `jupyter server extension` (with space) shows extensions enabled for the new `jupyter-server`. The extension may not load on your JupyterHub because - depending on version and configuration - it may use the old `notebook` server rather than the new `jupyter-server`.

If you are the developer of the extension you can make it backward compatible by adding the notebook extension config as in [Add backward compatibility hook for notebook server by fcollonval · Pull Request #155 · jupyterlab/extension-cookiecutter-ts · GitHub](https://github.com/jupyterlab/extension-cookiecutter-ts/pull/155) or [Add config for the classic notebook server extension by jtpio · Pull Request #504 · jupyter-lsp/jupyterlab-lsp · GitHub](https://github.com/jupyter-lsp/jupyterlab-lsp/pull/504).

If this is a third-party extension and the author does not intend to support the old notebook server the way forward may be to configure JupyterHub to use the new `jupyter-server`. Please see [JupyterLab 3.0 extensions with backend server extension do not start-up · Issue #3340 · jupyterhub/jupyterhub · GitHub](https://github.com/jupyterhub/jupyterhub/issues/3340) for some hints if you are using JupyterHub \< 2.0; [according to the docs](https://jupyterhub.readthedocs.io/en/latest/reference/config-user-env.html?highlight=Switching#switching-back-to-classic-notebook) JupyterHub ≥ 2.0 should use `jupyter-server` by default (but I think it is still in release candidate as for today - see the other post in `jupyterhub` category if you wish to help testing it).

For an overview of differences and motivation for the migration to the new server see: [What is the difference between `jupyter notebook` and `jupyter server`? - Stack Overflow](https://stackoverflow.com/a/67804732/6646912)

---

<div class="post-metadata">

**Author:** ![eshwarne](https://avatars.discourse-cdn.com/v4/letter/e/f6c823/32.png) [@eshwarne](https://discourse.jupyter.org/u/eshwarne)\
**Post date:** [November 8, 2021, 7:51pm UTC](https://discourse.jupyter.org/t/jupyterlab-server-extension-on-jupyterhub/11531/7 "2021-11-08T19:51:42Z")

</div>

This was really very helpful! You are a superhero! Thanks!
