{"record":{"id":"d4dc4e8af67dd229","repo":"vitejs/vite","slug":"http-server-not-available","errorCode":null,"errorMessage":"HTTP server not available","messagePattern":"HTTP server not available","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vite/src/node/cli.ts","lineNumber":234,"sourceCode":"      const { createServer } = await import('./server')\n      try {\n        const server = await createServer({\n          root,\n          base: options.base,\n          mode: options.mode,\n          configFile: options.config,\n          configLoader: options.configLoader,\n          logLevel: options.logLevel,\n          clearScreen: options.clearScreen,\n          server: cleanGlobalCLIOptions(options),\n          forceOptimizeDeps: options.force,\n          experimental: {\n            bundledDev: options.experimentalBundle,\n          },\n        })\n\n        if (!server.httpServer) {\n          throw new Error('HTTP server not available')\n        }\n\n        await server.listen()\n\n        const info = server.config.logger.info\n\n        const modeString =\n          options.mode && options.mode !== 'development'\n            ? `  ${colors.bgGreen(` ${colors.bold(options.mode)} `)}`\n            : ''\n        const viteStartTime = global.__vite_start_time ?? false\n        const startupDurationString = viteStartTime\n          ? colors.dim(\n              `ready in ${colors.reset(\n                colors.bold(Math.ceil(performance.now() - viteStartTime)),\n              )} ms`,\n            )\n          : ''","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/vitejs/vite/blob/b4d66fee14d970f45b8a6f3d7d6aee73ca9b88ab/packages/vite/src/node/cli.ts#L216-L252","documentation":"After createServer resolves, the CLI checks that server.httpServer exists before calling server.listen(). If it is missing the dev server has no HTTP listener to bind, so the CLI throws 'HTTP server not available'. This guards against server middleware configurations that suppress the HTTP server (e.g. server.middlewareMode: true) being used with the `vite` serve command.","triggerScenarios":"Running the `vite` (dev) CLI command while the config or inline options set server.middlewareMode: true, which skips creating an httpServer. Also possible if a plugin or custom server factory returns a server without httpServer.","commonSituations":"Reusing a middleware-mode config (meant for SSR integration with Express/Fastify) when starting vite standalone; copying an SSR example's vite.config into a fresh app.","solutions":["Remove server.middlewareMode: true from the config used by the `vite` CLI.","If you need middleware mode, consume the server programmatically via createServer and skip server.listen().","Use a separate config file (e.g. vite.ssr.config.ts) for middleware mode and the default for CLI dev."],"exampleFix":"// before\nexport default defineConfig({ server: { middlewareMode: true } })\n// after\nexport default defineConfig({ /* server.middlewareMode removed */ })","handlingStrategy":"validation","validationCode":"function ensureHttpServerConfig(config) {\n  if (config?.server?.middlewareMode) {\n    return 'server.middlewareMode is incompatible with the vite dev CLI; consume the server programmatically instead.';\n  }\n  return null;\n}","typeGuard":"function configSupportsListen(config) {\n  return !config?.server?.middlewareMode;\n}","tryCatchPattern":null,"preventionTips":["Keep a dedicated config for CLI dev (no middlewareMode).","Use createServer + app.use(vite.middlewares) when integrating with an existing server."],"tags":["cli","dev-server","config","middleware-mode"],"backgroundTag":null,"analyzedSha":"b4d66fee14d970f45b8a6f3d7d6aee73ca9b88ab","analyzedAt":"2026-08-11T11:49:19.515Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}