diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 619a7203b6eeb2d5e84ee23f8c9d77884d669a38..52d76e725efbcc53649ccdd72e0c4f1e8b793417 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -61,10 +61,6 @@ x86_64-linux-ubuntu:
     - x86_64-linux
   image: registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-ubuntu20_04:$DOCKER_REV
   before_script:
-    - |
-      mkdir -p ~/.local
-      curl -f -L --retry 5 https://unofficial-builds.nodejs.org/download/release/v20.8.1/node-v20.8.1-linux-x64-pointer-compression.tar.xz | tar xJ --strip-components=1 -C ~/.local
-      export PATH=~/.local/bin:$PATH
     - sudo chown ghc:ghc -R .
   script:
     - |
@@ -106,8 +102,8 @@ x86_64-linux-ubuntu:
       export PATH=$TEST_WRAPPERS:$PATH
       wasm32-wasi-cabal install ./core-tests
       for test in tasty-core-tests exit-status-test resource-release-test failing-pattern-test; do
-        echo '#!/usr/bin/env bash' > "$TEST_WRAPPERS/$test"
-        echo "wasmtime run --mapdir /::/ --env PWD=\"\$PWD\" -- /tmp/.ghc-wasm/.cabal/bin/$test.wasm \"\$@\"" \
+        echo '#!/bin/sh' > "$TEST_WRAPPERS/$test"
+        echo "exec /tmp/.ghc-wasm/wasmtime/bin/wasmtime run --env PATH= --env PWD=\"\$PWD\" --dir /::/ -W tail-call -- /tmp/.ghc-wasm/.cabal/bin/$test.wasm \"\$@\"" \
           >> "$TEST_WRAPPERS/$test"
         chmod +x "$TEST_WRAPPERS/$test"
       done
