kubeflow-jupyter-web-app

The web-based UI for spawning, managing, and monitoring Jupyter Notebook servers inside a Kubeflow cluster.

kubeflow/kubeflow, kubeflow-notebook-controller, kubeflow-volumes-web-app, jupyter/base-notebook

What is kubeflow-jupyter-web-app?

The kubeflow-jupyter-web-app image runs the Jupyter Web App, a Python/Angular frontend that serves as the notebook spawner UI within a Kubeflow installation. It is not a notebook server itself — it is the control plane interface that lets users select a container image, configure resources (CPU, memory, GPU), attach PVCs, and create or delete Notebook custom resources in the cluster.

When a user submits the form, the web app creates a Notebook CRD that the notebook-controller then reconciles into a StatefulSet running the chosen IDE container — JupyterLab, RStudio, or VS Code. The web app serves on port 5000 via Gunicorn and is typically exposed through Istio as part of the Kubeflow dashboard.

It is relevant to ML platform teams deploying Kubeflow for data scientists, and to administrators who need to control which notebook images and resource profiles are available to users.

How to use this image

The kubeflow-jupyter-web-app is deployed as part of the Kubeflow manifests and is not typically run in isolation. The standard installation path is via Kustomize, using the official Kubeflow manifests repository.

Deploy using Kustomize:

git clone https://github.com/kubeflow/manifests.git
cd manifests
kustomize build applications/jupyter/jupyter-web-app/upstream/base | kubectl apply -f -
To swap in a custom or patched image, create a kustomization.yaml that overrides the upstream image reference:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - https://github.com/kubeflow/manifests/tree/master/applications/jupyter/jupyter-web-app/upstream/base
images:
  - name: ghcr.io/kubeflow/kubeflow/jupyter-web-app
    newName: registry.echo.ai/kubeflow/jupyter-web-app
    newTag: latest
namespace: kubeflow

After applying, the web app pod starts in the kubeflow namespace and is accessible via the Kubeflow central dashboard. Available notebook images and resource profiles are configured through a ConfigMap (jupyter-web-app-config), which controls what users see in the spawner form. Logs are written to stdout and are accessible via standard Kubernetes logging.

Image variants

Published under ghcr.io/kubeflow/kubeflow/jupyter-web-app, the image is versioned in lockstep with Kubeflow releases:

  • jupyter-web-app:<version> — Version-pinned tags aligned with Kubeflow releases (e.g., v1.9.0). Recommended for production deployments to ensure compatibility with the notebook-controller and other Kubeflow components running the same version.
  • jupyter-web-app:latest — Tracks the latest release; useful for development and evaluation but not recommended for production.

The web app image should always be deployed alongside a matching kubeflow-notebook-controller version, as the two components share the Notebook CRD schema. Mismatching versions between the web app and controller can result in notebook creation failures or missing fields in the spawner UI.

Interested in base images that start and stay clean?