diff --git a/ci/emscripten-entry.sh b/ci/emscripten-entry.sh
index 41e7935ff7cfcff2ec7a841d5e6570a50d9fbf09..ee3261f1b5ad436fbcc8918619157527f88a4381 100755
--- a/ci/emscripten-entry.sh
+++ b/ci/emscripten-entry.sh
@@ -6,6 +6,7 @@ set -ex
 source /emsdk-portable/emsdk_env.sh &> /dev/null
 
 # emsdk-portable provides a node binary, but we need version 8 to run wasm
-export PATH="/node-v12.16.2-linux-x64/bin:$PATH"
+# NOTE: Do not forget to sync Node.js version with `emscripten.sh`!
+export PATH="/node-v12.18.3-linux-x64/bin:$PATH"
 
 exec "$@"
diff --git a/ci/emscripten.sh b/ci/emscripten.sh
index a24094f67a11593c3df666c4340e00cb89506147..ea1083ae0ec021416e627785bd17af0c82bb64dc 100644
--- a/ci/emscripten.sh
+++ b/ci/emscripten.sh
@@ -2,7 +2,7 @@
 
 set -ex
 
-EMSDK_VERSION=1.39.19
+EMSDK_VERSION=1.39.20
 
 hide_output() {
   set +x
@@ -23,8 +23,6 @@ exit 1
 
 git clone https://github.com/emscripten-core/emsdk.git /emsdk-portable
 cd /emsdk-portable
-# FIXME: switch to an upstream install once
-# https://github.com/rust-lang/rust/pull/63649 lands
 hide_output ./emsdk install "${EMSDK_VERSION}"
 ./emsdk activate "${EMSDK_VERSION}"
 
@@ -39,6 +37,7 @@ rm -f a.*
 chmod a+rxw -R /emsdk-portable
 
 # node 8 is required to run wasm
+# NOTE: Do not forget to sync Node.js version with `emscripten-entry.sh`!
 cd /
-curl --retry 5 -L https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz | \
+curl --retry 5 -L https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz | \
     tar -xJ