diff --git a/Dockerfile.emscripten b/Dockerfile.emscripten
index 8a9d9efccd955fe0f57de6cddd1d29798688f804..a5717f603b79c1bd544cfab8d494b18269b307a5 100644
--- a/Dockerfile.emscripten
+++ b/Dockerfile.emscripten
@@ -12,6 +12,7 @@ USER root
 
 RUN apt-get update && \
   DEBIAN_FRONTEND=noniteractive apt-get install -y \
+    apt-transport-https ca-certificates \
     git \
     jq \
     ninja-build \
@@ -22,7 +23,7 @@ RUN apt-get update && \
 
 FROM supplemented_emscripten_sdk AS supplemented_node_sdk
 
-ARG NODEJS_VERSION=v18.19.0
+ARG NODEJS_VERSION=v20.18.1
 ENV NODEJS_VERSION=${NODEJS_VERSION}
 
 USER emscripten
@@ -45,23 +46,23 @@ RUN source "${EMSDK}/emsdk_env.sh" && \
     nvm install "${NODEJS_VERSION}" && \
     nvm use "${NODEJS_VERSION}" && \
     corepack enable pnpm && \
-    corepack install -g pnpm@9.1.1 && \
+    corepack install -g pnpm@9.15.4 && \
     pnpm config set store-dir ${PNPM_HOME}/preinstalled-store --global && \
     pnpm config set global-dir ${PNPM_HOME}/preinstalled-store-g --global && \
     pnpm env use --global "${NODEJS_VERSION}" && \
     pnpm add -g \
-      playwright@~1.39.0 \
-      @playwright/test@~1.39.0 \
+      playwright@~1.49.1 \
+      @playwright/test@~1.49.1 \
       ts-proto@~1.158.0 \
-      tslib@~2.6.2 \
-      typescript@~5.2.2 \
-      rollup@~4.3.0 \
+      tslib@~2.8.1 \
+      typescript@~5.7.3 \
+      rollup@~4.22.0 \
       rollup/plugin-node-resolve@~15.2.3 \
       rollup/plugin-commonjs@~25.0.7 \
       rollup-plugin-typescript2@~0.36.0 \
-      types/node@~20.10.6 \
-      typedoc@~0.25.3 \
-      typedoc-plugin-markdown@~3.17.1 \
+      types/node@~22.10.6 \
+      typedoc@~0.27.6 \
+      typedoc-plugin-markdown@~4.4.1 \
       protobufjs@~7.2.5 && \
     pnpm dlx playwright install chromium && \
     git config --global advice.detachedHead false && \
diff --git a/docker-bake.hcl b/docker-bake.hcl
index f622c01499d03d67de51dfd2b073e0a97093d40d..af7f56cd201f4c09b152a6cc694d14a75d8f5e9b 100644
--- a/docker-bake.hcl
+++ b/docker-bake.hcl
@@ -1,7 +1,7 @@
 variable "CI_REGISTRY_IMAGE" {}
 variable "CI_COMMIT_SHA" {}
 variable "EMSCRIPTEN_VERSION" {
-  default = "3.1.62"
+  default = "4.0.1"
 }
 variable "PSQL_IMAGE_VERSION" {
   default = "14-1" # After updating tag here, remeber to also update it in job 'psql_image_test'
@@ -83,7 +83,7 @@ target "tox-test-runner" {
 
 target "emsdk" {
   dockerfile = "Dockerfile.emscripten"
-  tags = generate-tags("emsdk", "${EMSCRIPTEN_VERSION}-2")
+  tags = generate-tags("emsdk", "${EMSCRIPTEN_VERSION}-1")
   cache-from = generate-cache-from("emsdk", "${EMSCRIPTEN_VERSION}")
   cache-to = generate-cache-to("emsdk", "${EMSCRIPTEN_VERSION}")
   args = {
diff --git a/scripts/bash/build_emscripten_image.sh b/scripts/bash/build_emscripten_image.sh
index caf37ae9707112c8be95e1ecf0c7fcdc9996ab67..60386fe89320757643ea0ea33017e56fcb4c7ac6 100755
--- a/scripts/bash/build_emscripten_image.sh
+++ b/scripts/bash/build_emscripten_image.sh
@@ -5,11 +5,11 @@ SCRIPTSDIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
 SRCDIR="${SCRIPTSDIR}/../../"
 
 REGISTRY=${1:-"registry.gitlab.syncad.com/hive/common-ci-configuration/"}
-EMSDK_VERSION=${1:-"3.1.62"}
+EMSDK_VERSION=${1:-"4.0.1"}
 
 export DOCKER_BUILDKIT=1
 
 docker build --target=supplemented_emscripten_builder \
   --build-arg "EMSCRIPTEN_VERSION=${EMSDK_VERSION}" \
-  --tag "${REGISTRY}emsdk:${EMSDK_VERSION}-2" \
+  --tag "${REGISTRY}emsdk:${EMSDK_VERSION}-1" \
   --file "${SRCDIR}/Dockerfile.emscripten" "${SRCDIR}"
diff --git a/templates/npm_projects.gitlab-ci.yml b/templates/npm_projects.gitlab-ci.yml
index b4ea44d465dc3d5e12563084cf191360b551c10c..07dab021202dbbb59c9984bd1d7c8981515269a4 100644
--- a/templates/npm_projects.gitlab-ci.yml
+++ b/templates/npm_projects.gitlab-ci.yml
@@ -2,8 +2,8 @@ include:
   - local: templates/base.gitlab-ci.yml
 
 variables:
-  # uses registry.gitlab.syncad.com/hive/common-ci-configuration/emsdk:3.1.62-2
-  EMSCRIPTEN_IMAGE_TAG: "3.1.62-2@sha256:935b6f30b0d521971ac54a5c36af1856f810bc93c993d9dc5d663c1e03879ae8"
+  # uses registry.gitlab.syncad.com/hive/common-ci-configuration/emsdk:4.0.1-1
+  EMSCRIPTEN_IMAGE_TAG: "4.0.1-1@sha256:2212741aa9c6647ece43a9ac222c677589f18b27cc8e39921636f125705155dd"
   EMSCRIPTEN_IMAGE: "registry.gitlab.syncad.com/hive/common-ci-configuration/emsdk:$EMSCRIPTEN_IMAGE_TAG"
 
 .node_based_job_base: