diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8d02531d..4d21a64d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,11 @@ and this project adheres to
- 🐛(backend) create a link_trace record for on-boarding documents
- 🐛(backend) manage race condition when creating sandbox document
+### Changed
+
+⬆️(frontend) upgrade Next.js to v16 #1980
+
+
## [v4.7.0] - 2026-03-09
### Added
diff --git a/renovate.json b/renovate.json
index 0a8f52d67..ccc138a43 100644
--- a/renovate.json
+++ b/renovate.json
@@ -54,10 +54,7 @@
"groupName": "ignored js dependencies",
"matchManagers": ["npm"],
"matchPackageNames": [
- "@next/eslint-plugin-next",
- "eslint-config-next",
"fetch-mock",
- "next",
"node",
"node-fetch",
"react-resizable-panels",
diff --git a/src/frontend/apps/impress/.gitignore b/src/frontend/apps/impress/.gitignore
index 05ad4832b..5bb7b6eff 100644
--- a/src/frontend/apps/impress/.gitignore
+++ b/src/frontend/apps/impress/.gitignore
@@ -12,6 +12,7 @@
# next.js
/.next/
/out/
+next-env.d.ts
# production
/build
diff --git a/src/frontend/apps/impress/next-env.d.ts b/src/frontend/apps/impress/next-env.d.ts
deleted file mode 100644
index d06eebcf1..000000000
--- a/src/frontend/apps/impress/next-env.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-///
-///
-///
-
-// NOTE: This file should not be edited
-// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.
diff --git a/src/frontend/apps/impress/next.config.js b/src/frontend/apps/impress/next.config.js
index bbf2df6bb..13d7053fb 100644
--- a/src/frontend/apps/impress/next.config.js
+++ b/src/frontend/apps/impress/next.config.js
@@ -21,6 +21,17 @@ const nextConfig = {
env: {
NEXT_PUBLIC_BUILD_ID: buildId,
},
+ /**
+ * In dev mode, Next.js doesn't use Webpack, but Turbopack.
+ */
+ turbopack: {
+ rules: {
+ '*.svg': {
+ loaders: ['@svgr/webpack'],
+ as: '*.js',
+ },
+ },
+ },
webpack(config, { isServer }) {
// Grab the existing rule that handles SVG imports
const fileLoaderRule = config.module.rules.find((rule) =>
diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json
index 2d3d8f0fa..f39ce387d 100644
--- a/src/frontend/apps/impress/package.json
+++ b/src/frontend/apps/impress/package.json
@@ -7,7 +7,10 @@
"private": true,
"scripts": {
"dev": "next dev",
- "build": "prettier --check . && yarn stylelint && next build",
+ "predev": "node scripts/prebuild.mjs",
+ "build": "prettier --check . && yarn stylelint && next build --webpack",
+ "prebuild": "node scripts/prebuild.mjs",
+ "postbuild": "node scripts/postbuild.mjs",
"build:ci": "cp .env.development .env.local && yarn build",
"build-theme": "cunningham -g css,ts -o src/cunningham --utility-classes && yarn prettier && yarn stylelint --fix",
"start": "npx -y serve@latest out",
@@ -59,7 +62,7 @@
"idb": "8.0.3",
"lodash": "4.17.23",
"luxon": "3.7.2",
- "next": "15.5.10",
+ "next": "16.1.6",
"posthog-js": "1.347.2",
"react": "*",
"react-aria-components": "1.15.1",
diff --git a/src/frontend/apps/impress/scripts/postbuild.mjs b/src/frontend/apps/impress/scripts/postbuild.mjs
new file mode 100644
index 000000000..e565864d3
--- /dev/null
+++ b/src/frontend/apps/impress/scripts/postbuild.mjs
@@ -0,0 +1,4 @@
+/**
+ * Post-build script: runs all tasks required after `next build`.
+ * Add future post-build steps here.
+ */
diff --git a/src/frontend/apps/impress/scripts/prebuild.mjs b/src/frontend/apps/impress/scripts/prebuild.mjs
new file mode 100644
index 000000000..ccd69bb80
--- /dev/null
+++ b/src/frontend/apps/impress/scripts/prebuild.mjs
@@ -0,0 +1,4 @@
+/**
+ * Pre-build script: runs all setup tasks required before `next build`.
+ * Add future build preparation steps here.
+ */
diff --git a/src/frontend/apps/impress/src/custom-next.d.ts b/src/frontend/apps/impress/src/custom-next.d.ts
index f6610a52f..7db18713b 100644
--- a/src/frontend/apps/impress/src/custom-next.d.ts
+++ b/src/frontend/apps/impress/src/custom-next.d.ts
@@ -1,3 +1,6 @@
+///
+///
+
declare module '*.svg' {
import * as React from 'react';
diff --git a/src/frontend/apps/impress/tsconfig.json b/src/frontend/apps/impress/tsconfig.json
index 886605533..cd08843a6 100644
--- a/src/frontend/apps/impress/tsconfig.json
+++ b/src/frontend/apps/impress/tsconfig.json
@@ -11,7 +11,7 @@
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
- "jsx": "preserve",
+ "jsx": "react-jsx",
"incremental": true,
"plugins": [
{
@@ -23,12 +23,6 @@
"@/docs/*": ["./src/features/docs/*"]
}
},
- "include": [
- "src/custom-next.d.ts",
- "next-env.d.ts",
- "**/*.ts",
- "**/*.tsx",
- ".next/types/**/*.ts"
- ],
+ "include": ["src/custom-next.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock
index e236726b2..f4defae92 100644
--- a/src/frontend/yarn.lock
+++ b/src/frontend/yarn.lock
@@ -2868,10 +2868,10 @@
"@emnapi/runtime" "^1.4.3"
"@tybys/wasm-util" "^0.10.0"
-"@next/env@15.5.10":
- version "15.5.10"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-15.5.10.tgz#3b0506c57d0977e60726a1663f36bc96d42c295b"
- integrity sha512-plg+9A/KoZcTS26fe15LHg+QxReTazrIOoKKUC3Uz4leGGeNPgLHdevVraAAOX0snnUs3WkRx3eUQpj9mreG6A==
+"@next/env@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-16.1.6.tgz#0f85979498249a94ef606ef535042a831f905e89"
+ integrity sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==
"@next/eslint-plugin-next@15.5.10":
version "15.5.10"
@@ -2880,45 +2880,45 @@
dependencies:
fast-glob "3.3.1"
-"@next/swc-darwin-arm64@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz#f0c9ccfec2cd87cbd4b241ce4c779a7017aed958"
- integrity sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==
+"@next/swc-darwin-arm64@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz#fbe1e360efdcc9ebd0a10301518275bc59e12a91"
+ integrity sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==
-"@next/swc-darwin-x64@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz#18009e9fcffc5c0687cc9db24182ddeac56280d9"
- integrity sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==
+"@next/swc-darwin-x64@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz#0e3781ef3abc8251c2a21addc733d9a87f44829b"
+ integrity sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==
-"@next/swc-linux-arm64-gnu@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz#fe7c7e08264cf522d4e524299f6d3e63d68d579a"
- integrity sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==
+"@next/swc-linux-arm64-gnu@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz#b24511af2c6129f2deaf5c8c04d297fe09cd40d7"
+ integrity sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==
-"@next/swc-linux-arm64-musl@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz#94228fe293475ec34a5a54284e1056876f43a3cf"
- integrity sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==
+"@next/swc-linux-arm64-musl@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz#9d4ed0565689fc6a867250f994736a5b8c542ccb"
+ integrity sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==
-"@next/swc-linux-x64-gnu@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz#078c71201dfe7fcfb8fa6dc92aae6c94bc011cdc"
- integrity sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==
+"@next/swc-linux-x64-gnu@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz#cc757f4384e7eab7d3dba704a97f737518bae0d2"
+ integrity sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==
-"@next/swc-linux-x64-musl@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz#72947f5357f9226292353e0bb775643da3c7a182"
- integrity sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==
+"@next/swc-linux-x64-musl@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz#ef1341740f29717deea7c6ec27ae6269386e20d1"
+ integrity sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==
-"@next/swc-win32-arm64-msvc@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz#397b912cd51c6a80e32b9c0507ecd82514353941"
- integrity sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==
+"@next/swc-win32-arm64-msvc@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz#fee8719242aecf9c39c3a66f1f73821f7884dd16"
+ integrity sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==
-"@next/swc-win32-x64-msvc@15.5.7":
- version "15.5.7"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz#e02b543d9dc6c1631d4ac239cb1177245dfedfe4"
- integrity sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==
+"@next/swc-win32-x64-msvc@16.1.6":
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz#60c27323c30f35722b20fd6d62449fbb768e46d9"
+ integrity sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==
"@noble/hashes@^2.0.1":
version "2.0.1"
@@ -8494,6 +8494,11 @@ base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+baseline-browser-mapping@^2.8.3:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9"
+ integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==
+
baseline-browser-mapping@^2.8.9:
version "2.8.19"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz#8d99bb7f06bc6ea5c9c1b961e631a1713069bbe0"
@@ -13238,26 +13243,27 @@ neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-next@15.5.10:
- version "15.5.10"
- resolved "https://registry.yarnpkg.com/next/-/next-15.5.10.tgz#5e3824d8f00dcd66ca4e79c38834f766976116bd"
- integrity sha512-r0X65PNwyDDyOrWNKpQoZvOatw7BcsTPRKdwEqtc9cj3wv7mbBIk9tKed4klRaFXJdX0rugpuMTHslDrAU1bBg==
+next@16.1.6:
+ version "16.1.6"
+ resolved "https://registry.yarnpkg.com/next/-/next-16.1.6.tgz#24a861371cbe211be7760d9a89ddf2415e3824de"
+ integrity sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==
dependencies:
- "@next/env" "15.5.10"
+ "@next/env" "16.1.6"
"@swc/helpers" "0.5.15"
+ baseline-browser-mapping "^2.8.3"
caniuse-lite "^1.0.30001579"
postcss "8.4.31"
styled-jsx "5.1.6"
optionalDependencies:
- "@next/swc-darwin-arm64" "15.5.7"
- "@next/swc-darwin-x64" "15.5.7"
- "@next/swc-linux-arm64-gnu" "15.5.7"
- "@next/swc-linux-arm64-musl" "15.5.7"
- "@next/swc-linux-x64-gnu" "15.5.7"
- "@next/swc-linux-x64-musl" "15.5.7"
- "@next/swc-win32-arm64-msvc" "15.5.7"
- "@next/swc-win32-x64-msvc" "15.5.7"
- sharp "^0.34.3"
+ "@next/swc-darwin-arm64" "16.1.6"
+ "@next/swc-darwin-x64" "16.1.6"
+ "@next/swc-linux-arm64-gnu" "16.1.6"
+ "@next/swc-linux-arm64-musl" "16.1.6"
+ "@next/swc-linux-x64-gnu" "16.1.6"
+ "@next/swc-linux-x64-musl" "16.1.6"
+ "@next/swc-win32-arm64-msvc" "16.1.6"
+ "@next/swc-win32-x64-msvc" "16.1.6"
+ sharp "^0.34.4"
no-case@^3.0.4:
version "3.0.4"
@@ -15286,7 +15292,7 @@ shallowequal@1.1.0:
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
-sharp@^0.34.3:
+sharp@^0.34.4:
version "0.34.5"
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.34.5.tgz#b6f148e4b8c61f1797bde11a9d1cfebbae2c57b0"
integrity sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==