{"record":{"id":"1bbf21f1d47f7f18","repo":"withastro/astro","slug":"couldn-t-find-component-for-route-routedata-path","errorCode":null,"errorMessage":"Couldn't find component for route ${routeData.pathname}","messagePattern":"Couldn't find component for route (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/astro/src/container/environment.ts","lineNumber":89,"sourceCode":" * The container environment. Registered by `experimental_AstroContainer`'s\n * constructor on its fabricated manifest — the container never touches the\n * ambient manifest, so multiple containers in one process stay isolated.\n */\nexport function createContainerEnvironment({\n\tinterner,\n\tresolve,\n\trenderers,\n\tstreaming,\n}: ContainerEnvironmentOptions): RenderEnvironment {\n\tasync function getComponentByRoute(\n\t\t_manifest: SSRManifest,\n\t\trouteData: RouteData,\n\t): Promise<ComponentInstance> {\n\t\tconst page = interner.get(routeData);\n\t\tif (page) {\n\t\t\treturn page.page();\n\t\t}\n\t\tthrow new Error(\"Couldn't find component for route \" + routeData.pathname);\n\t}\n\n\treturn {\n\t\tname: 'container',\n\t\truntimeMode: 'development',\n\t\tdefaultStreaming: () => streaming,\n\n\t\tasync resolve(_manifest: SSRManifest, specifier: string): Promise<string> {\n\t\t\treturn resolve(specifier);\n\t\t},\n\n\t\theadElements(manifest: SSRManifest, routeData: RouteData): HeadElements {\n\t\t\tconst routeInfo = manifest.routes.find((route) => route.routeData === routeData);\n\t\t\tconst links = new Set<never>();\n\t\t\tconst scripts = new Set<SSRElement>();\n\t\t\tconst styles = createStylesheetElementSet(routeInfo?.styles ?? []);\n\n\t\t\tfor (const script of routeInfo?.scripts ?? []) {","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/withastro/astro/blob/52e6c34790cc8ac4e69e6135ace06049867e5c4a/packages/astro/src/container/environment.ts#L71-L107","documentation":"The experimental Astro container renders through a per-container WeakMap (the `interner`) mapping RouteData to its page module. Only routes created by that container's own renderToResponse/insertRoute flow — plus rewrites resolved against the same manifest — are interned. This error means getComponentByRoute was handed a RouteData that this container instance never registered.","triggerScenarios":"Rendering with a RouteData obtained from another `experimental_AstroContainer` instance, from a real app's SSR manifest, or built by hand; an `Astro.rewrite()` inside a container test targeting a route that was never inserted into this container; caching RouteData across container instances.","commonSituations":"Unit-test harnesses that construct RouteData manually or reuse saved route objects; middleware that rewrites to a path with no corresponding inserted route; mixing manifest-based routes into container-based rendering.","solutions":["Render via the container's public API — `container.renderToString(Component, { request })` / `container.renderToResponse(Component, { params, request })` — so the container creates and interns its own RouteData","For rewrites in container tests, ensure the rewrite target route is one this container rendered/inserted; avoid rewriting to non-inserted routes","Never share RouteData between container instances: each container has its own interner, so create and use the RouteData within the same instance"],"exampleFix":"// before: reusing a RouteData this container never interned\nconst routeData = savedRouteDataFromAnotherContainer;\nawait renderWithRoute(container, routeData, request);\n\n// after: let the container create + intern its own route\nconst container = await experimental_AstroContainer.create();\nconst html = await container.renderToString(Page, {\n  request: new Request('https://example.com/page'),\n});","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const html = await container.renderToString(Page, { request });\n} catch (e) {\n  if (e instanceof Error && e.message.startsWith(\"Couldn't find component for route\")) {\n    // the RouteData was never interned by THIS container:\n    // re-render via renderToString/renderToResponse so the container owns the route\n  } else {\n    throw e;\n  }\n}","preventionTips":["Always render through `container.renderToString`/`renderToResponse` instead of hand-built RouteData","Create one container per test case and never share RouteData or component instances across containers — the interner is a per-instance WeakMap","In container tests, avoid `Astro.rewrite` to paths the container has not rendered/inserted"],"tags":["container","testing","routing","ssr","experimental"],"backgroundTag":"route-not-found","analyzedSha":"52e6c34790cc8ac4e69e6135ace06049867e5c4a","analyzedAt":"2026-08-18T18:48:03.901Z","contentChangedAt":"2026-08-18T18:48:03.901Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}