diff --git a/.github/workflows/check-formatting.yml b/.github/workflows/check-formatting.yml
index f425ff868a46..3b3c400a4937 100644
--- a/.github/workflows/check-formatting.yml
+++ b/.github/workflows/check-formatting.yml
@@ -1,7 +1,7 @@
name: Check formatting
env:
- PNPM_VERSION: "9.6.0"
+ PNPM_VERSION: "10.28.1"
NODE_VERSION: "24.11.0"
on:
diff --git a/.github/workflows/fix-formatting.yml b/.github/workflows/fix-formatting.yml
index f0b03e0def30..792f30e8e510 100644
--- a/.github/workflows/fix-formatting.yml
+++ b/.github/workflows/fix-formatting.yml
@@ -1,7 +1,7 @@
name: Fix formatting
env:
- PNPM_VERSION: "9.6.0"
+ PNPM_VERSION: "10.28.1"
NODE_VERSION: "24.11.0"
permissions:
diff --git a/.github/workflows/monkey-ci.yml b/.github/workflows/monkey-ci.yml
index b746ed1c504a..02217993414e 100644
--- a/.github/workflows/monkey-ci.yml
+++ b/.github/workflows/monkey-ci.yml
@@ -1,7 +1,7 @@
name: Monkey CI
env:
- PNPM_VERSION: "9.6.0"
+ PNPM_VERSION: "10.28.1"
NODE_VERSION: "24.11.0"
RECAPTCHA_SITE_KEY: "6Lc-V8McAAAAAJ7s6LGNe7MBZnRiwbsbiWts87aj"
diff --git a/backend/docker/compose.yml b/backend/docker/compose.yml
index 6b42b72c273b..8b76224c1328 100644
--- a/backend/docker/compose.yml
+++ b/backend/docker/compose.yml
@@ -24,7 +24,7 @@ services:
build:
dockerfile_inline: |
FROM node:24.11.0
- RUN npm i -g pnpm@9.6.0
+ RUN npm i -g pnpm@10.28.1
RUN mkdir /pnpm-store && chown -R 1000:1000 /pnpm-store
user: "node" ##this works as long as your local user has uid=1000
restart: on-failure
diff --git a/backend/package.json b/backend/package.json
index 497a2a860794..2b286280a42a 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -60,7 +60,7 @@
"devDependencies": {
"@monkeytype/oxlint-config": "workspace:*",
"@monkeytype/typescript-config": "workspace:*",
- "@redocly/cli": "2.0.5",
+ "@redocly/cli": "2.15.1",
"@types/bcrypt": "5.0.2",
"@types/cors": "2.8.12",
"@types/cron": "1.7.3",
@@ -90,6 +90,6 @@
"vitest": "4.0.15"
},
"engines": {
- "node": "24.11.0 || 22.21.0"
+ "node": ">=24.0.0 <25"
}
}
diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile
index 4180d247e8a9..9ba0cf3f83ab 100644
--- a/docker/backend/Dockerfile
+++ b/docker/backend/Dockerfile
@@ -8,12 +8,12 @@ COPY packages packages
COPY backend backend
#gimme pnpm + build
-RUN npm i -g pnpm && \
+RUN npm i -g pnpm@10.28.1 && \
pnpm i --frozen-lockfile && \
npm run build
#deploy (install all non-dev dependencies in a single node_module folder)
-RUN pnpm deploy --filter backend --prod /prod/backend
+RUN pnpm deploy --legacy --filter backend --prod /prod/backend
#---------------------------------
diff --git a/docs/CONTRIBUTING_ADVANCED.md b/docs/CONTRIBUTING_ADVANCED.md
index b9b855a986b2..6291fc31ab73 100644
--- a/docs/CONTRIBUTING_ADVANCED.md
+++ b/docs/CONTRIBUTING_ADVANCED.md
@@ -38,7 +38,7 @@ If you use `nvm` (if you use Windows, use [nvm-windows](https://github.com/corey
Alternatively, you can navigate to the NodeJS [website](https://nodejs.org/en/) to download it from there.
-For package management, we use `pnpm` instead of `npm` or `yarn`. You can install it by running `npm i -g pnpm@9.6.0`. This will install `pnpm` globally on your machine.
+For package management, we use `pnpm` instead of `npm` or `yarn`. You can install it by running `npm i -g pnpm@10.28.1`. This will install `pnpm` globally on your machine.
### Docker (Recommended but Optional)
diff --git a/frontend/docker/compose.dev.yml b/frontend/docker/compose.dev.yml
index 1eae287800f2..d4178e9bf1e2 100644
--- a/frontend/docker/compose.dev.yml
+++ b/frontend/docker/compose.dev.yml
@@ -5,7 +5,7 @@ services:
build:
dockerfile_inline: |
FROM node:24.11.0
- RUN npm i -g pnpm@9.6.0
+ RUN npm i -g pnpm@10.28.1
RUN mkdir /pnpm-store && chown -R 1000:1000 /pnpm-store
user: "node" ##this works as long as your local user has uid=1000
# restart: on-failure
diff --git a/frontend/package.json b/frontend/package.json
index 73180d0afa0f..9a5ffaa4dfd6 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -23,6 +23,7 @@
},
"dependencies": {
"@date-fns/utc": "1.2.0",
+ "@leonabcd123/modern-caps-lock": "2.0.3",
"@monkeytype/contracts": "workspace:*",
"@monkeytype/funbox": "workspace:*",
"@monkeytype/schemas": "workspace:*",
@@ -127,6 +128,6 @@
"not dead"
],
"engines": {
- "node": "24.11.0 || 22.21.0"
+ "node": ">=24.0.0 <25"
}
}
diff --git a/frontend/src/html/pages/settings.html b/frontend/src/html/pages/settings.html
index d33167a8e55e..a997a27b2599 100644
--- a/frontend/src/html/pages/settings.html
+++ b/frontend/src/html/pages/settings.html
@@ -106,6 +106,26 @@
+
+
+
+ result saving
+
+
+
+ Disable result saving, in case you want to practice without affecting
+ your account stats.
+
+
+
+
+
+
diff --git a/frontend/src/html/popups.html b/frontend/src/html/popups.html
index 15fc0f73b804..8bab25716116 100644
--- a/frontend/src/html/popups.html
+++ b/frontend/src/html/popups.html
@@ -926,6 +926,7 @@
-
+