{"record":{"id":"682afb0d35cbda69","repo":"quasarframework/quasar","slug":"render-failed-682afb","errorCode":null,"errorMessage":"Render failed","messagePattern":"Render failed","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app-vite/lib/modes/ssr/ssr-devserver.js","lineNumber":392,"sourceCode":"        serverAssets: this.#pathMap.resolveServerAssetsFolder\n      },\n      publicPath,\n      folders: {\n        root: this.#pathMap.rootFolder,\n        public: this.#pathMap.publicFolder,\n        serverAssets: this.#pathMap.serverAssetsFolder\n      },\n      render: this.#appOptions.render\n    }\n\n    middlewareParams.app = await create(middlewareParams)\n\n    const serveStatic = await serveStaticContent(middlewareParams)\n    middlewareParams.serve = {\n      static: serveStatic,\n      devError: ({ err, req }) => {\n        log()\n        warn(req.url, 'Render failed')\n\n        return renderSSRError({\n          err:\n            err instanceof Error\n              ? err\n              : new Error(String(err) || 'Unknown error'),\n          req,\n          rootFolder: this.#pathMap.rootFolder\n        })\n      }\n    }\n\n    /** @type {import('../../../types').SsrInjectDevMiddlewareFn} */\n    const registerDevMiddleware = await injectDevMiddleware(middlewareParams)\n\n    await registerDevMiddleware((req, res, next) => {\n      if (this.clientServer === null) {\n        next()","sourceCodeStart":374,"sourceCodeEnd":410,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/ssr/ssr-devserver.js#L374-L410","documentation":"During `quasar dev` with SSR mode, the dev webserver's error middleware caught an exception thrown while rendering a page request. Quasar logs the failing request URL as 'Render failed' and then hands the error to renderSSRError to produce a fallback error page instead of crashing the dev server.","triggerScenarios":"Any uncaught error inside the SSR render pipeline of a request during `quasar dev` in SSR mode: an exception in the app's SSR entry (src-ssr/server or the renderer), a throwing Vue component setup during server render, or an error thrown in SSR middleware. Emitted from the devError handler registered by #bootWebserver (called by #compileWebserver) in ssr-devserver.js.","commonSituations":"Accessing browser-only APIs (window/document) during SSR render; a component throwing on the server; a bad import in src-ssr middleware; database/API fetch failure inside ssrMiddlewareRender; recent code change breaking the server bundle.","solutions":["Read the stack trace printed after this warning in the terminal to find the actual throwing code in your app.","Guard browser-only APIs (check process.env.CLIENT / import.meta.env.CLIENT or typeof window) before use in components that also render on the server.","Check src-ssr/middlewares/render.js and any custom SSR middleware for throwing code.","Restart `quasar dev` after editing src-ssr files if hot reload didn't pick up the change."],"exampleFix":"// before\nexport default defineComponent({\n  setup() {\n    return { width: window.innerWidth } // throws during SSR render\n  }\n})\n// after\nimport { useQuasar } from 'quasar'\nexport default defineComponent({\n  setup() {\n    const $q = useQuasar()\n    return { width: $q.screen.width } // SSR-safe reactive width\n  }\n})","handlingStrategy":"try-catch","validationCode":"// In src-ssr middleware, validate the render pipeline before rendering:\nif (typeof window !== 'undefined') {\n  throw new Error('SSR middleware loaded in client context')\n}","typeGuard":null,"tryCatchPattern":"// Wrap custom SSR render middleware:\ntry {\n  await render({ req, res })\n} catch (err) {\n  console.error('SSR render failed for', req.url, err)\n  res.statusCode = 500\n  res.end('Server error')\n}","preventionTips":["Audit components for window/document access; use $q.screen or process.env.CLIENT guards.","Test SSR locally with `quasar dev -m ssr` and hit pages with curl before deploying.","Keep src-ssr middleware minimal and wrap third-party calls in try/catch.","Add a fallback error page in src-ssr for graceful degradation."],"tags":["ssr","dev-server","render-error","middleware"],"backgroundTag":"ssr-render-error","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}