vitejs/vite · error · Error
Cannot print server URLs in middleware mode.
Error message
Cannot print server URLs in middleware mode.
What it means
Thrown by server.printUrls() when the server has no resolvedUrls and was started in middleware mode. In middleware mode Vite does not own an HTTP listener, so it cannot know which host/port the parent server uses, and there is nothing meaningful to print.
Solutions
- Remove the printUrls() call in middleware mode — log the URL from your own HTTP server instead.
- If you still want Vite-style output, compute the URL from your parent server's address and print it yourself.
- Switch out of middleware mode (remove server.middlewareMode) if you want Vite to own the listener and print URLs.
Example fix
// before
const vite = await createServer({ server: { middlewareMode: true } })
vite.printUrls() // throws
// after
const vite = await createServer({ server: { middlewareMode: true } })
app.use(vite.middlewares)
// print the parent server URL yourself once app.listen completes Defensive patterns
Strategy: validation
Validate before calling
if (!server.config.server.middlewareMode) {
server.printUrls()
} Prevention
- Skip printUrls() in middleware mode; log the URL from your parent HTTP server.
- Wrap printUrls in a helper that checks middlewareMode first.
When it happens
Trigger: Calling server.printUrls() on a server created with server.middlewareMode: true (or the express/connect middleware form). resolvedUrls stays empty because Vite never bound a port; the check is at server/index.ts:797-798.
Common situations: Following a standalone-server tutorial (which calls printUrls) while integrating Vite as middleware inside Express/Connect/Next. Copying the default server startup snippet into a custom server bootstrap.
Related errors
- Cannot call server.listen in middleware mode.
- Cannot print server URLs before server.listen is called.
- HTTP server not available
- client ID conflict detected. Please restart the dev server.
- Config was resolved for a "build", expected a "serve"…
AI-assisted analysis of vitejs/vite@b4d66fee14 (2026-08-11).
Data as JSON: /api/errors/9efcb70f1d612355.
Report an issue: GitHub.
Appendix: source
Thrown at packages/vite/src/node/server/index.ts:798
} else {
server.config.logger.warn('No URL available to open in browser')
}
},
async close() {
if (!closeServerPromise) {
closeServerPromise = closeServer()
}
return closeServerPromise
},
printUrls() {
if (server.resolvedUrls) {
printServerUrls(
server.resolvedUrls,
serverConfig.host,
config.logger.info,
)
} else if (middlewareMode) {
throw new Error('Cannot print server URLs in middleware mode.')
} else {
throw new Error(
'Cannot print server URLs before server.listen is called.',
)
}
},
bindCLIShortcuts(options) {
bindCLIShortcuts(server, options)
},
async restart(forceOptimize?: boolean) {
if (!server._restartPromise) {
server._forceOptimizeOnRestart = !!forceOptimize
server._restartPromise = restartServer(server).finally(() => {
server._restartPromise = null
server._forceOptimizeOnRestart = false
})
}
return server._restartPromiseView on GitHub (pinned to b4d66fee14)