diff --git a/.devcontainer/VERSION_MATRIX.md b/.devcontainer/VERSION_MATRIX.md
index afe16124f595a2e6fe0fa648ff3603515c91e4d7..31d959030d49de216ff374f83655861566b7f04e 100644
--- a/.devcontainer/VERSION_MATRIX.md
+++ b/.devcontainer/VERSION_MATRIX.md
@@ -4,7 +4,8 @@
 
 | GHC                         | Cabal[^1] | Stack[^1]   | HLS                                                 |
 |:----------------------------|:----------|:------------|:--------------------------------------------------- |
-| latest<br>9.6.3<br>9.6<br>9 | 3.10.1.0  | ≥ 2.13.1    | latest<br>2.4.0.0<br>2.3.0.0<br>2.2.0.0             |
+| latest<br>9.8.1<br>9.8<br>9 | 3.10.1.0  | ≥ 2.13.1    | latest<br>2.4.0.0                                   |
+| 9.6.3<br>9.6                | 3.10.1.0  | ≥ 2.13.1    | 2.4.0.0<br>2.3.0.0<br>2.2.0.0                       |
 | 9.4.7<br>9.4                | 3.8.1.0   | ≥ 2.13.1    | 2.4.0.0<br>2.3.0.0<br>2.2.0.0<br>2.1.0.0<br>2.0.0.1 |
 | 9.2.8<br>9.2                | 3.6.2.0   | ≥ 2.13.1    | 2.4.0.0<br>2.3.0.0<br>2.2.0.0<br>2.1.0.0<br>2.0.0.1 |
 
