diff --git a/Dockerfile b/Dockerfile
index e4822d25f47bed10510ab0907c994e5f4de4a64d..afc0e87b18817744ba1504a5ba4d542d559043e4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -21,7 +21,7 @@
 # https://docs.docker.com/engine/reference/builder/
 
 FROM node:20 AS base_node
-FROM python:3.11-slim AS base_python
+FROM python:3.12-slim AS base_python
 # Keeps Python from buffering stdout and stderr to avoid situations where
 # the application crashes without emitting any logs due to buffering.
 ENV PYTHONUNBUFFERED 1
@@ -213,7 +213,7 @@ COPY --chown=nomad:1000 scripts/run-worker.sh .
 COPY --chown=nomad:1000 nomad/jupyterhub_config.py ./nomad/jupyterhub_config.py
 
 COPY --chown=nomad:1000 --from=dev_package /app/examples/data/uploads /app/examples/data/uploads
-COPY --chown=nomad:1000 --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
+COPY --chown=nomad:1000 --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
 COPY --chown=nomad:1000 --from=builder /usr/local/share/jupyterhub /usr/local/share/jupyterhub
 COPY --chown=nomad:1000 --from=builder /usr/local/share/jupyter /usr/local/share/jupyter
 COPY --chown=nomad:1000 --from=builder /usr/local/bin/nomad /usr/local/bin/nomad
@@ -221,7 +221,7 @@ COPY --chown=nomad:1000 --from=builder /usr/local/bin/jupyter* /usr/local/bin/
 
 RUN mkdir -p /app/.volumes/fs \
  && chown -R nomad:1000 /app \
- && chown -R nomad:1000 /usr/local/lib/python3.11/site-packages/nomad
+ && chown -R nomad:1000 /usr/local/lib/python3.12/site-packages/nomad
 
 USER nomad
 
diff --git a/docs/howto/develop/setup.md b/docs/howto/develop/setup.md
index cfe002d438e905230614ad6dc8ec35cee7539145..627a13555ca0e59f2de009a8a3b3eaa4e30f49b5 100644
--- a/docs/howto/develop/setup.md
+++ b/docs/howto/develop/setup.md
@@ -50,21 +50,21 @@ This branch can be pushed to the repo, and then later may be merged to the relev
 
 ### Set up a Python environment
 
