From 258de4aea297d2f5c51596aa3e76133dab4cb06b Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:14:06 +0100 Subject: [PATCH 01/10] [AI] expose onBoundaryError via +react setting Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- packages/vike-react/src/integration/onRenderHtml.tsx | 3 ++- .../vike-react/src/integration/resolveReactOptions.ts | 11 +++++++++++ packages/vike-react/src/types/Config.ts | 8 ++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/vike-react/src/integration/onRenderHtml.tsx b/packages/vike-react/src/integration/onRenderHtml.tsx index da8eacfb5..71f235754 100644 --- a/packages/vike-react/src/integration/onRenderHtml.tsx +++ b/packages/vike-react/src/integration/onRenderHtml.tsx @@ -72,7 +72,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { // https://github.com/vikejs/vike-react/issues/87#issuecomment-2488742744 await callCumulativeHooks(pageContext.config.onBeforeRenderHtml, pageContext) - const { renderToStringOptions } = resolveReactOptions(pageContext) + const { renderToStringOptions, onBoundaryError } = resolveReactOptions(pageContext) if (pageContext.page) { const streamSetting = resolveStreamSetting(pageContext) @@ -101,6 +101,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { false, */ undefined, + onBoundaryError, }) pageContext.pageHtmlStream = pageHtmlStream } diff --git a/packages/vike-react/src/integration/resolveReactOptions.ts b/packages/vike-react/src/integration/resolveReactOptions.ts index 18cdee48a..44c590720 100644 --- a/packages/vike-react/src/integration/resolveReactOptions.ts +++ b/packages/vike-react/src/integration/resolveReactOptions.ts @@ -12,12 +12,23 @@ function resolveReactOptions(pageContext: PageContext) { if (!optionList) return objectEntries(optionList).forEach(([fnName, options]) => { if (!options) return + if (isCallable(options)) { + const valPrevious = optionsAcc[fnName] as Function | undefined + // @ts-ignore + optionsAcc[fnName] = (...args: unknown[]) => { + valPrevious?.(...args) + ;(options as Function)(...args) + } + return + } + // @ts-ignore optionsAcc[fnName] ??= {} objectEntries(options).forEach(([key, val]) => { if (!isCallable(val)) { // @ts-ignore optionsAcc[fnName][key] ??= val } else { + // @ts-ignore const valPrevious = optionsAcc[fnName]![key] as any as Function | undefined // @ts-ignore optionsAcc[fnName][key] = (...args: unknown[]) => { diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index df68d108e..b08c3aef2 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -303,4 +303,12 @@ export type ReactOptions = { hydrateRootOptions?: HydrationOptions createRootOptions?: RootOptions renderToStringOptions?: ServerOptions + /** + * Called when a `` boundary fails during SSR streaming. + * + * Useful for error tracking (e.g. Sentry). + * + * https://vike.dev/react-setting + */ + onBoundaryError?: (err: unknown) => void } From b24108879dfbc96850478a74067314a0436c9ce9 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:17:08 +0100 Subject: [PATCH 02/10] Revert "[AI] expose onBoundaryError via +react setting" This reverts commit 258de4aea297d2f5c51596aa3e76133dab4cb06b. --- packages/vike-react/src/integration/onRenderHtml.tsx | 3 +-- .../vike-react/src/integration/resolveReactOptions.ts | 11 ----------- packages/vike-react/src/types/Config.ts | 8 -------- 3 files changed, 1 insertion(+), 21 deletions(-) diff --git a/packages/vike-react/src/integration/onRenderHtml.tsx b/packages/vike-react/src/integration/onRenderHtml.tsx index 71f235754..da8eacfb5 100644 --- a/packages/vike-react/src/integration/onRenderHtml.tsx +++ b/packages/vike-react/src/integration/onRenderHtml.tsx @@ -72,7 +72,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { // https://github.com/vikejs/vike-react/issues/87#issuecomment-2488742744 await callCumulativeHooks(pageContext.config.onBeforeRenderHtml, pageContext) - const { renderToStringOptions, onBoundaryError } = resolveReactOptions(pageContext) + const { renderToStringOptions } = resolveReactOptions(pageContext) if (pageContext.page) { const streamSetting = resolveStreamSetting(pageContext) @@ -101,7 +101,6 @@ async function renderPageToHtml(pageContext: PageContextServer) { false, */ undefined, - onBoundaryError, }) pageContext.pageHtmlStream = pageHtmlStream } diff --git a/packages/vike-react/src/integration/resolveReactOptions.ts b/packages/vike-react/src/integration/resolveReactOptions.ts index 44c590720..18cdee48a 100644 --- a/packages/vike-react/src/integration/resolveReactOptions.ts +++ b/packages/vike-react/src/integration/resolveReactOptions.ts @@ -12,23 +12,12 @@ function resolveReactOptions(pageContext: PageContext) { if (!optionList) return objectEntries(optionList).forEach(([fnName, options]) => { if (!options) return - if (isCallable(options)) { - const valPrevious = optionsAcc[fnName] as Function | undefined - // @ts-ignore - optionsAcc[fnName] = (...args: unknown[]) => { - valPrevious?.(...args) - ;(options as Function)(...args) - } - return - } - // @ts-ignore optionsAcc[fnName] ??= {} objectEntries(options).forEach(([key, val]) => { if (!isCallable(val)) { // @ts-ignore optionsAcc[fnName][key] ??= val } else { - // @ts-ignore const valPrevious = optionsAcc[fnName]![key] as any as Function | undefined // @ts-ignore optionsAcc[fnName][key] = (...args: unknown[]) => { diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index b08c3aef2..df68d108e 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -303,12 +303,4 @@ export type ReactOptions = { hydrateRootOptions?: HydrationOptions createRootOptions?: RootOptions renderToStringOptions?: ServerOptions - /** - * Called when a `` boundary fails during SSR streaming. - * - * Useful for error tracking (e.g. Sentry). - * - * https://vike.dev/react-setting - */ - onBoundaryError?: (err: unknown) => void } From b62b3e1e24a30513266f5a3abd750c120d4042a1 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:28:41 +0100 Subject: [PATCH 03/10] [AI] expose onBoundaryError via +react.renderToStreamOptions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../vike-react/src/integration/onRenderHtml.tsx | 3 ++- .../src/integration/resolveReactOptions.ts | 1 + packages/vike-react/src/types/Config.ts | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/vike-react/src/integration/onRenderHtml.tsx b/packages/vike-react/src/integration/onRenderHtml.tsx index da8eacfb5..7e7c356d1 100644 --- a/packages/vike-react/src/integration/onRenderHtml.tsx +++ b/packages/vike-react/src/integration/onRenderHtml.tsx @@ -72,7 +72,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { // https://github.com/vikejs/vike-react/issues/87#issuecomment-2488742744 await callCumulativeHooks(pageContext.config.onBeforeRenderHtml, pageContext) - const { renderToStringOptions } = resolveReactOptions(pageContext) + const { renderToStringOptions, renderToStreamOptions } = resolveReactOptions(pageContext) if (pageContext.page) { const streamSetting = resolveStreamSetting(pageContext) @@ -101,6 +101,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { false, */ undefined, + ...renderToStreamOptions, }) pageContext.pageHtmlStream = pageHtmlStream } diff --git a/packages/vike-react/src/integration/resolveReactOptions.ts b/packages/vike-react/src/integration/resolveReactOptions.ts index 18cdee48a..27f73a446 100644 --- a/packages/vike-react/src/integration/resolveReactOptions.ts +++ b/packages/vike-react/src/integration/resolveReactOptions.ts @@ -22,6 +22,7 @@ function resolveReactOptions(pageContext: PageContext) { // @ts-ignore optionsAcc[fnName][key] = (...args: unknown[]) => { valPrevious?.(...args) + // @ts-ignore val(...args) } } diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index df68d108e..a4299029c 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -303,4 +303,18 @@ export type ReactOptions = { hydrateRootOptions?: HydrationOptions createRootOptions?: RootOptions renderToStringOptions?: ServerOptions + /** + * Options passed to `react-streaming`'s `renderToStream()` during SSR streaming. + * + * https://vike.dev/react-setting + */ + renderToStreamOptions?: { + /** + * Called when a Suspense boundary catches an error during SSR streaming (i.e. the fallback UI is shown instead of throwing). + * Useful for reporting boundary errors to error monitoring platforms such as Sentry. + * + * https://vike.dev/react-setting + */ + onBoundaryError?: (err: unknown) => void + } } From cf18582d4e1cacd541531e6e6d0b1440839d9130 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:39:19 +0100 Subject: [PATCH 04/10] chore: react-streaming@^0.4.16 --- examples/full/package.json | 2 +- packages/vike-react-apollo/package.json | 2 +- packages/vike-react-query/package.json | 2 +- packages/vike-react-zustand/package.json | 2 +- packages/vike-react/package.json | 2 +- pnpm-lock.yaml | 80 ++++++++++++------------ 6 files changed, 45 insertions(+), 45 deletions(-) diff --git a/examples/full/package.json b/examples/full/package.json index b81231eb0..6293b684b 100644 --- a/examples/full/package.json +++ b/examples/full/package.json @@ -10,7 +10,7 @@ "@vitejs/plugin-react": "^5.1.1", "react": "^19.2.1", "react-dom": "^19.2.1", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "typescript": "^5.9.3", "vike": "^0.4.253", "vike-react": "0.6.20", diff --git a/packages/vike-react-apollo/package.json b/packages/vike-react-apollo/package.json index 6d2def0b3..b61f54f41 100644 --- a/packages/vike-react-apollo/package.json +++ b/packages/vike-react-apollo/package.json @@ -36,7 +36,7 @@ "react": "^19.2.1", "react-dom": "^19.2.1", "@types/react-dom": "^19.1.9", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "rimraf": "^5.0.5", "typescript": "^5.9.2", "vike": "^0.4.253", diff --git a/packages/vike-react-query/package.json b/packages/vike-react-query/package.json index dd0a0cb73..aeef5b5c0 100644 --- a/packages/vike-react-query/package.json +++ b/packages/vike-react-query/package.json @@ -36,7 +36,7 @@ "jsdom": "^24.0.0", "react": "^19.2.1", "react-dom": "^19.2.1", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "rimraf": "^5.0.5", "typescript": "^5.9.2", "vike": "^0.4.253", diff --git a/packages/vike-react-zustand/package.json b/packages/vike-react-zustand/package.json index 9697428b8..f4b6cb96e 100644 --- a/packages/vike-react-zustand/package.json +++ b/packages/vike-react-zustand/package.json @@ -36,7 +36,7 @@ "typescript": "^5.9.2", "vike": "^0.4.253", "vike-react": "0.6.20", - "react-streaming": "^0.4.15", + "react-streaming": "^0.4.16", "vite": "^7.3.0", "zustand": "^5.0.3" }, diff --git a/packages/vike-react/package.json b/packages/vike-react/package.json index fc4fcc30d..19da49ed1 100644 --- a/packages/vike-react/package.json +++ b/packages/vike-react/package.json @@ -31,7 +31,7 @@ "./__internal/integration/Loading": "./dist/integration/Loading.js" }, "dependencies": { - "react-streaming": "^0.4.15" + "react-streaming": "^0.4.16" }, "peerDependencies": { "react": ">=19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7df4d9c28..788dcd8f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,7 +55,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -84,14 +84,14 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) typescript: specifier: ^5.9.3 version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -112,7 +112,7 @@ importers: version: 19.2.1(react@19.2.1) vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -145,7 +145,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -184,7 +184,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -232,13 +232,13 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-photon: specifier: ^0.1.20 - version: 0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)) + version: 0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.10 - version: 0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))) + version: 0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))) vike-react-sentry: specifier: 0.1.0 version: link:../../packages/vike-react-sentry @@ -271,7 +271,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../../packages/vike-react @@ -288,8 +288,8 @@ importers: packages/vike-react: dependencies: react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) devDependencies: '@biomejs/biome': specifier: ^1.9.4 @@ -320,7 +320,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@24.0.8) @@ -350,7 +350,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -392,8 +392,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -402,7 +402,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -435,7 +435,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -480,8 +480,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -490,7 +490,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -530,7 +530,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -573,7 +573,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -603,7 +603,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -636,7 +636,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -678,8 +678,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) react-streaming: - specifier: ^0.4.15 - version: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^0.4.16 + version: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -688,7 +688,7 @@ importers: version: 5.9.3 vike: specifier: ^0.4.253 - version: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + version: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.20 version: link:../vike-react @@ -3673,8 +3673,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react-streaming@0.4.15: - resolution: {integrity: sha512-3/olKmuCRYNLy0nFGXI54ErYKK1cfxJ3UoKn6pPZkknaHSn1APvJHE9MkKow/2s2CG94emxXoj/RMVpGF4Lxzg==} + react-streaming@0.4.16: + resolution: {integrity: sha512-qaDUklKjpmPStven+MvFFk3SWN+UaeIugBNwKgd97UPIR8IMUzk68gIg2iPR1fN7+HkrpLmTVwZE9dGoLZTcCA==} peerDependencies: react: '>=19' react-dom: '>=19' @@ -7767,11 +7767,11 @@ snapshots: react-refresh@0.18.0: {} - react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@brillout/import': 0.2.6 '@brillout/json-serializer': 0.5.21 - '@brillout/picocolors': 1.0.29 + '@brillout/picocolors': 1.0.30 isbot-fast: 1.2.0 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) @@ -8126,7 +8126,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vike-photon@0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)): + vike-photon@0.1.24(@photonjs/core@0.1.21(hono@4.11.4)(srvx@0.9.8)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.16(hono@4.11.4)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.11.4)(rollup@4.46.2)(srvx@0.9.8)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)): dependencies: '@brillout/picocolors': 1.0.30 '@brillout/vite-plugin-server-entry': 0.7.17 @@ -8137,7 +8137,7 @@ snapshots: '@universal-middleware/sirv': 0.1.25 pkg-types: 2.3.0 standaloner: 0.1.11(rollup@4.46.2) - vike: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + vike: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) optionalDependencies: vite: 7.3.0(@types/node@24.0.8) transitivePeerDependencies: @@ -8154,14 +8154,14 @@ snapshots: - srvx - supports-color - vike-react@0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))): + vike-react@0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.253(react-streaming@0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))): dependencies: react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - react-streaming: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - vike: 0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + react-streaming: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + vike: 0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) - vike@0.4.253(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)): + vike@0.4.253(react-streaming@0.4.16(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)): dependencies: '@babel/core': 7.28.5 '@babel/types': 7.28.5 @@ -8181,7 +8181,7 @@ snapshots: source-map-support: 0.5.21 tinyglobby: 0.2.15 optionalDependencies: - react-streaming: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + react-streaming: 0.4.16(react-dom@19.2.1(react@19.2.1))(react@19.2.1) vite: 7.3.0(@types/node@24.0.8) transitivePeerDependencies: - supports-color From 10b70ba51b6b25e3691d9eb12290f1ea03b6f069 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:41:26 +0100 Subject: [PATCH 05/10] [AI] support all RenderToStreamOptions in +react.renderToStreamOptions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- packages/vike-react/src/types/Config.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index a4299029c..ecfdb5c2f 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -5,6 +5,7 @@ import type { ConfigsCumulative } from '../hooks/useConfig/configsCumulative.js' import type React from 'react' import type { HydrationOptions, RootOptions } from 'react-dom/client' import type { ServerOptions } from 'react-dom/server' +import type { RenderToStreamOptions } from 'react-streaming/server' // https://vike.dev/meta#typescript declare global { @@ -308,13 +309,5 @@ export type ReactOptions = { * * https://vike.dev/react-setting */ - renderToStreamOptions?: { - /** - * Called when a Suspense boundary catches an error during SSR streaming (i.e. the fallback UI is shown instead of throwing). - * Useful for reporting boundary errors to error monitoring platforms such as Sentry. - * - * https://vike.dev/react-setting - */ - onBoundaryError?: (err: unknown) => void - } + renderToStreamOptions?: Omit } From 999745be763e30533c618a379fc10eff21b46020 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:51:36 +0100 Subject: [PATCH 06/10] [AI] use full RenderToStreamOptions, spread user opts first Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- packages/vike-react/src/integration/onRenderHtml.tsx | 2 +- packages/vike-react/src/types/Config.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vike-react/src/integration/onRenderHtml.tsx b/packages/vike-react/src/integration/onRenderHtml.tsx index 7e7c356d1..fbdff0579 100644 --- a/packages/vike-react/src/integration/onRenderHtml.tsx +++ b/packages/vike-react/src/integration/onRenderHtml.tsx @@ -81,6 +81,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { pageContext.pageHtmlString = pageHtmlString } else { const pageHtmlStream = await renderToStream(pageContext.page, { + ...renderToStreamOptions, webStream: !streamSetting.type ? /* Let react-streaming decide which stream type to use. false @@ -101,7 +102,6 @@ async function renderPageToHtml(pageContext: PageContextServer) { false, */ undefined, - ...renderToStreamOptions, }) pageContext.pageHtmlStream = pageHtmlStream } diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index ecfdb5c2f..4709199b4 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -309,5 +309,5 @@ export type ReactOptions = { * * https://vike.dev/react-setting */ - renderToStreamOptions?: Omit + renderToStreamOptions?: RenderToStreamOptions } From 849d0a531c754d99ed59104804218ddc85bcc391 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:53:22 +0100 Subject: [PATCH 07/10] wip --- packages/vike-react/src/integration/onRenderHtml.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vike-react/src/integration/onRenderHtml.tsx b/packages/vike-react/src/integration/onRenderHtml.tsx index fbdff0579..7e7c356d1 100644 --- a/packages/vike-react/src/integration/onRenderHtml.tsx +++ b/packages/vike-react/src/integration/onRenderHtml.tsx @@ -81,7 +81,6 @@ async function renderPageToHtml(pageContext: PageContextServer) { pageContext.pageHtmlString = pageHtmlString } else { const pageHtmlStream = await renderToStream(pageContext.page, { - ...renderToStreamOptions, webStream: !streamSetting.type ? /* Let react-streaming decide which stream type to use. false @@ -102,6 +101,7 @@ async function renderPageToHtml(pageContext: PageContextServer) { false, */ undefined, + ...renderToStreamOptions, }) pageContext.pageHtmlStream = pageHtmlStream } From e8e775a3a0416aebbf9074daa0868226dcae466a Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:56:25 +0100 Subject: [PATCH 08/10] jsdocs From 02c60b93fb1fd29bbc142be4abfdb1303b745678 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:56:27 +0100 Subject: [PATCH 09/10] add TODO/ai --- packages/vike-react/src/types/Config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index 4709199b4..93b12344e 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -300,6 +300,7 @@ export type ConfigViaHook = PickWithoutGetter< export type ConfigViaHookResolved = Omit & Pick +// TODO/ai add JSDocs with links to each prop export type ReactOptions = { hydrateRootOptions?: HydrationOptions createRootOptions?: RootOptions @@ -307,6 +308,7 @@ export type ReactOptions = { /** * Options passed to `react-streaming`'s `renderToStream()` during SSR streaming. * + * https://github.com/brillout/react-streaming#options * https://vike.dev/react-setting */ renderToStreamOptions?: RenderToStreamOptions From f5183b895680fd812f247de516ab0a85a6c5f52e Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Wed, 4 Mar 2026 19:57:43 +0100 Subject: [PATCH 10/10] [AI] Add JSDocs with links to ReactOptions props Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- packages/vike-react/src/types/Config.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/vike-react/src/types/Config.ts b/packages/vike-react/src/types/Config.ts index 93b12344e..adb229480 100644 --- a/packages/vike-react/src/types/Config.ts +++ b/packages/vike-react/src/types/Config.ts @@ -300,10 +300,27 @@ export type ConfigViaHook = PickWithoutGetter< export type ConfigViaHookResolved = Omit & Pick -// TODO/ai add JSDocs with links to each prop export type ReactOptions = { + /** + * Options passed to React's `hydrateRoot()`. + * + * https://react.dev/reference/react-dom/client/hydrateRoot + * https://vike.dev/react-setting + */ hydrateRootOptions?: HydrationOptions + /** + * Options passed to React's `createRoot()`. + * + * https://react.dev/reference/react-dom/client/createRoot + * https://vike.dev/react-setting + */ createRootOptions?: RootOptions + /** + * Options passed to React's `renderToString()`. + * + * https://react.dev/reference/react-dom/server/renderToString + * https://vike.dev/react-setting + */ renderToStringOptions?: ServerOptions /** * Options passed to `react-streaming`'s `renderToStream()` during SSR streaming.