{"record":{"id":"395ef1ed35e9b35e","repo":"withastro/astro","slug":"preview-settings-adapter-name-cannot-preview","errorCode":null,"errorMessage":"[preview] ${settings.adapter.name} cannot preview your app.","messagePattern":"\\[preview\\] (.+?) cannot preview your app\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/astro/src/core/preview/index.ts","lineNumber":81,"sourceCode":"\t\tthrow new Error(`[preview] No adapter found.`);\n\t}\n\n\tif (!settings.adapter.previewEntrypoint) {\n\t\tthrow new Error(\n\t\t\t`[preview] The ${settings.adapter.name} adapter does not support the preview command.`,\n\t\t);\n\t}\n\t// We need to use require.resolve() here so that advanced package managers like pnpm\n\t// don't treat this as a dependency of Astro itself. This correctly resolves the\n\t// preview entrypoint of the integration package, relative to the user's project root.\n\tconst require = createRequire(settings.config.root);\n\tconst previewEntrypointUrl = pathToFileURL(\n\t\trequire.resolve(settings.adapter.previewEntrypoint.toString()),\n\t).href;\n\n\tconst previewModule = (await import(previewEntrypointUrl)) as Partial<PreviewModule>;\n\tif (typeof previewModule.default !== 'function') {\n\t\tthrow new Error(`[preview] ${settings.adapter.name} cannot preview your app.`);\n\t}\n\n\tconst server = await previewModule.default({\n\t\toutDir: settings.config.outDir,\n\t\tclient: settings.config.build.client,\n\t\tserver: settings.config.build.server,\n\t\tserverEntrypoint: new URL(settings.config.build.serverEntry, settings.config.build.server),\n\t\thost: getResolvedHostForHttpServer(settings.config.server.host),\n\t\tport: settings.config.server.port,\n\t\tbase: settings.config.base,\n\t\tlogger: new AstroIntegrationLogger(logger.options, settings.adapter.name),\n\t\theaders: settings.config.server.headers,\n\t\tallowedHosts: settings.config.server.allowedHosts,\n\t\topen: settings.config.server.open,\n\t\troot: settings.config.root,\n\t});\n\n\treturn server;","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/withastro/astro/blob/d081033d5fe8e8a68c4bbbad4af9d2deb9c74bca/packages/astro/src/core/preview/index.ts#L63-L99","documentation":"Thrown by preview after dynamically importing the adapter's previewEntrypoint: the module's default export must be a function (the preview server factory). If previewModule.default is not a function, the adapter's preview entrypoint is malformed or incompatible, and preview cannot proceed.","triggerScenarios":"An adapter declares a previewEntrypoint but the resolved module's default export is missing, not a function, or is the wrong shape. The check `typeof previewModule.default !== 'function'` fails after the import.","commonSituations":"Adapter version mismatch where the preview entrypoint changed shape; a broken/partial adapter package; pointing previewEntrypoint at a non-default-export module; adapter/astro version skew after upgrading one but not the other.","solutions":["Upgrade the adapter and Astro together to compatible versions.","Verify the adapter package is intact (reinstall node_modules / lockfile).","Switch to an adapter known to ship a working preview entrypoint (e.g. @astrojs/node).","If authoring an adapter, ensure the preview entrypoint's default export is an async function returning a PreviewServer."],"exampleFix":"// before - astro and adapter versions mismatched\nastro preview  // entrypoint default export not a function\n\n// after\npnpm update astro @astrojs/node\nastro build && astro preview","handlingStrategy":"type-guard","validationCode":"// Validate the adapter's preview module shape before invoking.\nconst previewModule = await import(previewEntrypointUrl);\nif (typeof previewModule.default !== 'function') {\n  throw new Error('adapter preview entrypoint default export is not a function');\n}\nconst server = await previewModule.default(opts);","typeGuard":"function isPreviewModule(m: unknown): m is { default: (opts: any) => Promise<PreviewServer> } {\n  return typeof (m as any)?.default === 'function';\n}","tryCatchPattern":"try {\n  await previewModule.default(opts);\n} catch (e) {\n  if (e instanceof Error && /cannot preview/i.test(e.message)) {\n    // adapter entrypoint malformed; reinstall/upgrade adapter\n  }\n  throw e;\n}","preventionTips":["Keep astro and adapter versions in sync (matching majors).","Reinstall node_modules if the adapter package looks corrupted.","Prefer a well-maintained adapter for local preview."],"tags":["preview","adapter","ssr","cli","compatibility"],"backgroundTag":null,"analyzedSha":"d081033d5fe8e8a68c4bbbad4af9d2deb9c74bca","analyzedAt":"2026-08-12T13:37:29.035Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}