-The NOMAD code currently requires Python 3.11. You should work in a Python virtual environment.
+The NOMAD code currently requires Python 3.12. You should work in a Python virtual environment.
 
 For developers using VSCode, in case you encounter any issues with breakpoints not [triggering](https://github.com/microsoft/debugpy/issues/1284), consider upgrading to py3.12.
 
 #### Pyenv
 
 If your host machine has an older version installed,
-you can use [pyenv](https://github.com/pyenv/pyenv){:target="_blank"} to use Python 3.11 in parallel with your
+you can use [pyenv](https://github.com/pyenv/pyenv){:target="_blank"} to use Python 3.12 in parallel with your
 system's Python.
 
 #### Virtualenv
 
 Create a virtual environment. It allows you
 to keep NOMAD and its dependencies separate from your system's Python installation.
-Make sure that the virtual environment is based on Python 3.11.
+Make sure that the virtual environment is based on Python 3.12.
 Use either the built-in `venv` module (see example) or [virtualenv](https://pypi.org/project/virtualenv/){:target="_blank"}.
 
 ```shell
@@ -78,7 +78,7 @@ If you are a conda user, there is an equivalent, but you have to install `pip` a
 right Python version while creating the environment.
 
 ```shell
-conda create --name nomad_env pip python=3.11
+conda create --name nomad_env pip python=3.12
 conda activate nomad_env
 ```
 
diff --git a/docs/tutorial/develop_plugin.md b/docs/tutorial/develop_plugin.md
index d5f285406e6d7f36634480d2045ff64d72199dfc..ad855f8a7f800d9b2a0ca3c3b57b5bafb9fb02f7 100644
--- a/docs/tutorial/develop_plugin.md
+++ b/docs/tutorial/develop_plugin.md
@@ -169,10 +169,10 @@ and the "Allow GitHub Actions to create and approve pull requests" options and c
 ## Setting up the python environment
 
 ### Creating a virtual environment
-Before we can start developing we recommend to create a virtual environment using Python 3.11
+Before we can start developing we recommend to create a virtual environment using Python 3.12
 
 ```sh
-python3.11 -m venv .pyenv
+python3.12 -m venv .pyenv
 source .pyenv/bin/activate
 ```
 
diff --git a/pyproject.toml b/pyproject.toml
index b51c8aacf622457bdca8aa2baddcf2e00b806c11..a59c6cf365826f1a74963e2ff58bd1af8d3c1263 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -75,7 +75,7 @@ infrastructure = [
     'celery>=5.0',
     'dockerspawner==13.0.0',
     'elasticsearch>=7.0,<8',
-    'fastapi<0.100', # later versions pending pydantic v2 upgrade
+    'fastapi<0.100',              # later versions pending pydantic v2 upgrade
     'filelock==3.3.1',
     'gitpython>=3.0',
     'gunicorn>=21.2.0,<22.0.0',
@@ -117,7 +117,7 @@ dev = [
     'mkdocs-material>=9.0',
     'mkdocs-redirects>=1.0',
     'mkdocs>=1.0',
-    'mypy==1.0.1', # bug: incompatible with derived models of pydantic v1
+    'mypy==1.0.1',                                    # bug: incompatible with derived models of pydantic v1
     'names==0.3.0',
     'uv>=0.2.35',
     'pytest-asyncio>=0.23',
@@ -130,6 +130,7 @@ dev = [
     'rope==0.21.0',
     'ruamel.yaml>=0.1',
     'ruff>=0.6',
+    'setuptools>=70',                                 # py3.12 doesn't bundle in setuptools, but this is required by mongomock lib
 ]
 
 
@@ -146,15 +147,15 @@ indent-width = 4
 
 [tool.ruff.lint]
 select = [
-    "E", # pycodestyle
-    "W", # pycodestyle
+    "E",  # pycodestyle
+    "W",  # pycodestyle
     "PL", # pylint
 ]
 ignore = [
-    "E501", # Line too long ({width} > {limit} characters)
-    "E701", # Multiple statements on one line (colon)
-    "E731", # Do not assign a lambda expression, use a def
-    "E402", # Module level import not at top of file
+    "E501",    # Line too long ({width} > {limit} characters)
+    "E701",    # Multiple statements on one line (colon)
+    "E731",    # Do not assign a lambda expression, use a def
+    "E402",    # Module level import not at top of file
     "PLR0911", # Too many return statements
     "PLR0912", # Too many branches
     "PLR0913", # Too many arguments in function definition
@@ -181,9 +182,7 @@ skip-magic-trailing-comma = false
 line-ending = "auto"
 
 [tool.setuptools.packages.find]
-where = [
-    ".",
-]
+where = ["."]
 exclude = ["tests*"]
 namespaces = false
 
@@ -198,4 +197,10 @@ disable_error_code = "import, annotation-unchecked"
 [tool.setuptools_scm]
 
 [tool.uv]
-index-url = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple"
+extra-index-url = [
+    "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple",
+]
+constraint-dependencies = [ # can be removed once pynxtools removes kikuchipy restriction
+    "hyperspy>=1.7.6",
+    "pillow<10.1",
+]
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 699212f89d12a391b147a8f7c64fed0a5630df18..4f00ebbde3c60cd8005407c0bc4820e25eeb3567 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -5,7 +5,7 @@ alabaster==1.0.0          # via sphinx, -r requirements.txt
 alembic==1.13.3           # via jupyterhub, -r requirements.txt
 amqp==5.2.0               # via kombu, -r requirements.txt
 aniso8601==9.0.1          # via -r requirements.txt, nomad-lab (pyproject.toml)
-anyio==4.6.2              # via httpx, starlette, watchfiles, -r requirements.txt
+anyio==4.6.2.post1        # via httpx, starlette, watchfiles, -r requirements.txt
 arrow==1.3.0              # via isoduration, -r requirements.txt
 ase==3.22.1               # via matid, -r requirements.txt, nomad-lab (pyproject.toml)
 asgiref==3.8.1            # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -19,7 +19,7 @@ bagit==1.8.1              # via -r requirements.txt, nomad-lab (pyproject.toml)
 basicauth==0.4.1          # via -r requirements.txt, nomad-lab (pyproject.toml)
 beautifulsoup4==4.12.3    # via -r requirements.txt, nomad-lab (pyproject.toml)
 billiard==4.2.1           # via celery, -r requirements.txt
-bitarray==2.9.3           # via -r requirements.txt, nomad-lab (pyproject.toml)
+bitarray==3.0.0           # via -r requirements.txt, nomad-lab (pyproject.toml)
 cachetools==5.5.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
 celery==5.4.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 certifi==2024.8.30        # via elasticsearch, httpcore, httpx, netcdf4, requests, -r requirements.txt
@@ -68,7 +68,7 @@ h5py==3.11.0              # via h5grove, -r requirements.txt, nomad-lab (pyproje
 hjson==3.1.0              # via mkdocs-macros-plugin, super-collections, -r requirements.txt, nomad-lab (pyproject.toml)
 html5lib==1.1             # via -r requirements.txt, nomad-lab (pyproject.toml)
 httpcore==1.0.6           # via httpx, -r requirements.txt
-httptools==0.6.1          # via uvicorn, -r requirements.txt
+httptools==0.6.4          # via uvicorn, -r requirements.txt
 httpx==0.27.2             # via python-keycloak, -r requirements.txt, nomad-lab (pyproject.toml)
 idna==3.10                # via anyio, email-validator, httpx, jsonschema, requests, -r requirements.txt
 imagesize==1.4.1          # via sphinx, -r requirements.txt
@@ -107,8 +107,8 @@ mkdocs-click==0.8.1       # via nomad-lab (pyproject.toml)
 mkdocs-get-deps==0.2.0    # via mkdocs
 mkdocs-git-revision-date-localized-plugin==1.2.9  # via nomad-lab (pyproject.toml)
 mkdocs-glightbox==0.4.0   # via nomad-lab (pyproject.toml)
-mkdocs-macros-plugin==1.3.5  # via nomad-lab (pyproject.toml)
-mkdocs-material==9.5.40   # via nomad-lab (pyproject.toml)
+mkdocs-macros-plugin==1.3.6  # via nomad-lab (pyproject.toml)
+mkdocs-material==9.5.41   # via nomad-lab (pyproject.toml)
 mkdocs-material-extensions==1.3.1  # via mkdocs-material, nomad-lab (pyproject.toml)
 mkdocs-redirects==1.2.1   # via nomad-lab (pyproject.toml)
 mongoengine==0.29.1       # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -137,14 +137,14 @@ pandas==2.2.3             # via nomad-openbis, panedr, pymatgen, xarray, -r requ
 panedr==0.8.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 parmed==4.2.2             # via -r requirements.txt, nomad-lab (pyproject.toml)
 pathspec==0.12.1          # via mkdocs, mkdocs-macros-plugin
-pillow==10.4.0            # via matplotlib, rdkit, -r requirements.txt
+pillow==10.0.1            # via matplotlib, rdkit, -c (workspace), -r requirements.txt
 pint==0.17                # via -r requirements.txt, nomad-lab (pyproject.toml)
 platformdirs==4.3.6       # via mkdocs-get-deps
 plotly==5.24.1            # via pymatgen, -r requirements.txt
 pluggy==1.5.0             # via pytest
 prometheus-client==0.21.0  # via jupyterhub, -r requirements.txt
 prompt-toolkit==3.0.48    # via click-repl, -r requirements.txt
-psutil==6.0.0 ; sys_platform == 'win32'  # via jupyterhub, -r requirements.txt
+psutil==6.1.0 ; sys_platform == 'win32'  # via jupyterhub, -r requirements.txt
 pyasn1==0.6.1             # via pyasn1-modules, rfc3161ng, -r requirements.txt
 pyasn1-modules==0.4.1     # via rfc3161ng, -r requirements.txt
 pybtex==0.24.0            # via pymatgen, -r requirements.txt
@@ -161,7 +161,7 @@ pyrsistent==0.20.0        # via jsonschema, -r requirements.txt
 pytest==7.4.4             # via pytest-asyncio, pytest-cov, pytest-split, pytest-timeout, pytest-xdist, nomad-lab (pyproject.toml)
 pytest-asyncio==0.23.8    # via nomad-lab (pyproject.toml)
 pytest-cov==5.0.0         # via nomad-lab (pyproject.toml)
-pytest-split==0.9.0       # via nomad-lab (pyproject.toml)
+pytest-split==0.10.0      # via nomad-lab (pyproject.toml)
 pytest-timeout==2.3.1     # via nomad-lab (pyproject.toml)
 pytest-xdist==3.6.1       # via nomad-lab (pyproject.toml)
 python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, ghp-import, jupyterhub, matplotlib, mkdocs-macros-plugin, nomad-openbis, pandas, rfc3161ng, -r requirements.txt
@@ -189,11 +189,12 @@ rfc3987==1.3.8            # via jsonschema, -r requirements.txt
 rope==0.21.0              # via nomad-lab (pyproject.toml)
 ruamel-yaml==0.18.6       # via jupyter-telemetry, oauthenticator, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml)
 ruamel-yaml-clib==0.2.8 ; python_full_version < '3.13' and platform_python_implementation == 'CPython'  # via ruamel-yaml, -r requirements.txt
-ruff==0.6.9               # via nomad-lab (pyproject.toml)
+ruff==0.7.0               # via nomad-lab (pyproject.toml)
 runstats==2.0.0           # via -r requirements.txt, nomad-lab (pyproject.toml)
 scikit-learn==1.5.2       # via matid, -r requirements.txt, nomad-lab (pyproject.toml)
 scipy==1.14.1             # via ase, pymatgen, scikit-learn, -r requirements.txt, nomad-lab (pyproject.toml)
 sentinels==1.0.0          # via mongomock, -r requirements.txt
+setuptools==75.2.0        # via nomad-lab (pyproject.toml)
 six==1.16.0               # via asttokens, basicauth, elasticsearch-dsl, html5lib, pybtex, python-dateutil, rdflib, rfc3339-validator, validators, -r requirements.txt
 smmap==5.0.1              # via gitdb, -r requirements.txt
 sniffio==1.3.1            # via anyio, httpx, -r requirements.txt
@@ -207,7 +208,7 @@ sphinxcontrib-htmlhelp==2.1.0  # via sphinx, -r requirements.txt
 sphinxcontrib-jsmath==1.0.1  # via sphinx, -r requirements.txt
 sphinxcontrib-qthelp==2.0.0  # via sphinx, -r requirements.txt
 sphinxcontrib-serializinghtml==2.0.0  # via sphinx, -r requirements.txt
-sqlalchemy==2.0.35        # via alembic, jupyterhub, -r requirements.txt
+sqlalchemy==2.0.36        # via alembic, jupyterhub, -r requirements.txt
 starlette==0.27.0         # via fastapi, -r requirements.txt
 structlog==24.4.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
 super-collections==0.5.3  # via mkdocs-macros-plugin
@@ -231,9 +232,9 @@ uncertainties==3.2.2      # via pymatgen, -r requirements.txt
 unidecode==1.3.2          # via -r requirements.txt, nomad-lab (pyproject.toml)
 uri-template==1.3.0       # via jsonschema, -r requirements.txt
 urllib3==1.26.20          # via docker, elasticsearch, nomad-openbis, requests, -r requirements.txt
-uv==0.4.20                # via nomad-lab (pyproject.toml)
-uvicorn==0.31.1           # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml)
-uvloop==0.20.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'  # via uvicorn, -r requirements.txt
+uv==0.4.24                # via nomad-lab (pyproject.toml)
+uvicorn==0.32.0           # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml)
+uvloop==0.21.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'  # via uvicorn, -r requirements.txt
 validators==0.18.2        # via -r requirements.txt, nomad-lab (pyproject.toml)
 vine==5.1.0               # via amqp, celery, kombu, -r requirements.txt
 watchdog==5.0.3           # via mkdocs
diff --git a/requirements-plugins.txt b/requirements-plugins.txt
index d1d13bc8af764b42b5e72ac1cf47786c77539368..c293423f002993ee5a8219558e02b8a4e41c55dc 100644
--- a/requirements-plugins.txt
+++ b/requirements-plugins.txt
@@ -1,7 +1,7 @@
 # This file was autogenerated by uv via the following command:
 #    uv pip compile --universal -p 3.11 --annotation-style=line --output-file=requirements-plugins.txt --unsafe-package nomad-lab -c requirements-dev.txt default_plugins.txt
 aniso8601==9.0.1          # via nomad-lab, -c requirements-dev.txt
-anyio==4.6.2              # via httpx, jupyter-server, -c requirements-dev.txt
+anyio==4.6.2.post1        # via httpx, jupyter-server, -c requirements-dev.txt
 anytree==2.12.1           # via pynxtools
 appnope==0.1.4 ; platform_system == 'Darwin'  # via ipykernel
 argon2-cffi==23.1.0       # via jupyter-server
@@ -17,7 +17,7 @@ async-property==0.2.2     # via python-keycloak, -c requirements-dev.txt
 attrs==24.2.0             # via jsonschema, -c requirements-dev.txt
 babel==2.16.0             # via jupyterlab-server, -c requirements-dev.txt
 beautifulsoup4==4.12.3    # via nbconvert, -c requirements-dev.txt
-bitarray==2.9.3           # via nomad-lab, -c requirements-dev.txt
+bitarray==3.0.0           # via nomad-lab, -c requirements-dev.txt
 bleach==6.1.0             # via nbconvert
 blinker==1.8.2            # via flask
 blosc2==2.7.1             # via tables
@@ -68,7 +68,7 @@ hdf5plugin==5.0.0         # via fabio
 hjson==3.1.0              # via nomad-lab, -c requirements-dev.txt
 httpcore==1.0.6           # via httpx, -c requirements-dev.txt
 httpx==0.27.2             # via jupyterlab, nomad-lab, python-keycloak, -c requirements-dev.txt
-hyperspy==1.7.5           # via kikuchipy, pyxem
+hyperspy==1.7.6           # via kikuchipy, pyxem, -c (workspace)
 idna==3.10                # via anyio, httpx, jsonschema, requests, -c requirements-dev.txt
 ifes-apt-tc-data-modeling==0.2.2  # via pynxtools-apm
 igor2==0.5.8              # via pynxtools-xps
@@ -176,7 +176,7 @@ partd==1.4.2              # via dask
 perovskite-solar-cell-database @ git+https://github.com/FAIRmat-NFDI/nomad-perovskite-solar-cells-database.git@f394d21abafeb659729af0c94e5f90949fce01c1  # via -r default_plugins.txt
 pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32'  # via ipython
 phonopy==2.11.0           # via asr, nomad-parser-plugins-workflow
-pillow==10.4.0            # via fabio, imageio, matplotlib, nionswift, rdkit, scikit-image, -c requirements-dev.txt
+pillow==10.0.1            # via fabio, hyperspy, imageio, matplotlib, nionswift, rdkit, scikit-image, -c requirements-dev.txt, -c (workspace)
 pint==0.17                # via fairmat-readers-xrd, hyperspy, nomad-lab, pynxtools-apm, pynxtools-em, pynxtools-xps, pynxtools-xrd, rosettasciio, -c requirements-dev.txt
 platformdirs==4.3.6       # via jupyter-core, pooch, xraydb, -c requirements-dev.txt
 plotly==5.24.1            # via asr, pymatgen, -c requirements-dev.txt
@@ -185,7 +185,8 @@ pooch==1.8.2              # via kikuchipy, orix
 prettytable==3.11.0       # via hyperspy
 prometheus-client==0.21.0  # via jupyter-server, -c requirements-dev.txt
 prompt-toolkit==3.0.48    # via ipython, jupyter-console, -c requirements-dev.txt
-psutil==6.0.0             # via diffsims, ipykernel, ipyparallel, pyxem, -c requirements-dev.txt
+psutil==6.0.0 ; sys_platform != 'win32'  # via diffsims, ipykernel, ipyparallel, pyxem, -c requirements-dev.txt
+psutil==6.1.0 ; sys_platform == 'win32'  # via diffsims, ipykernel, ipyparallel, pyxem, -c requirements-dev.txt
 ptyprocess==0.7.0 ; os_name != 'nt' or (sys_platform != 'emscripten' and sys_platform != 'win32')  # via pexpect, terminado
 pure-eval==0.2.3          # via stack-data
 py-cpuinfo==9.0.0         # via blosc2, tables
@@ -236,14 +237,14 @@ scikit-image==0.22.0      # via hyperspy, kikuchipy, pyxem
 scikit-learn==1.5.2       # via kikuchipy, matid, nomad-lab, pyxem, -c requirements-dev.txt
 scipy==1.14.1             # via ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, mdanalysis, niondata, nionswift, nomad-lab, nomad-parser-plugins-atomistic, nomad-schema-plugin-simulation-workflow, orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse, xraydb, -c requirements-dev.txt
 send2trash==1.8.3         # via jupyter-server
-setuptools==75.1.0        # via radioactivedecay
+setuptools==75.2.0        # via radioactivedecay, -c requirements-dev.txt
 silx==2.1.1               # via pyfai
 six==1.16.0               # via anytree, asttokens, bleach, elasticsearch-dsl, pybtex, python-dateutil, rfc3339-validator, -c requirements-dev.txt
 sniffio==1.3.1            # via anyio, httpx, -c requirements-dev.txt
 soupsieve==2.6            # via beautifulsoup4, -c requirements-dev.txt
 sparse==0.15.4            # via hyperspy
 spglib==2.5.0             # via asr, matid, phonopy, pymatgen, -c requirements-dev.txt
-sqlalchemy==2.0.35        # via xraydb, -c requirements-dev.txt
+sqlalchemy==2.0.36        # via xraydb, -c requirements-dev.txt
 stack-data==0.6.3         # via ipython
 sympy==1.13.3             # via findiff, hyperspy, pymatgen, radioactivedecay, -c requirements-dev.txt
 tables==3.10.1            # via ifes-apt-tc-data-modeling
diff --git a/requirements.txt b/requirements.txt
index 5d44e05d3df6f6f42e12f7eee6c5b0c7bd1ca54d..149cb4aa6e14aa5ad00c132f9bc3f76d8dfb5bed 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,7 +4,7 @@ alabaster==1.0.0          # via sphinx
 alembic==1.13.3           # via jupyterhub
 amqp==5.2.0               # via kombu
 aniso8601==9.0.1          # via nomad-lab (pyproject.toml)
-anyio==4.6.2              # via httpx, starlette, watchfiles
+anyio==4.6.2.post1        # via httpx, starlette, watchfiles
 arrow==1.3.0              # via isoduration
 ase==3.22.1               # via matid, nomad-lab (pyproject.toml)
 asgiref==3.8.1            # via nomad-lab (pyproject.toml)
@@ -16,7 +16,7 @@ bagit==1.8.1              # via nomad-lab (pyproject.toml)
 basicauth==0.4.1          # via nomad-lab (pyproject.toml)
 beautifulsoup4==4.12.3    # via nomad-lab (pyproject.toml)
 billiard==4.2.1           # via celery
-bitarray==2.9.3           # via nomad-lab (pyproject.toml)
+bitarray==3.0.0           # via nomad-lab (pyproject.toml)
 cachetools==5.5.0         # via nomad-lab (pyproject.toml)
 celery==5.4.0             # via nomad-lab (pyproject.toml)
 certifi==2024.8.30        # via elasticsearch, httpcore, httpx, netcdf4, requests
@@ -59,7 +59,7 @@ h5py==3.11.0              # via h5grove, nomad-lab (pyproject.toml)
 hjson==3.1.0              # via nomad-lab (pyproject.toml)
 html5lib==1.1             # via nomad-lab (pyproject.toml)
 httpcore==1.0.6           # via httpx
-httptools==0.6.1          # via uvicorn
+httptools==0.6.4          # via uvicorn
 httpx==0.27.2             # via python-keycloak, nomad-lab (pyproject.toml)
 idna==3.10                # via anyio, email-validator, httpx, jsonschema, requests
 imagesize==1.4.1          # via sphinx
@@ -111,12 +111,12 @@ pamela==1.2.0 ; sys_platform != 'win32'  # via jupyterhub
 pandas==2.2.3             # via nomad-openbis, panedr, pymatgen, xarray, nomad-lab (pyproject.toml)
 panedr==0.8.0             # via nomad-lab (pyproject.toml)
 parmed==4.2.2             # via nomad-lab (pyproject.toml)
-pillow==10.4.0            # via matplotlib, rdkit
+pillow==10.0.1            # via matplotlib, rdkit, -c (workspace)
 pint==0.17                # via nomad-lab (pyproject.toml)
 plotly==5.24.1            # via pymatgen
 prometheus-client==0.21.0  # via jupyterhub
 prompt-toolkit==3.0.48    # via click-repl
-psutil==6.0.0 ; sys_platform == 'win32'  # via jupyterhub
+psutil==6.1.0 ; sys_platform == 'win32'  # via jupyterhub
 pyasn1==0.6.1             # via pyasn1-modules, rfc3161ng
 pyasn1-modules==0.4.1     # via rfc3161ng
 pybtex==0.24.0            # via pymatgen
@@ -167,7 +167,7 @@ sphinxcontrib-htmlhelp==2.1.0  # via sphinx
 sphinxcontrib-jsmath==1.0.1  # via sphinx
 sphinxcontrib-qthelp==2.0.0  # via sphinx
 sphinxcontrib-serializinghtml==2.0.0  # via sphinx
-sqlalchemy==2.0.35        # via alembic, jupyterhub
+sqlalchemy==2.0.36        # via alembic, jupyterhub
 starlette==0.27.0         # via fastapi
 structlog==24.4.0         # via nomad-lab (pyproject.toml)
 sympy==1.13.3             # via pymatgen
@@ -188,8 +188,8 @@ uncertainties==3.2.2      # via pymatgen
 unidecode==1.3.2          # via nomad-lab (pyproject.toml)
 uri-template==1.3.0       # via jsonschema
 urllib3==1.26.20          # via docker, elasticsearch, nomad-openbis, requests
-uvicorn==0.31.1           # via h5grove, nomad-lab (pyproject.toml)
-uvloop==0.20.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'  # via uvicorn
+uvicorn==0.32.0           # via h5grove, nomad-lab (pyproject.toml)
+uvloop==0.21.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'  # via uvicorn
 validators==0.18.2        # via nomad-lab (pyproject.toml)
 vine==5.1.0               # via amqp, celery, kombu
 watchfiles==0.24.0        # via uvicorn