diff --git a/.prettierignore b/.prettierignore
index ae7d4df21b609..b0a2a81b9e2e2 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -10,6 +10,7 @@ package-lock.json
# Next.js Build Output
.next
build
+next-env.d.ts
# Test Runner
junit.xml
diff --git a/apps/site/app/[locale]/error.tsx b/apps/site/app/[locale]/error.tsx
index e518c823debb1..0c4bf7f827ec8 100644
--- a/apps/site/app/[locale]/error.tsx
+++ b/apps/site/app/[locale]/error.tsx
@@ -1,6 +1,5 @@
'use client';
-import { ArrowRightIcon } from '@heroicons/react/24/solid';
import { useTranslations } from 'next-intl';
import Button from '#site/components/Common/Button';
@@ -13,17 +12,17 @@ const ErrorPage: FC<{ error: Error }> = () => {
return (
- 500
+ 500
+
{t('layouts.error.internalServerError.title')}
+
{t('layouts.error.internalServerError.description')}
-
+
+
);
};
diff --git a/apps/site/app/[locale]/not-found.tsx b/apps/site/app/[locale]/not-found.tsx
index 058f213ececb6..c6dc76a682af8 100644
--- a/apps/site/app/[locale]/not-found.tsx
+++ b/apps/site/app/[locale]/not-found.tsx
@@ -1,6 +1,5 @@
'use server';
-import { ArrowRightIcon } from '@heroicons/react/24/solid';
import { getTranslations } from 'next-intl/server';
import Button from '#site/components/Common/Button';
@@ -28,10 +27,7 @@ const NotFoundPage: FC = async () => {
{t('layouts.error.notFound.description')}
- = async ({
- status,
+ status: statuses,
children: Component,
}) => {
- const releaseData = await provideReleaseData();
-
- let matchingRelease: NodeRelease | undefined;
- for (const statusItem of Array.isArray(status) ? status : [status]) {
- matchingRelease = releaseData.find(
- release => release.status === statusItem
- );
- if (matchingRelease) {
- break;
- }
- }
+ const releases = await provideReleaseData();
+
+ const matchingRelease = [statuses]
+ .flat()
+ .map(status => releases.find(release => release.status === status))
+ .find(Boolean);
if (matchingRelease) {
return ;
diff --git a/apps/site/eslint.config.js b/apps/site/eslint.config.js
index 619b5eb4fa765..c36005ae95d2a 100644
--- a/apps/site/eslint.config.js
+++ b/apps/site/eslint.config.js
@@ -12,7 +12,7 @@ export default baseConfig.concat([
react.configs.flat['jsx-runtime'],
hooks.configs['recommended-latest'],
- next.flatConfig.coreWebVitals,
+ next.configs['core-web-vitals'],
mdx.flatCodeBlocks,
// Type-checking
diff --git a/apps/site/next-env.d.ts b/apps/site/next-env.d.ts
index 36a4fe488ad02..2d5420ebae639 100644
--- a/apps/site/next-env.d.ts
+++ b/apps/site/next-env.d.ts
@@ -1,7 +1,7 @@
///
///
///
-///
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs
index f2c99aece9cbf..c8f6bc2c4d290 100644
--- a/apps/site/next.config.mjs
+++ b/apps/site/next.config.mjs
@@ -20,7 +20,8 @@ const getDeploymentId = async () => {
/** @type {import('next').NextConfig} */
const nextConfig = {
- allowedDevOrigins: ['10.1.1.232'],
+ // Full Support of React 18 SSR and Streaming
+ reactCompiler: true,
// We don't want to redirect with trailing slashes
skipTrailingSlashRedirect: true,
// We allow the BASE_PATH to be overridden in case that the Website
@@ -52,10 +53,7 @@ const nextConfig = {
// Enable statically typed links
// @see https://nextjs.org/docs/app/api-reference/config/typescript#statically-typed-links
typedRoutes: true,
- // We don't want to run ESLint Checking on Production Builds
- // as we already check it on the CI within each Pull Request
- // we also configure ESLint to run its lint checking on all files
- eslint: { ignoreDuringBuilds: true },
+ // Experimental Flags
experimental: {
useCache: true,
// Ensure that server-side code is also minified
@@ -82,6 +80,8 @@ const nextConfig = {
'tailwindcss',
'shiki',
],
+ // Faster Development Servers with Turbopack
+ turbopackFileSystemCacheForDev: true,
},
deploymentId: await getDeploymentId(),
};
diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts
index a0080eca48b27..03f1c01730dc2 100644
--- a/apps/site/open-next.config.ts
+++ b/apps/site/open-next.config.ts
@@ -20,10 +20,9 @@ const cloudflareConfig = defineCloudflareConfig({
const openNextConfig: OpenNextConfig = {
...cloudflareConfig,
+ buildCommand: 'pnpm build --webpack',
cloudflare: {
- skewProtection: {
- enabled: true,
- },
+ skewProtection: { enabled: true },
},
};
diff --git a/apps/site/package.json b/apps/site/package.json
index e90d399cec9c2..3f34ccb6177ff 100644
--- a/apps/site/package.json
+++ b/apps/site/package.json
@@ -3,7 +3,7 @@
"type": "module",
"scripts": {
"prebuild": "node --run build:blog-data",
- "build": "cross-env NODE_NO_WARNINGS=1 next build --turbo",
+ "build": "cross-env NODE_NO_WARNINGS=1 next build",
"build:blog-data": "cross-env NODE_NO_WARNINGS=1 node ./scripts/blog-data/index.mjs",
"build:blog-data:watch": "node --watch --watch-path=pages/en/blog ./scripts/blog-data/index.mjs",
"cloudflare:build:worker": "OPEN_NEXT_CLOUDFLARE=true opennextjs-cloudflare build",
@@ -12,7 +12,7 @@
"predeploy": "node --run build:blog-data",
"deploy": "cross-env NEXT_PUBLIC_STATIC_EXPORT=true node --run build",
"predev": "node --run build:blog-data",
- "dev": "cross-env NODE_NO_WARNINGS=1 next dev --turbo",
+ "dev": "cross-env NODE_NO_WARNINGS=1 next dev",
"lint": "node --run lint:js && node --run lint:css && node --run lint:md",
"lint:fix": "node --run lint:js:fix && node --run lint:css:fix && node --run lint:md:fix",
"lint:css": "stylelint \"**/*.css\" --allow-empty-input --cache --cache-strategy=content --cache-location=.stylelintcache",
@@ -42,16 +42,16 @@
"@opentelemetry/instrumentation": "~0.206.0",
"@opentelemetry/resources": "~1.30.1",
"@orama/core": "^1.2.13",
- "@orama/ui": "^1.3.2",
+ "@orama/ui": "^1.5.3",
"@opentelemetry/sdk-logs": "~0.206.0",
"@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-tooltip": "^1.2.8",
- "@tailwindcss/postcss": "~4.1.16",
+ "@tailwindcss/postcss": "~4.1.17",
"@types/node": "catalog:",
"@types/react": "catalog:",
"@vcarl/remark-headings": "~0.1.0",
"@vercel/analytics": "~1.5.0",
- "@vercel/otel": "~2.0.1",
+ "@vercel/otel": "~2.1.0",
"@vercel/speed-insights": "~1.2.0",
"classnames": "catalog:",
"cross-env": "catalog:",
@@ -59,8 +59,8 @@
"github-slugger": "~2.0.0",
"gray-matter": "~4.0.3",
"mdast-util-to-string": "^4.0.0",
- "next": "15.5.7",
- "next-intl": "~4.3.11",
+ "next": "16.0.7",
+ "next-intl": "~4.5.3",
"next-themes": "~0.4.6",
"postcss-calc": "~10.1.1",
"react": "catalog:",
@@ -80,22 +80,23 @@
},
"devDependencies": {
"@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1",
- "@next/eslint-plugin-next": "15.5.7",
+ "@next/eslint-plugin-next": "16.0.7",
"@node-core/remark-lint": "workspace:*",
- "@opennextjs/cloudflare": "^1.13.1",
+ "@opennextjs/cloudflare": "^1.14.4",
"@playwright/test": "^1.56.1",
"@testing-library/user-event": "~14.6.1",
"@types/mdast": "^4.0.4",
"@types/mdx": "^2.0.13",
"@types/semver": "~7.7.1",
+ "babel-plugin-react-compiler": "^1.0.0",
"dedent": "^1.7.0",
- "eslint-config-next": "15.5.4",
+ "eslint-config-next": "16.0.7",
"eslint-plugin-mdx": "~3.6.2",
"eslint-plugin-react": "~7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"global-jsdom": "^27.0.0",
"handlebars": "4.7.8",
- "jsdom": "^27.1.0",
+ "jsdom": "^27.2.0",
"mdast-util-from-markdown": "^2.0.2",
"nock": "^14.0.10",
"remark-frontmatter": "^5.0.0",
@@ -103,11 +104,11 @@
"stylelint-config-standard": "39.0.0",
"stylelint-order": "7.0.0",
"stylelint-selector-bem-pattern": "4.0.1",
- "tsx": "^4.20.6",
+ "tsx": "^4.21.0",
"typescript": "catalog:",
"typescript-eslint": "~8.45.0",
"user-agent-data-types": "0.4.2",
- "wrangler": "^4.45.3"
+ "wrangler": "^4.53.0"
},
"imports": {
"#site/*": [
diff --git a/apps/site/pages/pt-br/about/eol.mdx b/apps/site/pages/pt-br/about/eol.mdx
index c5212a3161e37..71032925dde48 100644
--- a/apps/site/pages/pt-br/about/eol.mdx
+++ b/apps/site/pages/pt-br/about/eol.mdx
@@ -8,7 +8,7 @@ description: Entenda o Fim de Vida Útil (End-of-Life ou EOL) do Node.js, o que
## Por que e como as versões do Node.js chegam ao Fim de Vida Útil
-As versões principais (major) do Node.js são lançadas, corrigidas e designadas como Fim de Vida Útil (EOL) em um cronograma previsível. Como não é viável manter todas as linhas de versão indefinidamente, após um período de manutenção planejado, uma linha de versão principal do Node.js deixa de ser mantida pelo projeto.
+As versões principais (major) do Node.js são lançadas, corrigidas e designadas como Fim de Vida Útil (_End-Of-Life_ ou _EOL_) em um cronograma previsível. Como não é viável manter todas as linhas de versão indefinidamente, após um período de manutenção planejado, uma linha de versão principal do Node.js deixa de ser mantida pelo projeto.