diff --git a/ci/emscripten.sh b/ci/emscripten.sh
index 4666a1212e45a5e641cb540d79c65ed4768c9192..acec4ca26f87f7057630fc9a3db3f2c8a550c772 100644
--- a/ci/emscripten.sh
+++ b/ci/emscripten.sh
@@ -28,21 +28,18 @@ exit 1
   set -x
 }
 
-cd /
-curl --retry 5 -L https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz | \
-    tar -xz
-
+git clone https://github.com/emscripten-core/emsdk.git /emsdk-portable
 cd /emsdk-portable
-./emsdk update
-hide_output ./emsdk install 1.38.37
-./emsdk activate 1.38.37
+# TODO: switch to an upstream install once
+# https://github.com/rust-lang/rust/pull/63649 lands
+hide_output ./emsdk install 1.38.42
+./emsdk activate 1.38.42
 
 # Compile and cache libc
 # shellcheck disable=SC1091
 source ./emsdk_env.sh
 echo "main(){}" > a.c
 HOME=/emsdk-portable/ emcc a.c
-HOME=/emsdk-portable/ emcc -s BINARYEN=1 a.c
 rm -f a.*
 
 # Make emsdk usable by any user