diff --git a/autogen.js b/autogen.js
index 45702b61a13a3a8c450a5081e15eb534cb7f2a8b..c7aa960d24332a0288b3b5dc1a52b035a702ec63 100755
--- a/autogen.js
+++ b/autogen.js
@@ -81,7 +81,7 @@ const _deno = fetchGitHubLatestRelease(
   "unknown-linux-gnu.zip"
 );
 const _nodejs = fetchTarball(
-  "https://unofficial-builds.nodejs.org/download/release/v20.8.1/node-v20.8.1-linux-x64-pointer-compression.tar.xz"
+  "https://nodejs.org/dist/v21.0.0/node-v21.0.0-linux-x64.tar.xz"
 );
 const _bun = fetchGitHubLatestRelease(
   "builtins.fetchTarball",
diff --git a/autogen.json b/autogen.json
index df36457a56dc768073d6b36d1ecad91335872eef..6faecff004f9e1bc26ef7117500ebcd5daa9f89e 100644
--- a/autogen.json
+++ b/autogen.json
@@ -1,15 +1,15 @@
 {
   "wasm32-wasi-ghc-gmp": {
-    "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231015T201517/wasm32-wasi-ghc-gmp.tar.xz",
-    "hash": "sha256-iCeUfkiGYA12ubmpMEJTFEAmS09G3pq5gcfVvc4uchc="
+    "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231022T201507/wasm32-wasi-ghc-gmp.tar.xz",
+    "hash": "sha256-lJiJGM3NheqBSkOd+55HYhldXsCv3pxKvc1dBnJ/XY8="
   },
   "wasm32-wasi-ghc-native": {
-    "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231015T201517/wasm32-wasi-ghc-native.tar.xz",
-    "hash": "sha256-5BBccGM8AQCSR5wVr20807GgAj9Yk8QjIwBsk8NGhvo="
+    "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231022T201507/wasm32-wasi-ghc-native.tar.xz",
+    "hash": "sha256-S16hRI3slu4dMEoUSTm9VP/TUjfPtr6jEm2Jjtev8kE="
   },
   "wasm32-wasi-ghc-unreg": {
-    "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231015T201517/wasm32-wasi-ghc-unreg.tar.xz",
-    "hash": "sha256-4zT6Sh77yQC35ycOAP2C0hf3rFCL4yJCyqfrBGOG068="
+    "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231022T201507/wasm32-wasi-ghc-unreg.tar.xz",
+    "hash": "sha256-zrWs3+4MnrgM9LUswv/SiENBY4lbCb1PFAC/TZdaXko="
   },
   "wasm32-wasi-ghc-9.6": {
     "url": "https://github.com/amesgen/ghc-wasm-bindists/releases/download/20231001T201511/wasm32-wasi-ghc-9.6.tar.xz",
@@ -40,12 +40,12 @@
     "sha256": "0avz3wwp6j21qwqqag2sp9rskriz8c6d7a89gfrv1zx0md5nq2z1"
   },
   "nodejs": {
-    "url": "https://unofficial-builds.nodejs.org/download/release/v20.8.1/node-v20.8.1-linux-x64-pointer-compression.tar.xz",
-    "sha256": "1ds1yaqqyxb7d8jwwvgam3qg7zyydigfjr2gwda4q9vwapbgwwj6"
+    "url": "https://nodejs.org/dist/v21.0.0/node-v21.0.0-linux-x64.tar.xz",
+    "sha256": "199vxap2pgc2pp5rq84acv9khr81n52v6q3ypcpjda16m1d0nf37"
   },
   "bun": {
-    "url": "https://github.com/oven-sh/bun/releases/download/bun-v1.0.6/bun-linux-x64.zip",
-    "sha256": "110ryand1s2rlzzjsqvrd1l3nsq7kklfi5886w01sgrxqy42g1j4"
+    "url": "https://github.com/oven-sh/bun/releases/download/bun-v1.0.7/bun-linux-x64.zip",
+    "sha256": "0kssqrxz7x0q9rmi9xwshsgy8a66z85k5yn226an7rkvvz7lzihq"
   },
   "binaryen": {
     "url": "https://github.com/type-dance/binaryen/releases/download/version_116/binaryen-version_116-x86_64-linux-musl.tar.xz",
@@ -56,20 +56,20 @@
     "sha256": "0w8m7acb1rpizg86hmq6q215vmpc75ixdbh29bf3asigsxv4p1p0"
   },
   "wasmtime": {
-    "url": "https://github.com/type-dance/wasmtime/releases/download/v13.0.0/wasmtime-v13.0.0-x86_64-linux-musl.tar.xz",
-    "sha256": "1vfii1i3l9rjxk0msajnds2a08s2p7lv77x4akhbsnidaxp5i7yw"
+    "url": "https://github.com/type-dance/wasmtime/releases/download/v14.0.0/wasmtime-v14.0.0-x86_64-linux-musl.tar.xz",
+    "sha256": "0j99fan2gspcygx4ls9lv57c1sp04yk3a4g4r86vigxvjy9la2bf"
   },
   "wasmtime_aarch64_linux": {
-    "url": "https://github.com/bytecodealliance/wasmtime/releases/download/v13.0.0/wasmtime-v13.0.0-aarch64-linux.tar.xz",
-    "sha256": "0bvj8krgy8sz851ilwmswg0r702lfqzlyxka0n8wbmghmmb92818"
+    "url": "https://github.com/bytecodealliance/wasmtime/releases/download/v14.0.0/wasmtime-v14.0.0-aarch64-linux.tar.xz",
+    "sha256": "1b9yz2yrmcg0rhlzsydyrpwnjl3ld1p32mcphqs9mi8s75fbg22f"
   },
   "wasmtime_aarch64_darwin": {
-    "url": "https://github.com/bytecodealliance/wasmtime/releases/download/v13.0.0/wasmtime-v13.0.0-aarch64-macos.tar.xz",
-    "sha256": "073swpgmd5n1jk83cs71ghsvpzflf3z9qvg1xkfpflrqqfwvw1ql"
+    "url": "https://github.com/bytecodealliance/wasmtime/releases/download/v14.0.0/wasmtime-v14.0.0-aarch64-macos.tar.xz",
+    "sha256": "0w7zv973xdj8nyn8jnq2i0kmvn54aiplp9583a8kkxg70v8hypp9"
   },
   "wasmtime_x86_64_darwin": {
-    "url": "https://github.com/bytecodealliance/wasmtime/releases/download/v13.0.0/wasmtime-v13.0.0-x86_64-macos.tar.xz",
-    "sha256": "0ik698li3hjizb1p09h8d2a0wmnbg6fkpvzdzxgl79188nmmkhhr"
+    "url": "https://github.com/bytecodealliance/wasmtime/releases/download/v14.0.0/wasmtime-v14.0.0-x86_64-macos.tar.xz",
+    "sha256": "0l2iwnrxb6fr5mr192n3y9lavnbx7fx67b0ff6vlf4ycn91hsqnv"
   },
   "wasmedge": {
     "url": "https://github.com/WasmEdge/WasmEdge/releases/download/0.13.4/WasmEdge-0.13.4-ubuntu20.04_x86_64.tar.gz",
diff --git a/flake.lock b/flake.lock
index 42c3e1eb2902a5b9bc827d61ebf13c4f18799d13..3cfbd17014f310f36f257ab42a5734636c15b452 100644
--- a/flake.lock
+++ b/flake.lock
@@ -20,11 +20,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1697059129,
-        "narHash": "sha256-9NJcFF9CEYPvHJ5ckE8kvINvI84SZZ87PvqMbH6pro0=",
+        "lastModified": 1697723726,
+        "narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "5e4c2ada4fcd54b99d56d7bd62f384511a7e2593",
+        "rev": "7c9cc5a6e5d38010801741ac830a3f8fd667a7a0",
         "type": "github"
       },
       "original": {
diff --git a/wasm-run/wasmtime.sh b/wasm-run/wasmtime.sh
index e725b34cd4a7795e2df145d06a522d8f660f9a4e..b50fe0fc9b06bf6fc7080ebb5ff694c2c5900aba 100755
--- a/wasm-run/wasmtime.sh
+++ b/wasm-run/wasmtime.sh
@@ -1,3 +1,3 @@
 #!/bin/sh
 
-exec wasmtime run --disable-cache --disable-parallel-compilation --env PATH= --env PWD="$PWD" --mapdir /::/ --opt-level 0 --wasm-features tail-call -- ${1+"$@"}
+exec wasmtime run -C cache=n -C parallel-compilation=n --env PATH= --env PWD="$PWD" --dir /::/ -O opt-level=0 -W tail-call -- ${1+"$@"}