diff --git a/.devcontainer/ghc-9.6/devcontainer.json b/.devcontainer/ghc-9.6/devcontainer.json
index 8b52c0205ae18b047629f0680ac1173982fda9be..72502bb2867a667104149d45e56cbfc3ed15cdb5 100644
--- a/.devcontainer/ghc-9.6/devcontainer.json
+++ b/.devcontainer/ghc-9.6/devcontainer.json
@@ -1,5 +1,5 @@
 {
-  "name": "GHC 9.6 (latest)",
+  "name": "GHC 9.6",
   "build": {
     "dockerfile": "../GHC.Dockerfile",
     "context": "..",
diff --git a/.devcontainer/ghc-9.8/devcontainer.json b/.devcontainer/ghc-9.8/devcontainer.json
new file mode 100644
index 0000000000000000000000000000000000000000..8db24a9834aa70c8b2ac296b8dce8253719031c5
--- /dev/null
+++ b/.devcontainer/ghc-9.8/devcontainer.json
@@ -0,0 +1,72 @@
+{
+  "name": "GHC 9.8 (latest)",
+  "build": {
+    "dockerfile": "../GHC.Dockerfile",
+    "context": "..",
+    "args": {
+      "GHC_VERSION": "9.8",
+      "HLS_VERSION": "2.4.0.0",
+      "USE_ZSH_FOR_ROOT": "unset-to-use-ash",
+      "SET_LANG": "C.UTF-8",
+      "SET_TZ": ""
+    }
+  },
+
+  "onCreateCommand": "onCreateCommand.sh",
+  "postCreateCommand": "cabal update",
+  "postAttachCommand": "${HOME}/.local/bin/checkForUpdates.sh",
+
+  "features": {
+    "ghcr.io/devcontainers/features/common-utils:2": {
+      "configureZshAsDefaultShell": true,
+      "upgradePackages": false,
+      "username": "vscode",
+      "userUid": "automatic",
+      "userGid": "automatic"
+    }
+  },
+
+  "customizations": {
+    "vscode": {
+      "extensions": [
+        "alefragnani.project-manager",
+        "christian-kohler.path-intellisense",
+        "eamodio.gitlens@11.7.0",
+        "editorconfig.editorconfig",
+        "exiasr.hadolint",
+        "GitHub.vscode-pull-request-github",
+        "GitLab.gitlab-workflow",
+        "haskell.haskell",
+        "mhutchie.git-graph",
+        "ms-vscode.makefile-tools",
+        "mutantdino.resourcemonitor",
+        "piotrpalarz.vscode-gitignore-generator",
+        "timonwong.shellcheck"
+      ],
+      "settings": {
+        "gitlab.aiAssistedCodeSuggestions.enabled": false,
+        "gitlens.showWelcomeOnInstall": false,
+        "gitlens.showWhatsNewAfterUpgrades": false,
+        "haskell.manageHLS": "PATH",
+        "resmon.show.battery": false,
+        "resmon.show.cpufreq": false
+      }
+    }
+  },
+
+  // Set 'remoteUser' to 'root' to connect as root instead.
+  "remoteUser": "vscode",
+  "workspaceMount": "source=ghc-musl-ghc-9.8-home-vscode,target=/home/vscode,type=volume",
+  // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.8-home-vscode,target=/home/vscode,type=bind",
+  "workspaceFolder": "/home/vscode",
+
+  // "remoteUser": "root",
+  // "workspaceMount": "source=ghc-musl-ghc-9.8-root,target=/root,type=volume",
+  // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.8-root,target=/root,type=bind",
+  // "workspaceFolder": "/root",
+
+  // Pip: Install packages to the user site
+  "remoteEnv": {
+    "PIP_USER": "1"
+  }
+}
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c8fdf686b2438c058bd14065954f61e9d348c6a0..c910e5b00e2d9d9de6a626698d6637bb8d624927 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,6 @@
 .env:
   variables:
-    GHC_VERSION: "9.6.3"
+    GHC_VERSION: "9.8.1"
     CABAL_VERSION: "3.10.1.0"
     STACK_VERSION: "2.13.1"
     HLS_VERSION: "2.4.0.0"
@@ -223,13 +223,6 @@ build-manifest:version-linux-multiarch:
           $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
       fi
       docker manifest push $CI_APP_REPO:$CI_APP_TAG
-    - |
-      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
-      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
-        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
-          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-      fi
-      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
   rules:
     - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "freeze-version"
       changes:
@@ -380,13 +373,6 @@ build-package-hls-manifest:version-linux-multiarch:
           $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8
       fi
       docker manifest push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION
-    - |
-      docker manifest create $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION $CI_MANIFEST_LIST
-      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
-        docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION \
-          $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8
-      fi
-      docker manifest push $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION
   rules:
     - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "freeze-version"
       changes:
@@ -526,12 +512,5 @@ update-manifest:version-linux-multiarch:
           $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
       fi
       docker manifest push $CI_APP_REPO:$CI_APP_TAG
-    - |
-      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
-      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
-        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
-          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-      fi
-      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
   rules:
     - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "freeze-version"
diff --git a/README.md b/README.md
index f95f047d74eae4039d7db8135059edd9456b6609..74cb330474e57adf548d37bea434b0733b793ab6 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ To install docker, follow the instructions for your platform:
 
 ```bash
 docker build \
-  --build-arg GHC_VERSION=9.6.3 \
+  --build-arg GHC_VERSION=9.8.1 \
   --build-arg CABAL_VERSION=3.10.1.0 \
   --build-arg STACK_VERSION=2.13.1 \
   -t ghc-musl \
diff --git a/VERSION_MATRIX.md b/VERSION_MATRIX.md
index b4b355666a74614d270ac32002a26033462d3dcf..971401378a3929f06679479c83f6ab6c4a773ea9 100644
--- a/VERSION_MATRIX.md
+++ b/VERSION_MATRIX.md
@@ -4,6 +4,7 @@ Topmost entry = Tag `latest`
 
 | GHC        | Cabal    | Stack      | LLVM | Linux distro |
 |:-----------|:---------|:-----------|:---- |:-------------|
+| 9.8.1      | 3.10.1.0 | 2.13.1     | 14   | Alpine 3.18  |
 | 9.6.3      | 3.10.1.0 | 2.13.1     | 14   | Alpine 3.18  |
 | 9.6.2      | 3.10.1.0 | 2.11.1[^1] | 14   | Alpine 3.18  |
 | 9.6.1      | 3.10.1.0 | n/a        | 14   | Alpine 3.18  |
diff --git a/latest.Dockerfile b/latest.Dockerfile
index c1a7d7a218e9dac1de082d9f590c75d75d516a49..963c2fc2f5af9c0a240ed3b9d9b0ba137fde75ff 100644
--- a/latest.Dockerfile
+++ b/latest.Dockerfile
@@ -5,7 +5,7 @@ ARG STACK_VERSION
 ARG GHC_VERSION_BUILD=${GHC_VERSION}
 ARG CABAL_VERSION_BUILD=${CABAL_VERSION}
 
-FROM glcr.b-data.ch/ghc/ghc-musl:9.4.7 as bootstrap
+FROM glcr.b-data.ch/ghc/ghc-musl:9.6.3 as bootstrap
 
 ARG GHC_VERSION_BUILD
 ARG CABAL_VERSION_BUILD
@@ -36,9 +36,9 @@ RUN cd /tmp \
   && curl -sSLO https://downloads.haskell.org/~ghc/"$GHC_VERSION"/ghc-"$GHC_VERSION"-src.tar.xz \
   && curl -sSLO https://downloads.haskell.org/~ghc/"$GHC_VERSION"/ghc-"$GHC_VERSION"-src.tar.xz.sig \
   && gpg --keyserver hkps://keyserver.ubuntu.com:443 \
-    --receive-keys 33C3A599DB85EA9B8BAA1866B202264020068BFB || \
+    --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD || \
     gpg --keyserver hkp://keyserver.ubuntu.com:80 \
-    --receive-keys 33C3A599DB85EA9B8BAA1866B202264020068BFB \
+    --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD \
   && gpg --verify "ghc-$GHC_VERSION-src.tar.xz.sig" "ghc-$GHC_VERSION-src.tar.xz" \
   && tar -xJf "ghc-$GHC_VERSION-src.tar.xz" \
   && cd "ghc-$GHC_VERSION" \
@@ -133,7 +133,7 @@ RUN cd /tmp \
   && rm -rf /tmp/*
 
 ## Install Cabal
-COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal
+COPY --from=bootstrap /root/.local/bin/cabal /usr/local/bin/cabal
 
 FROM builder as tester